AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Wieso lässt sich mein Fenster nicht schließen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wieso lässt sich mein Fenster nicht schließen?

Ein Thema von Chewie · begonnen am 14. Feb 2004 · letzter Beitrag vom 15. Feb 2004
Antwort Antwort
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

Wieso lässt sich mein Fenster nicht schließen?

  Alt 14. Feb 2004, 22:29
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

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.
Angehängte Dateien
Dateityp: pas appbase.pas (3,3 KB, 23x aufgerufen)
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
lorenz

Registriert seit: 7. Nov 2003
86 Beiträge
 
Delphi 7 Personal
 
#2

Re: Wieso lässt sich mein Fenster nicht schließen?

  Alt 15. Feb 2004, 17:04
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
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Wieso lässt sich mein Fenster nicht schließen?

  Alt 15. Feb 2004, 17:13
Zitat:
Kann es vielleicht sein, dass man da wie bei MDI-Anwendungen in der onClose-Prozedur des Fensters action auf caFree setzen muss?
nein, da es kein caFree gibt, da ich keine VCL benutze.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Wieso lässt sich mein Fenster nicht schließen?

  Alt 15. Feb 2004, 17:26
Hi Chewie,
ich habe mal deine Nachrichtenschleife verändert und das was mir beim drübergucken irgendwie nicht so gefallen hat. 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]
Angehängte Dateien
Dateityp: pas appbase_383.pas (3,5 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Wieso lässt sich mein Fenster nicht schließen?

  Alt 15. Feb 2004, 17:50
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Wieso lässt sich mein Fenster nicht schließen?

  Alt 15. Feb 2004, 18:26
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
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Wieso lässt sich mein Fenster nicht schließen?

  Alt 15. Feb 2004, 18:59
Diese "suspekte if-Abfrage" terminiert das Programm erst
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Wieso lässt sich mein Fenster nicht schließen?

  Alt 15. Feb 2004, 19:02
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?

Chris
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Wieso lässt sich mein Fenster nicht schließen?

  Alt 15. Feb 2004, 19:08
Also:

Deine Schleife:
Delphi-Quellcode:
while (GetMessage(msg, 0, 0, 0)) do begin
    TranslateMessage(msg);
    DispatchMessage(msg);
  end;
Meine Schleife:
Delphi-Quellcode:
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;
GetMessage liefert false, wenn WM_QUIT eintrifft, deshalb bricht deine Schleife in diesem Fall ab.
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Wieso lässt sich mein Fenster nicht schließen?

  Alt 15. Feb 2004, 20:37
Oh, ich hab den Fehler entdeckt.
Statt if PeekMessage(msg, FHandle, 0, 0, PM_REMOVE) then muss es
if PeekMessage(msg, 0, 0, 0, PM_REMOVE) then heißen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 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