Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi wm_close message ruft onclose nicht auf (https://www.delphipraxis.net/12448-wm_close-message-ruft-onclose-nicht-auf.html)

med95fly 27. Nov 2003 15:38


wm_close message ruft onclose nicht auf
 
Hallo Leute,

bin neu hier und hab gleich mal ne Frage an die Experten unter Euch.
Ich hab mir ein kleines Programm ausgedacht, dass in definierbaren Ruhezeiten den Computer bei Inaktivität runterfährt. Soweit so gut, das funktioniert auch alles, das Problem ist nun folgendes:

Die Hauptanwendung die auf dem Rechner läuft ist ein Oracle-Datenbank-Client. Wenn ich diesen manuell per Close-button in der Captionleiste des Hauptformulars schließe, ist alles OK, onclose wird im Programm scheinbar abgefangen und die aktive Datenbank-Session terminiert (und was sonst noch so nötig ist, um eine Datenbank am laufen zu halten)

Wenn mein kleines Programm nun eine WM_Close Message an das Hauptformular schickt, schließt sie dieses zwar auch, beim nächsten einloggen beschwert sich das Programm aber über eine nicht ordnungsgemäß terminierte Session.

Was mache ich falsch? Ruft WM_Close das OnClose Ereignis nicht auf? Das Datenbankprogramm ist nicht von mir, ich habe keinen Quellcode, aber es ist scheinbar in Delphi programmiert.

Ich grüble schon ne Weile :gruebel: und wäre dankbar, wenn mir einer helfen könnte.

Christian Seehase 27. Nov 2003 18:57

Re: wm_close message ruft onclose nicht auf
 
Moin med95fly,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Als weitere Möglichkeit könntest Du es mal mit WM_SYSCOMMAND und SC_CLOSE versuchen.
Vielleicht funktioniert's ja damit.

med95fly 28. Nov 2003 18:07

Re: wm_close message ruft onclose nicht auf
 
Vielen Dank für den Tipp, hat leider aber auch nicht geklappt :cry:

Gleiches Problem: Sendmessage(Handle,WM_Close,0,0) oder (Handle,WM_Syscommand,Sc_Close,0) schließt das Datenbankprogramm irgendwie anders als wenn ich es von Hand mache.

Besser wäre sowieso, ich könnte das Abmelden fernsteuern. Dafür gibt es auf dem Hauptfomular eine Art PageControl mit dem Klassennamen "TcsNotebook". Die "Abmelden" Page (TcsPage) erreiche ich, indem ich das Tabsheet anklicke.

Wie kann man mit solchen unbekannten Klassen über das WindowsApi kommunizieren um zum Beispiel die "Abmelden" Page per Message aufzurufen?


Ps.: Eurer Forum ist das Beste das ich in Sachen Delphi kenne, großes Lob! :thuimb:

Christian Seehase 28. Nov 2003 18:52

Re: wm_close message ruft onclose nicht auf
 
Moin med95fly,

da kommt mir noch eine Idee:
Wenn sich das Programm über ALT-F4 so schliessen lässt, wie gewünscht, könntest Du diese Tastenkombination mit WM_KEYDOWN/WM_KEYUP ja an das Hauptfenster schicken.

med95fly 1. Dez 2003 17:48

Re: wm_close message ruft onclose nicht auf
 
Danke für den Tipp Christian, hat prima geklappt. :-D

Ich wusste bis jetzt zwar noch nicht, dass es da einen Unterschied zwischen den verschiedenen Close-Möglichkeiten gibt, aber man lernt nie aus.

Gruß Andreas

MyRealName 2. Dez 2003 10:42

Re: wm_close message ruft onclose nicht auf
 
versuch es doch mal mit PostMessage statt SendMessage
PostMessage legt die Nachricht auf die MessageQueue und kehrt zum Prog zurück, SendMessage wartet, bis die Nachricht abgearbeitet wurde.

MyRealName


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz