Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Prüfen, ob ShowModal läuft? (https://www.delphipraxis.net/185217-pruefen-ob-showmodal-laeuft.html)

AlexII 22. Mai 2015 16:35

Prüfen, ob ShowModal läuft?
 
Hallo,

ich möchte wissen, ob eine modales Formular läuft bzw. gerade offen ist.

Delphi-Quellcode:
if Form.ShowModal = 1 {oder andere Zahl?} then
if Form.Visible then
if ShowModal.Show then
Wie macht man das richtig? Danke!

Perlsau 22. Mai 2015 16:44

AW: Prüfen, ob ShowModal läuft?
 
ShowModal ist eine Funktion, die eine Form modal aufruft und beim Schließen einen Integer zurückliefert. Daher macht es aus meiner Sicht keinen Sinn, nach dem Aufruf von ShowModal darauf zu test, ob die Form noch visible ist, denn das ist sie mit Sicherheit nicht.

AlexII 22. Mai 2015 16:47

AW: Prüfen, ob ShowModal läuft?
 
Ok... aber wie kann ich prüfen, ob das modale Form gerade offen ist oder nicht?

jbg 22. Mai 2015 17:02

AW: Prüfen, ob ShowModal läuft?
 
Zitat:

Zitat von AlexII (Beitrag 1302620)
Ok... aber wie kann ich prüfen, ob das modale Form gerade offen ist oder nicht?

Während ShowModal läuft, ist fsModal in FormState gesetzt.
Delphi-Quellcode:
if fsModal in MyForm.FormState then
begin
  // VCL-Formular wird modal angezeigt
end;

Perlsau 22. Mai 2015 17:08

AW: Prüfen, ob ShowModal läuft?
 
Zitat:

Zitat von AlexII (Beitrag 1302620)
Ok... aber wie kann ich prüfen, ob das modale Form gerade offen ist oder nicht?

... oder einfach Form.Visible abfragen. Nachdem du ein Formular modal aufgerufen hast, ist die Prüfung im aufrufenden Formular sinnlos, denn die ergibt immer Visible = False. Das ist deshalb so, weil der Programmzeiger ja erst nach dem Schließen der modalen Form zurückkehrt, und nach dem Schließen einers Formulars ist Visible immer False, sonst wäre das Formular ja nicht geschlossen worden.

Oder anders ausgedrückt: Du kannst vom aufrufenden Formular aus nicht prüfen, ob ein modal aufgerufenes Formular sichtbar ist, denn du bist zu diesem Zeitpunkt nicht im aufrufenden Formular. Wenn du wieder im aufrufenden Formular bist, ist das modal aufgerufene Formular wieder geschlossen.

Ich hoffe, das war jetzt unmißverständlich 8-)

Zitat:

Zitat von jbg (Beitrag 1302623)
Zitat:

Zitat von AlexII (Beitrag 1302620)
Ok... aber wie kann ich prüfen, ob das modale Form gerade offen ist oder nicht?

Während ShowModal läuft, ist fsModal in FormState gesetzt.
Delphi-Quellcode:
if fsModal in MyForm.FormState then
begin
  // VCL-Formular wird modal angezeigt
end;

Von wo aus soll denn das modal angezeigte Formular abgefragt werden?

AlexII 22. Mai 2015 17:34

AW: Prüfen, ob ShowModal läuft?
 
OK, danke euch! :thumb:

jbg 22. Mai 2015 19:30

AW: Prüfen, ob ShowModal läuft?
 
Zitat:

Zitat von Perlsau (Beitrag 1302624)
Von wo aus soll denn das modal angezeigte Formular abgefragt werden?

Von einem Timer oder OnIdle zum Beispiel.

Ich habe in der initialen Frage nichts gesehen, was darauf schließen lässt, dass er die Modalität erst nach dem ShowModal abfragen möchte. Seine Beispiele demonstrieren nur drei verschiedene (nicht funktionierende) Versuche die Modalität abzufragen. Zumindest habe ich das so aufgefasst.

Sir Rufo 22. Mai 2015 19:31

AW: Prüfen, ob ShowModal läuft?
 
@jbg :thumb:

Dalai 22. Mai 2015 19:35

AW: Prüfen, ob ShowModal läuft?
 
Aber wenn man innerhalb eines modalen Formulars die Modalität abfragt, weiß man doch bereits vorher, dass es modal ist. Klar, das Form könnte auch mit .Show (also nicht-modal) aufgerufen worden sein, aber das kann man doch als Programmierer selbst steuern. Oder hab ich da was nicht verstanden oder mitbekommen?

MfG Dalai

himitsu 22. Mai 2015 19:43

AW: Prüfen, ob ShowModal läuft?
 
Man kann in einer gemeinsam genutzten Methode sowas abfragen, wenn man es wissen muß und nicht weiß ob es das ist.

Aber solange hier in zwei Threads nur zusammenhanglose Stückchen gezeigt werden und alles Wichtige fehlt, hat es eh keinen Sinn eine Lösung finden zu wollen.
Meine Galskugel ist grade in der Reinigung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 Uhr.
Seite 1 von 3  1 23      

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