Programowanie w języku Delphi » FAQ

Jak przesuwać formę jeżeli BorderStyle bsNone

  • 2010-01-22 19:19
  • 3 komentarze
  • 883 odsłony
  • Oceń ten tekst jako pierwszy
Musisz pierw zadeklarować dwie zmienne globanle:

var
  MD : Boolean;
  P : TPoint;


Teraz wygeneruj procedury: OnMouseDown, OnMouseMove, OnMouseUp. Procedury te powinny wyglądać tak:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MD := True;
  P :=  Point(X, Y);
end;
 
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if MD then
  begin
    Left := Left + (X - P.X);
    Top := Top + (Y - P.Y);
  end;
end;
 
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MD := False;
end;

3 komentarze

prgtw 2005-06-26 19:00

@bzz: Tak jest łatwiej ale jeżeli na formie jest obrazek np. tło formy to już ten pomysł nie jest skuteczny.
Lepiej dać tak:
W sekcji PRIVATE:

PROCEDURE WMNCHitTest(VAR Msg: TWMNCHitTest); MESSAGE WM_NCHITTEST;


i uzupełniamy:
PROCEDURE TForm1.WMNCHitTest(VAR Msg: TWMNCHitTest);
BEGIN
  INHERITED;
  IF Msg.Result = HTCLIENT THEN
    Msg.Result := HTCAPTION;
END;

prabab 2003-07-29 19:47

fajne. przydaje sie do robienia efektownych graficznie aplikacji

bzz 2003-04-26 19:32

Tak jest latwiej
wkleic w OnMouseDown formy

if Button = mbLeft then
  begin
     ReleaseCapture;
     SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
  end;



pozdrawiam