![]() |
Wieso lässt sich mein Fenster nicht schließen?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mir ein kleines, klassenbasiertes nonVCL-Grundgerüst gebastelt. Das Problem dabei ist nur, dass das Schließen über das Kreuz im rechten Eck (ihr wisst, was ich meine ;)) nicht richtig funktioniert. Meistens geht es nicht, doch manchmal schon :shock:
Vielleicht sieht jemand den Fehler. Da ich nicht weiß, wo der Fehler genau zu suchen ist, häng ich die Klasse mal an. Das Projekt sieht so aus:
Delphi-Quellcode:
program base;
uses appbase, Windows, Messages, Dialogs; procedure Init; begin ShowMessage('Hier bin ich!'); end; var Size: TPoint; begin Size.x := 600; Size.y := 400; with TAppBase.Create do begin //OnCreate := Init; CreateWindow('Testfenster', Size); Run; Free; end; end. |
Re: Wieso lässt sich mein Fenster nicht schließen?
Hallo alle zusammen!
Kann es vielleicht sein, dass man da wie bei MDI-Anwendungen in der onClose-Prozedur des Fensters action auf caFree setzen muss? (Ist aber nur eine Vermutung, die wahrscheinlich nicht richtig ist.) MfG Lorenz |
Re: Wieso lässt sich mein Fenster nicht schließen?
Zitat:
|
Re: Wieso lässt sich mein Fenster nicht schließen?
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Chewie,
ich habe mal deine Nachrichtenschleife verändert und das was mir beim drübergucken irgendwie nicht so gefallen hat. :mrgreen: Musst also einfach mal gucken. Jedenfalls funktioniert es jetzt bei mir. :) Chris [edit]Da ich seit einigen Tagen sowas ähnliches für C++ code, wollte ich mal fragen, ob man da mit einsteigen kann... ;)[/edit] |
Re: Wieso lässt sich mein Fenster nicht schließen?
Danke für die Mühe, aber leider bringt mir das nix. Du hast ja in der Nachrichtenschleife PeekMessage durch GetMessage ersetzt, was ich aber nicht will, da ich die Klasse in einer OpenGL-Anwendung einsetzen will und ich praktisch im OnIdle-Ereignis rendern will.
|
Re: Wieso lässt sich mein Fenster nicht schließen?
Hi,
dann ersetze einfach mal GetMessage durch PeekMessage. Ich habe ja nicht nur das geändert, sondern diese suspekte if-Abfrage auch rausgenommen. Musst einfach mal ausprobieren, Chris |
Re: Wieso lässt sich mein Fenster nicht schließen?
Diese "suspekte if-Abfrage" terminiert das Programm erst ;)
|
Re: Wieso lässt sich mein Fenster nicht schließen?
Hi,
aber du hast doch die WndProc, in der WM_DESTROY abgefangen wird. Und wenn du auch noch WM_CLOSE und WM_QUIT mit dem gleichen Prinzip hinzufügst, kommt es doch auf's selbe raus, oder? :gruebel: Chris |
Re: Wieso lässt sich mein Fenster nicht schließen?
Also:
Deine Schleife:
Delphi-Quellcode:
Meine Schleife:
while (GetMessage(msg, 0, 0, 0)) do begin
TranslateMessage(msg); DispatchMessage(msg); end;
Delphi-Quellcode:
GetMessage liefert false, wenn WM_QUIT eintrifft, deshalb bricht deine Schleife in diesem Fall ab.
while not done do
begin PeekMessage(msg, FHandle, 0, 0, PM_REMOVE); if msg.message = WM_QUIT then done := true else begin TranslateMessage(msg); DispatchMessage(msg); Sleep(1); end; end; PeekMessage liefert true, wenn eine Nachricht da ist und ansonsten false. Deshalb muss ich selbst auf WM_QUIT prüfen und die Schleife dann abbrechen, was ich ja auch tue. |
Re: Wieso lässt sich mein Fenster nicht schließen?
Oh, ich hab den Fehler entdeckt.
Statt
Delphi-Quellcode:
muss es
if PeekMessage(msg, FHandle, 0, 0, PM_REMOVE) then
Delphi-Quellcode:
heißen.
if PeekMessage(msg, 0, 0, 0, PM_REMOVE) then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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