AGB  ·  Datenschutz  ·  Impressum  







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

Fenster schließt sich nicht

Ein Thema von TurboMagic · begonnen am 16. Apr 2023 · letzter Beitrag vom 18. Apr 2023
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.855 Beiträge
 
Delphi 12 Athens
 
#1

Fenster schließt sich nicht

  Alt 16. Apr 2023, 19:28
Hallo,

in einer D11.3 VCL Anwendung habe ich ein neues Fenster hinzugefügt.
Dieses wird mit ShowModal aufgerufen und hat ein Ereignis, das ich vorher
zuweise welches von diesem Formular im OnShow aufgerufen wird.

Dieses Ereignis Startet eine Aktion welche über ein Event eine Methode dieses
Fensters aufruft um den Status der Operation anzuzeigen. Dise Methode hat u.a.
einen Cound und einen Index Parameter. Sind beide gleich ist die Operation zuende
und das Fenster soll geschlossen werden. Ich rufe daher Close bzw. inzwschen
self.Close auf, aber es schließt sich nicht automatisch. Auch der OK Button im
Fenster wird enabled (ja, im Gutfall etwas schwachsinnig, der OK Button ist
eigentlich für den Fehlerfall, da soll der Dilog sich nicht automatisch schließen.

Klicke ich auf OK im Fenster wird es geschlossen.
Das Fenster hat keine Eventhandler für OnClose oder OnCloseQuery.

Hat jemand eine Idee was ein Schließen eines Fensters mittels Close verhindern kann?

Grüße
TurboMagic
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
675 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Fenster schließt sich nicht

  Alt 16. Apr 2023, 19:31
Setz einfach ModalResult := mrOK; bei modalen Fenstern funktioniert Close nicht ganz so wie bei nicht-modalen.
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Fenster schließt sich nicht

  Alt 16. Apr 2023, 20:16
Close funktioniert bei Modalen, und auch teilweise bei Nicht-Modalen.
[edit] siehe #7 und #6

Bei Modalem macht es einfach nur ModalResult := mrCancel; , also funktional kein Unterschied zu deinem Lösungsvorschlag.




OnClose und OnyCloseQuery wird bei Dialogen (modalen Forms) aber sowieso niemals aufgerufen. (ja, das ist IMHO ein Bug, aber der ist schon seit 20 Jahren so, also weigert sich wer das zu reparieren)



Natürlich schließt Close beim Modaten das Fenster niemals sofort, sondern erst wenn ShowModal verlassen wird, also nichts die MessageLoop darin blockiert (z.B. ein Sleep oder eine Schleife im Event).
Free würde es sofort schließen, daber das benutzt man hier NIEMALS, denn wenn doch, dann knallt es anschließend.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Apr 2023 um 01:09 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.855 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fenster schließt sich nicht

  Alt 16. Apr 2023, 20:25
Danke für die Tipps, werde ich baldmöglichst mal ausprobieren...
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
480 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Fenster schließt sich nicht

  Alt 16. Apr 2023, 22:19
Zitat:
OnClose und OnyCloseQuery wird bei Dialogen (modalen Forms) aber sowieso niemals aufgerufen. (ja, das ist*IMHO*ein Bug, aber der ist schon seit 20 Jahren so, also weigert sich wer das zu reparieren)
Nicht dein Ernst, bei von mir verwendeten Dialogen funktioniert das zuverlässig seit Delphi 2.
Bernd
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Fenster schließt sich nicht

  Alt 16. Apr 2023, 23:12
OnClose und OnyCloseQuery wird bei Dialogen (modalen Forms) aber sowieso niemals aufgerufen. (ja, das ist IMHO ein Bug, aber der ist schon seit 20 Jahren so, also weigert sich wer das zu reparieren)
Wie Bernd schon sagte, das funktioniert in der Tat so wie erwartet - und das zumindest schon ziemlich lange. Man braucht auch nur in die Sourcen zu schauen.
Delphi-Quellcode:
procedure TCustomForm.CloseModal;
var
  CloseAction: TCloseAction;
begin
  try
    CloseAction := caNone;
    if CloseQuery then
    begin
      CloseAction := caHide;
      DoClose(CloseAction);
    end;
    case CloseAction of
      caNone: ModalResult := 0;
      caFree: Release;
    end;
  except
    ModalResult := 0;
    Application.HandleException(Self);
  end;
end;
Sollte das bei dir nicht funktionieren, dann liegt das vermutlich nicht an Delphi. Vielleicht stimmt auch was mit deinem TestCase nicht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 01:04 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