Einzelnen Beitrag anzeigen

dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#1

Fehler bei Messagehandler für WM_MOVE

  Alt 2. Sep 2005, 14:31
Hi,

ich fange in meiner Anwendung WM_MOVE ab um ein zweites Form an dem ersten "kleben" zu lassen.
Funktioniert auch einwandfrei.

Delphi-Quellcode:
  
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;
Nun habe ich das Problem das ich in einem anderen Form dieses "FrmSuchen" auch aufrufen, und auch an diesem Form soll es kleben.
Naiv wie ich bin habe ich dasselbe für die andere Form auch implementiert:
Delphi-Quellcode:
procedure WMMOVE(var Msg: TWMMove); message WM_MOVE;
...................
procedure TFrmNotebookMain.WMMOVE(var Msg: TWMMove);
begin
  inherited;
  FrmSuchen.FormShow(self);
end;
Nun kommt beim Starten des Programms eine Zugriffsverletzung.

Zitat:
Zugriffsverletzung bei Adresse 0052549A in Modul 'HTD.exe'. Lesen von Adresse 00000057.
Wenn ich diese Meldung wegklicke funktioniert das Programm trotzdem einwandfrei, auch klebt das FrmSuchen wie gewünscht an beiden Forms wenn ich diese verschiebe.

Hat jemand eine Idee was das sein könnte ?
Irgendwie kommen sich die 2 WMMOVE prozeduren in die quere, funktionieren aber trotzdem einwandfrei

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:
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;
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

Vielen Dank schonmal für eure Antworten
Gruß
  Mit Zitat antworten Zitat