Mam rozwiązanie, które kiedyś napisałem dla własnych potrzeb, zamieściłem je kiedyś w FAQach, ale nie mogłem go teraz znaleźć. Aha kod jest w Delphi:
Jak zrobić, aby złapać za dowolne miejsce na formie
i przenieść całą formę w inne miejsce?
Deklarujemy zmienne:
var
P : TPoint; // współrzędne miejsca kliknięcia
// (ale według Formy, a nie Pulpitu)
Stwórz Timer:
Name= TRuch,
Interval = 10, czym mniejsza wartość tym płynniej się będzie poruszać
Enabled = False.
Ustaw zdarzenie OnTimer:
procedure TFomr1.TRuchTimer(Sender: TObject);
var P2 : TPoint; // aktualna pozycja kursora
begin
GetCursorPos(P2); // bierze współrzędne kursora
Form1.Left:=P2.X - P.X; // ustawia formę w nowym miejscu
Form1.Top :=P2.Y - P.Y;
end;
Ustaw zdarzenie OnMouseDown Formy:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
If Button = mbLeft then // może być też mbRight
begin
GetCursorPos(P);
P.X:=P.X - Form1.Left;
P.Y:=P.Y - Form1.Top;
TRuch.Enabled:=true;
end;
end;
Ustaw zdarzenie OnMouseUp Formy:
procedure TfOkno.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
TRuch.Enabled:=false;
end;