![]() |
Verschieben von Borderlosen Formen FullDrag
Möchte auch einen kleinen Beitrag hier leisten.
Wer kennt das nicht! Utopische Frage! Ich weise meiner Form beim laden einen Skin zu damit das ganze etwas ansehnlicher ist habe ich die Borderstyle ausgeschaltet. Damit ich meine Form verschieben kann benutze ich im MouseDown Events meiner CaptionBar(Image) die Function ReleaseCapture. Was mir dabei nicht gefällt, es kommt immer ein häßlicher Rahmen wenn ich die Form verschieben will. Kurz gesagt! Ich möchte meine Form verschieben als ganzes ohne das dieser Rahmen angezeigt wird. Die Lösung! Ich habe aus meinen Player 'VB' eine Funktion nach Delphi übersetzt. Was dieses Problem behebt.
Delphi-Quellcode:
procedure TfrmMain.CaptionBarMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // Springe in die Function SetFullWindowDrag // Weise dieser das Handle meiner Anwendung zu = frmMain.Handle // Und teile ihr mit das ich nun meine Form verschiebe. SetFullWindowDrag(frmMain.Handle, True); // Springe in die Function SetFullWindowDrag // Weise dieser das Handle meiner Anwendung zu = frmMain.Handle // Und teile ihr mit das ich mit dem verschieben fertig bin und das Event CaptionBarMouseDown verlasse. SetFullWindowDrag(frmMain.Handle, False); end;
Delphi-Quellcode:
Viel Spass beim Testen.
Function TfrmMain.SetFullWindowDrag(hwnd: DWORD; ShowFullWindow: Boolean): Boolean;
// Aktiviert oder deaktiviert die Anzeige von Fensterinhalten während des // Ziehens oder der Größenänderung von Anwendungsfenstern. // Der Rückgabewert gibt Aufschluss darüber, ob der Aufruf zu einer Änderung // gegenüber der vorherigen Einstellung geführt hat (True) oder nicht (False). Var lOldSetting: integer; lSuccess : boolean; Begin // Bisherige Einstellung ermitteln: lSuccess := SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @lOldSetting, 0); If lSuccess = False Then // Der abfragende Aufruf war nicht erfolgreich // (z.B. Windows 95 ohne "PLUS!"-Pack). Exit; // Rückgabewert bleibt False // Eine Aktion ist nur dann notwendig, wenn sich der bisherige // vom gewünschten Wert unterscheidet: If Bool(lOldSetting) <> ShowFullWindow Then Begin // Wert ändern und Erfolg prüfen: lSuccess := SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, Abs(DWORD(ShowFullWindow)), 0, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE); If bool(lSuccess) = True Then Begin Result := True; ReleaseCapture; SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0); End; End End; EDIT: Die Funktion SetFullWindowDrag muss zweimal in dem gleichen MouseDown ereignis ausgeführt werden. Das hat damit zu tun weil in SetFullWindowDrag ReleaseCapture ausgeführt wird. Diese kann erst dann wieder verlassen werden wenn MouseDown ereignis abgeschlossen ist. Gruß [edit=CalganX]Code-Style. Mfg, CalganX[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz