![]() |
Fenster mit Titel verschieben, nur bei best. Komponenten
Ich habe folgendes Problem:
Ich möchte gerne mein Fenster mit Titel durch Mausklick im Client-Bereich verschieben können. Dazu habe ich mich ![]() Allerdings habe ich nun das Problem, dass evtl. der Client-Bereich durch ein Panel (oder andere Komponenten) verdeckt ist, wodurch diese Methode nicht mehr dazu geeignet ist um das Fenster zu verschieben. Daher möchte ich mir gerne eine Komponente schreiben, die mir die Möglichkeit gibt Komponenten anzugeben, bei denen das funktioniert. Mein Versuch, ein Array mit den Namen der Komponenten zu erstellen und diese dann mit Hilfe von SetWindowLong auf WS_EX_TRANSPARENT zu stellen schlug leider fehl:
Delphi-Quellcode:
inde gibt nach Ausführen von setWindowLong 0 zurück (entspricht Fehler). GetLastError liefert mir den Wert 1411 (= "Klasse ist nicht vorhanden").
procedure TMoveEveryWhere.MoveExceptOn(KompArray: array of const);
var i : Integer; inde : Integer; begin for i := 0 to High(FKompArray) do begin inde := setWindowLong(((Owner.FindComponent(FKompArray[i].Name)) as TWinControl).Handle, GWL_EXSTYLE, getWindowLong(((Owner.FindComponent(FKompArray[i].Name)) as TWinControl).Handle, GWL_EXSTYLE) and not WS_EX_TRANSPARENT); end; // for i := 0 to High(FKompArray) FKompArray := nil; for i := 0 to High(KompArray) do with KompArray[i] do begin case VType of vtString, vtAnsiString: begin inde := Length(FKompArray); SetLength(FKompArray, inde+1); if VType=vtAnsiString then FKompArray[inde].Name := string(VAnsiString) else FKompArray[inde].Name := VString^; inde := ((Owner.FindComponent(FKompArray[inde].Name)) as TWinControl).Handle; inde := setWindowLong(inde, GWL_EXSTYLE, getWindowLong(inde, GWL_EXSTYLE) or WS_EX_TRANSPARENT); jj := GetLastError; inde := 0; end; end; // case VType end; // with KompArray[i] end; Hat jemand eine Idee, wie ich dieses Problem lösen kann? |
Re: Fenster mit Titel verschieben, nur bei best. Komponenten
ich habe noch eine weitere Methode gefunden mit der ich das Verschieben des Forms für jede Komponente Aktivieren kann, die ein OnMouseDown-Ereignis besitzt.
Delphi-Quellcode:
Allerdings schaffe ich es nicht, dies in meine Komponente einzubauen, dass dies dann automatisch verwendet wird. :(
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); const SC_DRAGMOVE = $F012; begin if Button = mbleft then begin ReleaseCapture; Form1.Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 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