AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ShowModal wird nicht beendet

Ein Thema von himitsu · begonnen am 28. Apr 2010 · letzter Beitrag vom 28. Apr 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#1

ShowModal wird nicht beendet

  Alt 28. Apr 2010, 19:05
Im Prinzip mache ich dieses (gekürzert Code):
Delphi-Quellcode:
Procedure TInsightForm.FormClose(Sender: TObject; Var Action: TCloseAction);
  Begin
    Free;
    Action := caNone;
  End;

InsightForm.ShowModal;
Tja, die Form verschwindet, aber der ShowModal-Aufruf wird nicht beendet und die ganze VCL blockiert.


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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: ShowModal wird nicht beendet

  Alt 28. Apr 2010, 19:10
Moin Himitsu,

was willst Du denn nun im OnClose?
Free oder caNone?

[EDIT sagt]
Probier's mal mit caFree
[/EDIT sagt]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#3

Re: ShowModal wird nicht beendet

  Alt 28. Apr 2010, 19:21
Ich sagte ja, es ist gekürzt.

Delphi-Quellcode:
// 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;
Ich wollte die Instanz komplett extern verwalten.
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.


Zitat von Christian Seehase:
[EDIT sagt]
Probier's mal mit caFree
[/EDIT sagt]
Nja, da ich ja aktuell die Form extern freigebe, kann ich ja kein caFree nutzen ... wie gesagt, wenn die Form schon weg ist und dann versucht wird dieses, Aufgrund von caFree, nochmal freizugeben, dann knallt es.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#4

Re: ShowModal wird nicht beendet

  Alt 28. Apr 2010, 19:31
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.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#5

Re: ShowModal wird nicht beendet

  Alt 28. Apr 2010, 19:33
Wollte nur bescheidgeben ... es funktioniert jetzt

Das Form wird erst nach .ShowModal freigegeben und Aktionen vom Formular selber blenden sie nur aus (.Hide via .Close).

http://www.delphipraxis.net/internal...t.php?t=177124


Danke nochmal für Hilfe.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 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