Jak przesuwać formę jeżeli BorderStyle bsNone

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;
Informacje
Ostatnia modyfikacja 22-01-2010 19:19 Ostatni autor igorekpl
Ilość wyświetleń 5388 Wersja 3
Komentarz
prgtw dnia 26-06-2005 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 dnia 29-07-2003 19:47
fajne. przydaje sie do robienia efektownych graficznie aplikacji
bzz dnia 26-04-2003 19:32
Tak jest latwiej
wkleic w OnMouseDown formy

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



pozdrawiam

Katalog
Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0667 sek. (zapytań SQL: 9)