Entwickler-Ecke
Sonstiges (Delphi) - Form ohne Titelbar verschieben?
alexschultze - Sa 14.12.02 11:24
Titel: Form ohne Titelbar verschieben?
hiho.
ich will meine Form verschieben. Hab da auch folgenden Code:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin
if Button = mbLeft then { Nur ziehen, wenn linke Maustaste gedrückt ist } form1.BeginDrag(false); { Wenn ja, dann ziehen }
end; |
Das geht aba irgendwie nett. 'Eine Form kann nicht verschoben werden'. ?!?[/code]
DeCodeGuru - Sa 14.12.02 11:33
Hi, versuchs mal hiermit:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| type TForm1 = class(TForm) procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private procedure WmNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST; { Private-Deklarationen } public { Public-Deklarationen } end;
//...
procedure TForm1.WmNCHitTest(var Msg: TWMNCHitTest); begin DefaultHandler(Msg); if Msg.Result = HTCLIENT then begin Msg.Result := HTCAPTION; end; end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if (ssLeft in Shift) then begin ReleaseCapture; SendMessage(Form1.Handle,WM_SYSCOMMAND,SC_MOVE+1,0); end; end; |
LCS - Sa 14.12.02 11:37
Hi
ich glaub nicht, dass das mit Drag funktioniert. Wenn du die Form einfach nur aufm Bildschirm rumschieben willst könntest du dir eine globale Variable vom Typ Boolean anlegen.
Bei MouseDown wird sie auf True gesetzt, bei MouseUp auf False. Im MouseMove Ereignis wertest du sie dann aus. Wenn True wird die aktuelle Mouseposition mit ClientToScreen die Position der linken, obere Fensterecke ermittelt und anschliessend den Eigenschaften Top und Left zugewiesen.
Ich weiss nicht hundertpro ob's so funktioniert, aber müsste eigentlich gehen.
Gruss Lothar
alexschultze - Sa 04.01.03 21:22
also DeCodeGuru hatte schon mal ne gute Lösung!
Aber ich verstehe nicht wieso
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.WmNCHitTest(var Msg: TWMNCHitTest); begin DefaultHandler(Msg); if Msg.Result = HTCLIENT then begin Msg.Result := HTCAPTION; end; end; |
benötigt wird?
Bei mir geht es auch ohne?!? Und auf ner anderen Form aber geht es gar nett
torstenheinze - Sa 04.01.03 21:35
du kannst diesen code in irgendein mousedown event reinschreiben
und statt form1 kannst du auch panel1 oder so reinschreiben, sodas du dann ein panel bewegst
ReleaseCapture;
Form1.perform(WM_SysCommand, $F012, 0);
:wink:
torstenheinze - Sa 04.01.03 21:43
achja, damit kannst du auf ein panel beispielsweise raufklicken (gedr. halten) und damit ein 2. panel verschieben, geht alles :wink:
ich denke mal das der code der einfachste ist.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!