![]() |
abfragen, ob eine Form offen ist.
Guten morgen!
Wie kann man abfragen, ob eine Form offen oder geschlossen ist.
Delphi-Quellcode:
geht nicht.
If Form1.Show = True Then ...
Gruß Heike |
Re: abfragen, ob eine Form offen ist.
Form.Show und Form.Hide sind Methoden welche letztendlich nur Form.Visible setzen.
|
Re: abfragen, ob eine Form offen ist.
hi..
hast du schon ...
Delphi-Quellcode:
... probiert
if Assigned(Form) then ...
|
Re: abfragen, ob eine Form offen ist.
Assigned prüft letztlich nur, ob das Objekt erzeugt wurde. Aber das Formular kann ja erzeugt, aber trotzdem unsichtbar sein. Der Test auf Form.Visible = true, wie Jens ihn vorgeschlagen hat, ist schon die beste Lösung.
Chris |
Re: abfragen, ob eine Form offen ist.
Zitat:
|
Re: abfragen, ob eine Form offen ist.
^^...
... ja aber die Frage war doch, ob die Form offen oder geschlossen ist |
Re: abfragen, ob eine Form offen ist.
Hi,
ich habe es getestet. Es klappt beides nicht einwandfrei. Ich nehme jetzt einfach zusätzlich ein String in den ich schreibe ob das Fenster zu oder offen ist. Den String kann ich dann später auswerten. Ist vielleicht nicht die eleganteste Lösung, aber läuft. Gruß Heike |
Re: abfragen, ob eine Form offen ist.
Zitat:
ist mit offen gemeint, dass das Form angezeigt wird? oder meint er mit offen: es ist erzeugt worden und wartet darauf, dass es angezeigt wird? oder vielleicht meint er damit ja auch, dass das Form sichtbar ist, also dass es nicht hinter einer anderen Form oder Anwendung liegt? Und bedeutet geschlossen, dass es nicht sichtbar ist? oder vielleicht, dass es auch schon zerstört worden ist? oder dass es angezeicgt wird, aber nicht sichtbar ist weil es im Hintergrund ist? Fragen über Fragen... Das muss erst mal definiert werden. |
Re: abfragen, ob eine Form offen ist.
die Bedeutung von offen und geschlossen ist eigentlich in dem fall eindeutig durch diese Zeile
Delphi-Quellcode:
Dadurch wird ja geheigt das es darum geht zu prüfen ob die Show-Anweisung ausgeführt wurde oder nicht.
If Form1.Show = True Then ...
|
Re: abfragen, ob eine Form offen ist.
Sorry, da habe ich mich unklar ausgedrückt ;-) Mit offen oder geschlossen meinte ich gezeigt oder nicht gezeigt. Um das ganze noch mal ganz einfach zu machen. Ich möchte einfach erreichen, dass man eine Form nicht zweimal aufrufen (öffnen) kann. Ich erzeuge die Form mit
Delphi-Quellcode:
Gruß
Application.CreateForm(TForm5, Form5);
Heike |
Re: abfragen, ob eine Form offen ist.
Hi,
ich bin mir zwar nicht sicher, aber geht es nicht mit
Delphi-Quellcode:
?
If Form1.Showing Then ...
Edit: wenn du die Formulare dynamisch erstellst würde dann ja doch ein Test mit
Delphi-Quellcode:
reichen um festzustellen ob das Objekt schon erzeugt wurde.
if Assigned(Form) then ...
|
Re: abfragen, ob eine Form offen ist.
hi... nochmal
wenn den Programm ein MDI ist dann Funktioniert auch
Delphi-Quellcode:
if (Main.ActiveMDIChild is Form5) then ...
|
Re: abfragen, ob eine Form offen ist.
Zitat:
Such mal nach "eine Instanz", "OneInstance", "mehrfach starten", oder "Mutex". Dann wirst Du geholfen. |
Re: abfragen, ob eine Form offen ist.
Zitat:
Zitat:
|
Re: abfragen, ob eine Form offen ist.
Du könntest doch einfach im OnCreate Deines Forms einen Mutex erzeugen
Delphi-Quellcode:
ihn im OnClose wieder freigeben
dwMutex : DWORD;
{ .... } dwMutex := CreateMutex(nil,true,'Test'); // Schauen, ob das Programm schon mal läuft
Delphi-Quellcode:
CloseHandle(dwMutex);
und dann einfach vor dem CreateForm prüfen, ob der Mutex schon existiert
Delphi-Quellcode:
dwMutex muss dann nur irgendwo global deklariert sein, aber das sollte ja das kleinere Problem sein. Ist vielleicht nicht die einfachste Lösung, aber sollte so funktionieren.
dwMutex := CreateMutex(nil,true,'Test'); // Mutex erzeugen
try if GetLastError <> ERROR_ALREADY_EXISTS then // Mutex noch nicht erzeugt CreateForm( {... und so weiter } Grüße Tom EDIT: Na, der Mutex im OnCreate ist ja doppelt gemoppelt. So schlägt der ja fehl. Also das OnCreate ist wohl unnötig. |
Re: abfragen, ob eine Form offen ist.
der Mutex kann auch im OnCreate erzeugt werden und im Falle des existierens wird eine exception augelöst. Dadurch würde der Destructor aufgerufen werden und es wird nicht nochmal erstellt.
|
Re: abfragen, ob eine Form offen ist.
Klar, das geht - dann wirds natürlich noch einfacher :mrgreen:
|
Re: abfragen, ob eine Form offen ist.
Generell finde ich das aber eigentlich die falsche herangehensweise. Wenn man eine Instanz erzeugt hat, hat man ja die Instanzvariable anhand der man das prüfen kann.
Es wurde ja auch geschrieben das es anhand einer Stringvariablen geht (wo drin steht ob gestartet oder nicht). Warum sollte es also nicht mit der Instanzvariablen klappen? Da ist irgendwas im argen. Und selbst ohne Instanzvariable sollte anstelle der Stringvariablen dann doch eine Bool-Variable genügen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 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