Przenoszenia formularza klinaniem w jego dowolnym punkcie
I sposób:
Aby umożliwić użytkownikowi przeciąganie formularza, gdy kliknie on w jego dowolnym miejscu przechwycimy komunikat WM_NCHITTEST (wysyłany do formularza, gdy wskaźnik myszy zmienia swoje położenie, albo gdy zostanie wciśnięty lub puszczony przycisk myszy) i w funkcji obsługującej go sprawdzimy, czy użytkownik kliknął w obszarze formularza, a jeśli tak to "oszukamy" formularz i przekażemy mu, że użytkownik jednak kliknął na pasku tytułu formularza, a nie w obszarze formularza. Tworzymy więc w pliku nagłówkowym formularza deklarację funkcji obsługującej komunikat i mapę komunikatu:
Unit1.h |
public: BEGIN_MESSAGE_MAP |
a w pliku formularza piszemy funkcję obsługującą komunikat:
Unit1.cpp |
void __fastcall TForm1::MoveIt(TMessage &Msg) |
II sposób:
Prostszym sposobem przesuwania formularza przez kliknięcie w jego dowolnym punkcie jest obsłużenie zdarzenia OnMouseDown dla głównego formularza. W tym zdarzeniu za pomocą funkcji Windows API SendMessage() wysyłamy najpierw wiadomość, w celu oszukania Windowsa, że klawisz myszy, który został kliknięty w polu formularza został już puszczony, a następnie drugą wiadomość o kliknięciu myszą na pasku tytułu formularza co pozwala na jego przeciąganie:
Unit1.cpp |
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton
Button, TShiftState Shift, int
X, int Y) |