Autor |
Beitrag |
fbkreon
      
Beiträge: 50
|
Verfasst: Do 15.05.03 14:58
Hallo,
bei mir funktioniert aus irgendeinem grund diese funktion nicht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin ReleaseCapture; Perform(WM_SYSCOMMAND,$F012, 0); end; end; |
es klappt lediglich die funktion (dafür reagieren dann aber keinerlei buttons mehr auf einen klick):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
procedure TForm1.WMNCHitTest (var M: TWMNCHitTest); begin inherited; if M.Result = htClient then M.Result := htCaption; end; |
kann mir da jemand helfen?
|
|
JacFab
      
Beiträge: 111
|
Verfasst: Do 15.05.03 17:31
Ich habs so gemacht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TfrmMain.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin releasecapture; sendmessage(self.Handle, WM_NCLBUTTONDOWN, 2, 0); end; |
_________________ Nur Sitte und Moral sind Anker im Strom der Verrohung!
|
|
fbkreon 
      
Beiträge: 50
|
Verfasst: Do 15.05.03 19:35
und das funktioniert auch nicht. es interessiert das teil einfach überhaupt nicht.
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: Do 15.05.03 20:59
Guck mal im EDH. Bekommst du unter www.delphi-treff.de. Dort suchst du dann nach Winamp Easy Move (oder so ähnlich).
Habs grad gefunden:
Easy Delphi Helper Online hat folgendes geschrieben: |
Diese Procedure musst Du im Private-Abschnitt deklarieren:
Delphi-Quelltext 1: 2:
| procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest; |
Und hier die eigentliche Implementation der Procedure:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.WMNCHitTest (var M: TWMNCHitTest); begin inherited; if M.Result = htClient then M.Result := htCaption; end; |
htClient gibt an, dass Du dich im normalen Bereich Deiner Anwendung befindest, also nicht die Titelleiste bewegst. Mit htCaption wird die Titelleiste angesprochen und diese soll emuliert werden.
|
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
ErnestoChe
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: Do 15.05.03 21:36
Hi,
folgenden Code kannst du in das OnMouseMove-Ereignis jeglicher Komponente schreiben. Dann kannst du mit dieser Komponente das Fenster bewegen. Auch mit Form selber wenn du es in das OnmouseMove-Ereignis der Form schreibst. Das geht auch bei Formularen ohne Titelleiste und die restlichen komponenten auf den Formular funktionieren ganz normal. So gehts:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Panel1MouseMove(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; |
MFG
- Ernesto -
|
|
fbkreon 
      
Beiträge: 50
|
Verfasst: Do 15.05.03 22:57
das ist verrückt, aber auch das, lieber ernesto, läßt delphi komplett kalt. wenn ich das nem button1 z.B. zuweise, und auf den klicke und dann ziehe passiert nix.....
|
|
ErnestoChe
      
Beiträge: 528
Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
|
Verfasst: Do 15.05.03 23:50
Hi,
komisch. Bei mir funktionierts einwandfrei. Sowohl unter Delphi 6 auch unter Delphi 3. Ich weiss nicht ob du es schon gemacht hast, aber probier mal den Code in einer neuen, leeren Anwendung aus und nicht in deinem aktuellen Projekt.
Wenn es klappt, dann liegt der Fehler irgendwo in deiner Anwendung. Kannst ja dann bisschen mehr Code posten.
MFG
- Ernesto -
|
|
christoph
      
Beiträge: 28
Win XP(SPack1),Win 2000(Spack3)
Delphi 6(Spack2)
|
Verfasst: Fr 16.05.03 21:27
|
|
fbkreon 
      
Beiträge: 50
|
Verfasst: Sa 17.05.03 13:07
also das funzt dennoch nicht......der gesamte code heißt:
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: 32: 33: 34: 35: 36:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type TForm1 = class(TForm) procedure Form1MouseMove(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Form1MouseMove(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin ReleaseCapture; Perform(WM_SYSCOMMAND,$F012, 0); end; end;
end. |
und der form1 hab ich den borderstyle=bsNone verpasst um die titelleiste loszuwerden.
Moderiert von Tino: Delphi-Tags eingefügt.
|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Sa 17.05.03 14:27
O'rally hat die lösung doch schon hingeschrieben.
Musst mal etwas weiter oben gucken.
Gruß
Ken
|
|
fbkreon 
      
Beiträge: 50
|
Verfasst: Sa 17.05.03 15:22
CenBells: Die Lösung klappt ja auch, nur wie man auch exakt rauslesen kann stellt die routine fest, ob man sich im client-bereich aufhält und wenn ja, dann tut es so, als würde man die leiste berühren......aber dann funzt kein Button mehr!!! Was nützt mir ne verschiebbare form, wenn ich keinen button mehr drücken kann....jedenfalls ohne resultat. sind übrigens nur buttons von betroffen, keine anderen eingabefelder
|
|
KyroxX
      
Beiträge: 18
|
Verfasst: Sa 17.05.03 22:50
Titel: hmm
Hatte das problemmauch ... ich bin fast verzweifelt ..
hab ich des ganze form neu gemacht, den alten source reingebaut unfd schon gings ... da muss irgendwas mit den Properties der Form durcheinandergekommen sein
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| if Button = mbLeft then begin ReleaseCapture;
Perform(WM_SYSCOMMAND,$F012, 0); end; |
_________________ KyroxX :: Have a lot of Fun !
|
|
fbkreon 
      
Beiträge: 50
|
Verfasst: So 18.05.03 13:31
HURRAAAAAAA!!!! Endlich, es ist vollbracht:
Ich hatte einfach nur vergessen, über den Event-Manager auf "onmousemove" zu klicken. man sieht einfach manchmal den wald vor lauter bäumen nicht mehr.
hab jetzt n button genommen, und den mit folgender procedure verknüpft:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| 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; |
|
|
KyroxX
      
Beiträge: 18
|
Verfasst: So 18.05.03 15:38
Titel: ;)
hehe *gg*
Das war mir auch mal passiert 
_________________ KyroxX :: Have a lot of Fun !
|
|