Formular mit panel verschieben

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Formular mit panel verschieben

Beitrag von hanibal »

wie kann ich ein formular (ohne rahmen) verschieben, indem man auf ein panel klick und zieht?

mit

Code: Alles auswählen

if Button=mbLeft then begin
      ReleaseCapture;
      self.Perform(WM_NCLBUTTONDOWN,HTcaption,0);
  end;
geht es nicht :(

da hält der compiler bei relasecapture an :cry:

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

habs gelöst, hire die lösung:

Code: Alles auswählen

var
  Form1: TForm1;
  MousePress: boolean;
  verschiebey,verschiebex : integer;
 
implementation
 
{ TForm1 }
 
 
procedure TForm1.Panel2MouseDown(Sender: TOBject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
{ Form1.Left:=Mouse.CursorPos.X-10;
 Form1.Top:=Mouse.CursorPos.Y-10; }
 MousePress:=true;
 verschiebey := y;
 verschiebex :=x;
end;
 
procedure TForm1.Panel2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if MousePress=True then
  begin
   Form1.Left:=Mouse.CursorPos.X - verschiebex;
   Form1.Top:=Mouse.CursorPos.Y - verschiebey;
   label3.Caption := inttostr(x);
   label2.Caption := inttostr(y);
  end;
end;
 
procedure TForm1.Panel2MouseUp(Sender: TOBject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   MousePress:=False;
end;

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Hast du das gelöst oder im 12. Forum gefunden ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Wär's so nicht präziser?

Code: Alles auswählen

procedure TForm1.Panel2MouseDown(Sender: TOBject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 MousePress:=true;
 verschiebey := Mouse.CursorPos.Y-Top;
 verschiebex :=Mouse.CursorPos.X-Left;
end;

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

hab das in nem forum gefunden und umgeändert.

die beiden variablen verschiebenx und verschiebeny geben an, wo sich die maus auf dem panel befinddet.

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

hanibal hat geschrieben: die beiden variablen verschiebenx und verschiebeny geben an, wo sich die maus auf dem panel befinddet.
Ja, schon klar, nur stimmt dein Code nicht unbedingt. Das hängt davon ab, wo das Panel sich relativ zum Parent (Form) befindet.
Dem Code, den ich hinzugefügt habe, ist das wurscht.

hanibal
Beiträge: 369
Registriert: Sa 3. Mär 2007, 16:03
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bramsche (Emsland)

Beitrag von hanibal »

aso, das meinst du :P

da hast du recht, das panel mus ganz oben sein.

Antworten