gelöst: Form verschieben

Für Fragen von Einsteigern und Programmieranfängern...
Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Form verschieben

Beitrag von Socke »

Bauer321 hat geschrieben:ne das soll ja nur gehen wenn man die maustaste gedrückt hält
Dann nimm dir noch ’nen Byte und steck ’ne Null rein, wenn die Maus hochgeht und ’ne eins, wenn sie runter geht (Boolean).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Form verschieben

Beitrag von Bauer321 »

hmm...

auch das hier geht nicht:

Code: Alles auswählen

var
    xc, yc : integer;
   formmove : boolean;
 
procedure TFMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  xc := x;
  yc := y;
  label4.caption := (inttostr(xc) + ' | ' + inttostr(yc));
  formmove := true;
end;
 
procedure TFMain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if formmove then begin
  FMain.Top := FMain.Top+x-xc;
  FMain.Left := FMain.Left+y-yc;
  mevent.lines.add(inttostr(FMain.Top+x-xc)+' | '+inttostr(FMain.Left+y-yc));
  end;
end;
 
procedure TFMain.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  formmove := false;
end;
Arrays.exe
Wer sehen möchte wie sich das ganze verhält hier die exe...
(1.71 MiB) 67-mal heruntergeladen
[/size]
www.mcpatcher.net | www.hoeper.me

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Form verschieben

Beitrag von MAC »

man mal bei onmousemove:

Code: Alles auswählen

if [ssleft] in shift then
als bedingung wenn du nur willst das bei gedrückter linker maustaste ausgeführt wird...

onmousedown ist so richtig...

Code: Alles auswählen

Signatur := nil;

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Form verschieben

Beitrag von Socke »

Bauer321 hat geschrieben:auch das hier geht nicht:
Mal davon abgesehen, dass du Variablen, die Daten zu einer Formularinstanz als globale Variablen anlegst (was als grob fahrlässig gelten könnte), kein meine Glasgoogle den Fehler leider nicht finden. Ganz grob gesehen, ist das auch der Code, den ich mir in fünf Minuten zum Testen in den PC gehämmert habe.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

BeniBela
Beiträge: 320
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: Form verschieben

Beitrag von BeniBela »

Unter Windows geht es am besten, wenn du einfach nur das in FormMouseDown packst: (mit uses windows;)

Code: Alles auswählen

ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Form verschieben

Beitrag von Bauer321 »

MAC hat geschrieben:man mal bei onmousemove:

Code: Alles auswählen

if [ssleft] in shift then
als bedingung wenn du nur willst das bei gedrückter linker maustaste ausgeführt wird...

onmousedown ist so richtig...

Code: Alles auswählen

procedure TFMain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  //if formmove then begin
  if [ssleft] in shift then begin
  FMain.Top := FMain.Top+x-xc;
  FMain.Left := FMain.Left+y-yc;
  mevent.lines.add(inttostr(FMain.Top+x-xc)+' | '+inttostr(FMain.Left+y-yc));
  end;
end;
 
//Fehler:
//umain.pas(126,6) Error: Incompatible types: got "Set Of TShiftStateEnum" expected "LongWord"
BeniBela hat geschrieben:Unter Windows geht es am besten, wenn du einfach nur das in FormMouseDown packst: (mit uses windows;)

Code: Alles auswählen

ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
dann kommt identifier ht_caption not found
www.mcpatcher.net | www.hoeper.me

BeniBela
Beiträge: 320
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: Form verschieben

Beitrag von BeniBela »

Bauer321 hat geschrieben: dann kommt identifier ht_caption not found
Okay, es heißt HTCAPTION ohne Strich.
(in dr lcltype unit und ist 2 )

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Form verschieben

Beitrag von Bauer321 »

vielen dank jetzt gehts perfekt ;)
www.mcpatcher.net | www.hoeper.me

Antworten