jak przesuwać formę przy włączonym TransparentColor?

0

BorderStyle formy ustawiłem na bsNone
TransparentColor ustawiłem na True i na kolor domyślny Formy, czyli clBtnFace.

Do przesuwania formy chciałbym użyć np.

procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
begin
  inherited;
  if Msg.Result = HTCLIENT then Msg.Result:= HTCAPTION;
end;
  • HTTOPRIGHT i inne rzeczy, by skalować nią

tyle, że przy TransparentColor ustawionym na True, nie da rady w nic kliknąć z tym kolorem, a ja chcę klikać na niewidzialnej formie, by ją przemieszczać (a skąd będę wiedział, że ją przemieszczam? rysuję sobie czarnym kolorem ramkę

Canvas.Rectangle(Canvas.ClipRect);

)

Może jakiś komunikat mam wysłuchiwać i zmieniać go, że forma jest cała widoczna i wtedy będę mógł klikać na formie normalnie? (bo w tej chwili jak jest niewidzialna, to może być na wierzchu i jak klikną na formę, to kliknięcie zostanie wykonane np. na pulpicie lub w firefoxie, czyli tak jakby nie istniała ta forma).
Moglibyście mi coś doradzić?

0

BorderStyle formy ustawiłem na bsNone
TransparentColor ustawiłem na True i na kolor domyślny Formy, czyli clBtnFace.

Jeżeli usuniesz obramowanie formularza oraz jego całe tło, to nie możesz jej "złapać i przesunąć" w standardowy sposób; Możesz kombinować z wysyłaniem komunikatów, ale nie wiem czy to będzie dobre rozwiązanie, bo w którym momencie chcesz ją przesunąć i czym? Klawiszem? Myszą? Napisz coś więcej i zrób zrzut ekranu z uruchomionym programem;

Polecam stworzenie jakiegoś małego obrazka, za który można by złapać i przesunąć formularz; Do tego celu wystarczy ReleaseCapture i komunikat WM_NCLBUTTONDOWN, a jako wParam podać typ akcji; Przykładowa funkcja (trzeba ją umieścić w zdarzeniu OnMouseDown kontrolki obrazu):

procedure MoveForm();
begin
  ReleaseCapture();
  SendMessage(Form.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;

Po wciśnięciu LPM i ruszaniu myszą formularz zostanie przesuwany; Dokładnie ten sam komunikat możesz wykorzystać do rozciągania formularza, tyle że jako wParam musisz podać jedną z poniższych wartości:

Wartość Opis
HTTOP rozciąganie w górę
HTBOTTOM rozciąganie w dół
HTLEFT rozciąganie w lewo
HTRIGHT rozciąganie w prawo
HTTOPLEFT rozciąganie w lewo i górę
HTTOPRIGHT rozciąganie w prawo i górę
HTBOTTOMLEFT rozciąganie w lewo i dół
HTBOTTOMRIGHT rozciąganie w prawo i dół
dzięki temu będziesz mógł dowolnie rozciągać i przesuwać formularz;

Jeśli zaś nie interesuje Cię dodanie małego obrazka jako uchwytu, za który możesz przesuwać formularz, to wywołaj procedurę MoveForm (jej kod podałem wyżej) w zdarzenia OnMouseDown każdej kontrolki na formularzu, dzięki temu "łapiąc" za dowolną kontrolkę (o ile posiada zdarzenie OnMouseDown) będziesz mógł przesuwać całą formą; Ten sposób wykluczy dodanie obrazów-uchwytów, jednak możesz mieć przez to problem z przyciskami (i być może innymi kontrolkami, które obsługuje się myszą);

Ja osobiście polecam utworzenie takiego obrazu-uchwytu, za który można łapać i przesuwać formularz, albo pokazywanie formularza po wciśnięciu danego klawisza, a po jego zwolnieniu ponowne ukrycie tła formularza; Zrób jak uwarzasz.

0

Aha, dziękuję. Zaraz się pobawię.

A co do tego, co wcześniej miałem to takie okno było (buttony tylko tymczasowo, to prowizoryczne wszystko, buttonów nie będzie):
http://www.upislam.com/images/32396265330842857460.jpg
i w tej wersji można było za ramkę chwycić i przesuwać, bo miała inny kolor niż kolor przeźroczystości. Najbardziej bym chciał móc klikać na tym niewidzialnym polu, by przesuwać, szkoda, że domyślnie nie jest zrobione tak, że Forma jest niewidzialna, ale klikalna, czyli, że nie da się klikać na to co jest pod formą, mimo, że widać to, wtedy byłoby fajnie.

0

Najbardziej bym chciał móc klikać na tym niewidzialnym polu, by przesuwać, szkoda, że domyślnie nie jest zrobione tak, że Forma jest niewidzialna, ale klikalna, czyli, że nie da się klikać na to co jest pod formą, mimo, że widać to, wtedy byłoby fajnie.

To teraz zastanów się czy miałoby to jakikolwiek sens; Właśnie po to jest przezroczystość, by w obszarach transparentnych nie można było klikać - komunikaty lądują albo do okien pod spodem, albo do pulpitu; Takie było założenie, więc spełnia swoją rolę bardzo dobrze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1