Jak przesuwać formę jeżeli BorderStyle bsNone

Adam Boduch

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 komentarzy

@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;

fajne. przydaje sie do robienia efektownych graficznie aplikacji

Tak jest latwiej
wkleic w OnMouseDown formy

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

pozdrawiam