![]() |
Fehlermeldung "Element hat kein übergeördnetes Fenster&
Liste der Anhänge anzeigen (Anzahl: 1)
Ich verzweifle hier nochmal mit meiner Thread-Beispielapplikation.
Dafür habe ich ein Hauptformular mit 2 Schaltern erstellt, wobei der erste Schalter testweise ein leeres Formular öffnet. Der 2. Schalter öffnet ein Thread-Formular, in dem sich 3 Memofelder sowie ein Abbruch-Schalter befinden. Zu jedem der 3 Memos gehört ein Thread, der die Memos mit Zufallszahlen befüllt. Das funktioniert soweit ganz gut. Der Abbruch-Schalter beendet die 3 Threads jeweils mit ihren Terminate-Funktionen und ruft ein Close auf, um das Fenster zu schließen und wieder zum Hauptformular zu gelangen. Leider resultiert daraus immer wieder die Fehlermeldung "Element hat kein übergeördnetes Fenster" (siehe auch Screenshot). Ich habe irgendwas davon gelesen, dass man Create oder CreateWnd überschreiben muss und ein Parent zuweisen muss. Damit hatte ich allerdings keinen Erfolg. Ich bilde mir aber ein, dass es etwas mit den Threads zu tun haben muss, da das erste Testfenster ja fehlerfrei geschlossen werden kann. Woran kann das liegen ? Notfalls kann ich die Beispielapplikation einmal hochladen. |
Re: Fehlermeldung "Element hat kein übergeördnetes Fens
erst mal eine Frage: du erstellst VCL-Fenster innerhalb der Thread's, oder hab ich das falsch verstanden?
|
Re: Fehlermeldung "Element hat kein übergeördnetes Fens
Zitat:
|
Re: Fehlermeldung "Element hat kein übergeördnetes Fens
Passiert das Ganze auch, wenn du die Threads ganz weglässt?
Also nur beim Schließen des Fensters? |
Re: Fehlermeldung "Element hat kein übergeördnetes Fens
OK, dann hab ich das wohl wirklich falsch verstanden :oops:
Also wird da wohl nicht das Problem liegen :angel2: Passieren kann nichts, wenn das Fenster schon weg ist und z.B. einer der Threads noch versucht darauf zuzugreifen? Die Threads werden ja nicht sofort du .Terminate beendet, sondern laufen noch etwas weiter (bis sie da ankommen wo sie selbst .Terminated prüfen und sich beenden). |
Re: Fehlermeldung "Element hat kein übergeördnetes Fens
Liste der Anhänge anzeigen (Anzahl: 1)
Sobald ich die Threads rausnehme, öffnet und schließt das Fenster ohne Probleme.
Ich habe einmal die Beispielapplikation angehängt, um einen besseren Eindruck von der Situation zu geben. |
Re: Fehlermeldung "Element hat kein übergeördnetes Fens
Ich habe nur das Kompilat gestartet. Bei mir tritt kein Fehler auf (XP SP 3).
|
Re: Fehlermeldung "Element hat kein übergeördnetes Fens
wie gesagt, DoThread wird noch aufgerufen, nachdem das Fenster schon weg ist ... und dort entsteht auch die Exception.
PS: das ist schon "kraß"
Delphi-Quellcode:
(true) ?
while (true) and (Terminated = false) do
ja und dann wird es hier auch immer wieder gesagt: prüfe nicht auf True und False
Delphi-Quellcode:
@DeddyH: selbes System, aber ich hab Fehler (im Debugger gestartet)
while not Terminated do
[add] also entweder prüfst du in .DoThread ob das das Fenster noch existiert und greifst dann nicht darauf zu, oder die einfach Lösung für diesen Fall:
Delphi-Quellcode:
hier würde sich dann aber eine Schleife besser eignen, welche vor Close; drauf wartet, daß alle Thread beendet wurden.
procedure TThreadForm1.Button1Click(Sender: TObject);
begin Th1.Terminate; Th2.Terminate; Th3.Terminate; //while not (alle_threads_beendet) do begin Sleep(100); // Sleep(10); Application.ProcessMessages; // Application.ProcessMessages; //end; Close; end; |
Re: Fehlermeldung "Element hat kein übergeördnetes Fens
Tatsächlich, der Fehler tritt nur in der Delphi-IDE auf. Kannst Du das auch bestätigen ?
Ich verwende Delphi 2007 Pro mit allen Updates. |
Re: Fehlermeldung "Element hat kein übergeördnetes Fens
Ich hab auf der Arbeit nur Delphi 5 zur Verfügung, daher kann ich das nicht ausprobieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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