![]() |
ShowModal wird nicht beendet
Im Prinzip mache ich dieses (gekürzert Code):
Delphi-Quellcode:
Tja, die Form verschwindet, aber der ShowModal-Aufruf wird nicht beendet und die ganze VCL blockiert.
Procedure TInsightForm.FormClose(Sender: TObject; Var Action: TCloseAction);
Begin Free; Action := caNone; End; InsightForm.ShowModal; Wieso wird dieser Aufruf denn nicht beendet, obwohl dessen Form schon verschwunden ist? PS: Action ist absichtlich caNone, da sonst ja versucht würde nach dieser Funktion noch auf die Form (welche ja weg ist) zuzugreifen. |
Re: ShowModal wird nicht beendet
Moin Himitsu,
was willst Du denn nun im OnClose? Free oder caNone? [EDIT sagt] Probier's mal mit caFree [/EDIT sagt] |
Re: ShowModal wird nicht beendet
Ich sagte ja, es ist gekürzt.
Delphi-Quellcode:
Ich wollte die Instanz komplett extern verwalten.
// OK-Button > Default = True
Procedure TInsightForm.Button2Click(Sender: TObject); Begin ModalResult := mrNone; FInsight.Form_SelectItem(TreeView1.Selected); End; // Abbrechen-Button > Cancle = True Procedure TInsightForm.Button3Click(Sender: TObject); Begin ModalResult := mrNone; FInsight.Form_Close; End; // der [x]-Button Procedure TInsightForm.FormClose(Sender: TObject; Var Action: TCloseAction); Begin FInsight.Form_Close; Action := caNone; End; Die FInsight.xxx-Prozeduren geben die Form frei (.Free), wenn einige interne Prüfungen erfolgreich waren, ansonsten bleibt die Form erhalten/sichtbar. Und zusätzlich gibt es noch ein "externes" Insight.Hide, womit man programmseitig die Form auflösen kann. Das Freigeben via .Free hatte ich eigentlich verwendet, damit FormClose nicht nach den Button-Klicks auch noch aufgerufen wird. Ich versuche dieses aber auch umzustellen, bin grad dabei mir was zu überlegen. Aber ich find es dennoch komosch/blöde, daß ShowModal nix vom Ableben der Form mitbekommt. :shock: Zitat:
|
Re: ShowModal wird nicht beendet
Da in ShowModal auch nach dem FormClose noch auf die Form-Instanz zugegriffen wird, schießt du dir mit dem Free geradezu selbst die Füße weg. Die früheste Stelle, an der du das Form gefahrlos freigeben kannst, ist die Zeile nach dem ShowModal.
Als wäre das nicht schon genug, führt das Setzen der Action auf caNone auch noch dazu, daß ModalResult auf 0 gesetzt wird und das ShowModal damit nicht endet. Fazit: Du solltest dein Design überdenken. |
Re: ShowModal wird nicht beendet
Wollte nur bescheidgeben ... es funktioniert jetzt :bounce2:
Das Form wird erst nach .ShowModal freigegeben und Aktionen vom Formular selber blenden sie nur aus (.Hide via .Close). ![]() Danke nochmal für Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:23 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