Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Abstrakter Fehler beim Schließen eines MDI-Childs (https://www.delphipraxis.net/9085-abstrakter-fehler-beim-schliessen-eines-mdi-childs.html)

sirtoby73 17. Sep 2003 20:37


Abstrakter Fehler beim Schließen eines MDI-Childs
 
Ich benutze in meiner MDI-Anwendung folgenden Code, um zu checken, ob eine Formularinstanz eines MDIChilds bereits existiert.
Eine ggf. vorhandene Instanz soll weiterverwendet werden, ansonsten wird eine neue Instanz erzeugt.
Der Aufruf erfolgt im Menü des Hauptformulars frmMain (vom Typ fsMDIForm).

Delphi-Quellcode:
procedure TfrmMain.WochenplanungClick(Sender: TObject);
begin
     //Formular öffnen, ggf. Speicher allozieren
     if not Assigned (frmWochenplanung) then
        frmWochenplanung:=TfrmWochenplanung.Create(self)
     else
        frmWochenplanung.Show;
     //Fenster ggf. aus dem minimierten Zustand holen
     frmWochenplanung.WindowState:=wsNormal;
end;
Im OnClose-Ereignis des MDIChilds nutze ich zur Speicherfreigabe einfach folgendes:
Delphi-Quellcode:
FreeAndNil(frmWochenplanung);
Das ganze klappt soweit ganz gut, aber hin und wieder (nach diversen Öffnen und Schließen-Vorgängen) gibt es beim Schließen einen "Abstract Error", irgendwas scheint da mit der Speicherverwaltung nicht zu klappen (?). Jemand eine Idee ?

:dancer2:
Zitat:

Eigentlich ist es egal, welche Farbe ein Ferrari hat - hauptsache, er ist rot!
(Gehört in "Exclusiv-Weekend" / RTL)

Delphianer 17. Sep 2003 20:53

Re: Abstrakter Fehler beim Schließen eines MDI-Childs
 
Hallo,

der Code funktioniert bei mir ohne Probleme. Kann es sein, daß etwas anderes nicht sauber freigegeben wird? Ansonsten Projekt/Optionen/Compiler und 'Mit Debug-DCUs' einschalten. Wenn Du Dir dann noch den Aufruf-Stack anzeigen läßt, siehst Du evtl. wo der Fehler herkommt.

Viele Grüße,

Delphianer

sirtoby73 17. Sep 2003 21:17

Re: Abstrakter Fehler beim Schließen eines MDI-Childs
 
Danke für die schnelle Antwort, wirklich ein ergiebiges Forum hier...
Na, dann lag ich ja nicht völlig daneben mit meinem Code. :hello:

Ich denke, das eine ADOQuery auf dem Formular vielleicht die Übeltäterin sein könnte. Nicht auszuschließen, dass da irgendwas noch nicht sauber ist.
Ansonsten hat das MDIChild nur ein DBGrid, das das Ergbenis der Abfrage (nach Auswahl eines Filterkriteriums per Combobox) enthält. Also nichts Aufregendes...

Inzwischen habe ich festgestellt, das das Problem auch bei anderen Forms auftritt, die allesamt eine ähnliche Grundstruktur haben (1-5 ADOQuerys, DBGrids). Es ist halt nur nicht auszumachen, warum die Fehlermeldung beim Schließen kommt. Es ist einfach nicht reproduzierbar.

Ich werde das Ganze mal mit Deinem Hinweis zum Aufrufstack genauer unter die Lupe nehmen. :coder:

Christian Seehase 17. Sep 2003 21:31

Re: Abstrakter Fehler beim Schließen eines MDI-Childs
 
Moin sirtoby,

erst einmal herzlich willkommen hier in der DelphiPRAXiS.

Ein abstrakter Fehler deutet meist darauf hin, dass eine als abstract deklarierte Methode verwendet wurde. Abstrakte Klassen, also Klassen die abstrakte Methoden enthalten sollte man allerdings nicht direkt verwenden, sondern nur als Basisklasse für Ableitugen.


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