Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi stack überlauf beim schließen (https://www.delphipraxis.net/112480-stack-ueberlauf-beim-schliessen.html)

Frankfurtoder 22. Apr 2008 07:35


stack überlauf beim schließen
 
Guten Morgen Freunde der Kunst,

beim Beenden meines Programmes über das X rufe ich eine Prozedur auf, jedoch kommt es stattdessen zu einem stack overflow an der stelle.

Delphi-Quellcode:
procedure TForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ButtonExitClick(self);
  action := caNone;
end;

procedure TForm.ButtonExitClick(Sender: TObject);
var intDialogResult:integer;
begin
  if (length(MainRichEdit.text) > 0) and (bolsaved = false) then
  begin
    intDialogResult := MessageDlg('Möchten Sie die Änderungen speichern?', mtWarning,
      [mbYes,mbNo,mbCancel], 0);
    case intDialogResult of
      6: begin
           SaveAsButtonClick(self);
         end;
      7: begin
           ApoTabThemen.Close;
           ApoTabPPP.Close;
           close;
         end;
    end;
  end
  else
  begin
    ApoTabThemen.Close;
    ApoTabPPP.Close;
    close;
  end;
end;
Das Programm prüft also beim schließen durch das X ob sich in einem RichEdit ein Text befindet, der noch nicht gespeichert wurde. Nun sollte die ButtonExitClick Prozedur aufgerufen werden die das prüft und einen Dialog aufruft. Falls sich nichts in dem RichEdit befindet bzw. schon gespeichert wurde, dann soll das Programm einfach beendet werden können, andernfalls ruft es zum speichern auf. Warum kommt es hier zu einem stack overflow und wie kann ich das lösen?

Die ButtonExitClick wird auch von einem speedbtn ausgelöst, hier funktioniert es ohne Probleme.

Danke

Bernhard Geyer 22. Apr 2008 07:41

Re: stack überlauf beim schließen
 
Du rufst nochmal im FormClose indirekt über ButtonExitClick nochmals close auf.

Frankfurtoder 22. Apr 2008 07:44

Re: stack überlauf beim schließen
 
also ruft das Close; indirekt das OnClose; event auf... alles klar danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 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