Autor Beitrag
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Fr 11.09.09 23:49 
...wenn man den ganzen Tag nen Bug bis hinein in die VCL verfolgt... und nach ca. 6 Stunden debuggen findet man raus, dass es die eigene Schuld ist :oops:

Hintergrund...

In meiner Testanwendung für mein Komponenten-Paket gingen auf einmal nicht mehr alle Fenster zu, wenn ich die Hauptanwendung geschlossen habe, sondern immer nur eins. Und ich kam immer sofort beim MDI fenster raus (OnClose, OnCloseQuery) und nicht erst beim Hauptfenster. Da ich durch einen Umbau schon Probleme kurz davor hatte, schob ich es erstmal auf VCL und suchte in Forms etc, warum ich beim MDI Child zuerst rauskomme. Dann hab ich den Fehler in meiner WindowController-Komponente gefunden, der sich das FormClose umleitete, damit ich erstmal abräumen kann (es könnten auf dem aktuellen Fenster ja Fenster aus anderen DLL liegen, weiss ich ja nicht, muss aber trotzdem diese aufräumen)...

Musste ich mal loswerden... ganzen tag mit dem Sch...ss :evil:

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 15.09.09 12:54 
Warum hast Du nicht einfach zum Abräumen ein OnClose in deinem Controller registriert :twisted: Ich dachte, dafür ist dein Framework da :evil:

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
HelgeLange Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Di 15.09.09 16:14 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Warum hast Du nicht einfach zum Abräumen ein OnClose in deinem Controller registriert :twisted: Ich dachte, dafür ist dein Framework da :evil:


Das Problem mit dem OnClose ist ein wenig komplizierter ;)
Von einer Form kriege ich nicht mitgeteilt, wenn sie geschlossen werden könnte, ich kriege nur das Destroy von Componenten mit. Das ist aber für verscheidene Sache zu spät. Zum Beispiel wenn Du ein PageControl hast und jedes TabSheet enthält eine Form aus einer DLL und theoretisch jedes dieser Forms kann ein anderes PageControl enthalten mit mehr Forms aus DLLs... you get my point.. :)
OK, Wenn Das fenster also geschlossen wird und ich will beim Destroy die TabSheets leeren, spinnen die schon rum, weil Delphi denen das WindowHandle unterm Hintern weggezogen hat. (ich glaube auch, entgegen aller Erwartungen, dass der Owner der TabSheets nicht das PageControl ist, sondern die Form).

Die einzige Lösung, die ich gefunden habe, war, dem Controller ein spezielles Close schicken, dann kann der es an die Komponenten auf der Form schicken, wo die kritischen drauf reagieren können und entsprechend abräumen. Danach kommt dann das Close und Free auf die Form.

Und natürlich gibt es ein Event im Controller, der das Close anzeigt. Auch jede "unter"form kriegt ordentlich ihr Close und Free.

Nur aus irgendeinem Grund hat der Aufrufstack nichts richtig angezeigt und ich habe absolut nicht gesehen, dass ich mir das Event vom Form ja gestohlen habe, meins dafür gesetzt und dadrin dann das orginal aufgerufen :)
Aus dem Grund habe ich auch danach ne Stunde damit verbracht, die Pakete komplett neu zu bauen mit unterschiedlichen Pfaden für debug und release dcus etc.

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw