Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Exception bei Freigabe von Form (https://www.delphipraxis.net/73484-exception-bei-freigabe-von-form.html)

Balu der Bär 18. Jul 2006 22:45


Exception bei Freigabe von Form
 
Moin,

ganz einfaches Problem eigentlich, der User klickt auf einen Button, daraufhin wird ein neues Form erzeugt und das alte beendet werden. Leider bekomme ich beim Freigeben der alten Form eine Access Violation. Weiß jemand warum?

Delphi-Quellcode:
case Menu.SelectedItem.Index of
    0 : begin
         OpenDialog1.Filter := 'TSC Speicherstand (*.tsc)|*.tsc';
         if OpenDialog1.Execute then
         begin
           LoadMainSaveGame(OpenDialog1.FileName);
           Application.CreateForm(TtscMainGame, tscMainGame);
           tscMainGame.Show;
           tscStartMenu.Free; // <= hier kommt die Exception
         end;
        end;

....
Wenn ich die Form an anderen Stellen freigebe bekomme ich auch keinen Fehler, jemand ne Idee?

Danke euch.

mkinzler 18. Jul 2006 22:53

Re: Exception bei Freigabe von Form
 
Wo befindet sich der gezeigte Code? Zufällig in der Klasse tscStartMenu?

Balu der Bär 18. Jul 2006 22:55

Re: Exception bei Freigabe von Form
 
Jupp.

Aber wie gesagt an anderen Stelle auch in tscStartMenu geht es problemlos. :gruebel:

mkinzler 18. Jul 2006 22:56

Re: Exception bei Freigabe von Form
 
Bist du sicher?

jfheins 18. Jul 2006 22:56

Re: Exception bei Freigabe von Form
 
Versuch mal TForm.Release ;)

Balu der Bär 18. Jul 2006 22:59

Re: Exception bei Freigabe von Form
 
Zitat:

Zitat von mkinzler
Bist du sicher?

Jupp, 100%.

Deshalb ist diese Exeption auch ein Rätsel für mich.

TForm.Release? :gruebel:

jfheins 18. Jul 2006 23:06

Re: Exception bei Freigabe von Form
 
Ok, gehört schon zu TCustomForm ...

Delphi-Doku:
Syntax


[Delphi] procedure Release();


Beschreibung
Mit Release können Sie das Formular aus dem Speicher entfernen.

Release gibt das Formular erst frei, nachdem die Ausführung der Ereignisbehandlungsroutinen des Formulars und seiner untergeordneten Komponenten beendet ist. Die Methode stellt auch sicher, dass alle Botschaften in der Ereigniswarteschlange des Formulars vor dessen Freigabe bearbeitet werden. Jede Ereignisbehandlungsroutine für das Formular oder für dessen untergeordnete Objekte sollte Release anstelle von Free (Delphi) oder Delete (C++) benutzen. Ansonsten kann ein Speicherzugriffsfehler auftreten.
Hinweis:
Release gibt die Steuerung sofort an die aufrufende Routine zurück und wartet nicht, bis das Formular freigegeben wird.



Balu der Bär 18. Jul 2006 23:15

Re: Exception bei Freigabe von Form
 
Moin Julius,

danke mit .Release klappt es erstmal wie gewünscht. Jedoch gibt es jetzt ein anderes Problem, nämlich wenn ich jetzt tscMainGame schließe (das Form) wird die Applikation nicht beendet, der Task bleibt im Taskmanager stehn. Im OnClose des Forms MainGame beende ich tscIntro, welches als Hauptformular der Anwendung eingetragen ist. Leider scheint das aber nicht ausgeführt zu werden bzw. irgendwo anders sitzt immernoch ein weiterer Fehler. :-(

Balu der Bär 18. Jul 2006 23:21

Re: Exception bei Freigabe von Form
 
:oops:

Ich nehme alles zurück, ich hab den Fehler jetzt gefunden. Weiter unten im Code steht noch ein
Delphi-Quellcode:
Menu.SelectedItem := nil;
, da das Form ja aber nicht mehr existiert gibt es logischerweise die Exception.

Sorry. :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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 by Thomas Breitkreuz