![]() |
Fehler bei Messagehandler für WM_MOVE
Hi,
ich fange in meiner Anwendung WM_MOVE ab um ein zweites Form an dem ersten "kleben" zu lassen. Funktioniert auch einwandfrei.
Delphi-Quellcode:
Nun habe ich das Problem das ich in einem anderen Form dieses "FrmSuchen" auch aufrufen, und auch an diesem Form soll es kleben.procedure WMMOVE(var Msg: TWMMove); message WM_MOVE; ........... procedure TFrmPCMain.WMMOVE(var Msg: TWMMove); begin inherited; FrmSuchen.FormShow(self); // <<<< Klebt das 2te Form an das aufrufende end; Naiv wie ich bin habe ich dasselbe für die andere Form auch implementiert:
Delphi-Quellcode:
Nun kommt beim Starten des Programms eine Zugriffsverletzung.
procedure WMMOVE(var Msg: TWMMove); message WM_MOVE;
................... procedure TFrmNotebookMain.WMMOVE(var Msg: TWMMove); begin inherited; FrmSuchen.FormShow(self); end; Zitat:
Hat jemand eine Idee was das sein könnte ? Irgendwie kommen sich die 2 WMMOVE prozeduren in die quere, funktionieren aber trotzdem einwandfrei :shock: Ich habe dann versucht das ganze zu lösen indem ich es allgemein in der application.onMessage löse(für beide): Die benutze ich eh schon für einen "Idle Timer" (Das Programm schliesst sich nach 10min nichtaktivität) Nur seltsamerweise tritt die Message WM_MOVE da NIE auf :( (im debugger gecheckt)
Delphi-Quellcode:
Stehe ich irgendwo völlig auf dem Schlauch ? Diese geschichte mit den Windows Messages ist neu für mich und vielleicht mache ich ja etwas grundsätzlich falsch :roll:
procedure TFrmMain.FormCreate(Sender: TObject);
begin application.OnMessage := checkMessage; end; procedure TFrmMain.checkMessage(var Msg: TMsg; var Handled: Boolean); begin if Msg.message = WM_MOUSEMOVE then begin timer1.Enabled := false; NextTimer := GetTickCount + DWORD(timer1.Interval); end; if Msg.message = WM_KEYDOWN then begin timer1.Enabled := false; NextTimer := GetTickCount + DWORD(timer1.Interval); end; if Msg.message = WM_MOVE then // <<<< passiert nie FrmSuchen.FormShow(self); end; Vielen Dank schonmal für eure Antworten :) Gruß |
Re: Fehler bei Messagehandler für WM_MOVE
Hi,
hab den Fehler jetzt gefunden. Ich create beim Start des Programmes die Formulare, und seltsamerweise wird beim erzeugen ein WM_MOVE gesendet den er sofort abfängt(Bevor alle Formulare erzeugt sind). Und da er in der aufgerufenen Methode auf Eigenschaften noch nicht erzeugter Forms zugreift kommt dieser Fehler. Hab das ganze jetzt mit "if assigned(xy)" abgefangen, aber ganz verstehen tu ich es nicht :roll: Also warum er beim Createn ein WM_Move bekommt, bzw wieso er dieses dann sofort bearbeitet anstatt erstmal alle Forms zu createn. Gruß |
Re: Fehler bei Messagehandler für WM_MOVE
Du könntest auch die Eigenschaft ComponentState abfragen. Da steht drin, ob die Komponente gerade erzeugt wird oder nicht (beim Freigeben übrigens auch).
//edit Ich denke, WM_MOVE wird gesendet, sobald sich die Einträge des WindowRect ändern. Da dies beim neu-initialisieren des Fensters eindeutig der Fall ist, kommt halt die entsprechende Message. Müssten eigentlich ne ganze Menge Messages kommen, oder? Ein WM_RESIZE doch eigentlich auch. Wär jedenfalls nur logisch. |
Re: Fehler bei Messagehandler für WM_MOVE
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 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