Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi abfragen, ob eine Form offen ist. (https://www.delphipraxis.net/96363-abfragen-ob-eine-form-offen-ist.html)

bitsetter 23. Jul 2007 11:41

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:
if Assigned(Form) then ...
reichen um festzustellen ob das Objekt schon erzeugt wurde.

h826839 23. Jul 2007 13:29

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 ...

RavenIV 23. Jul 2007 13:37

Re: abfragen, ob eine Form offen ist.
 
Zitat:

Zitat von smart
...Ich möchte einfach erreichen, dass man eine Form nicht zweimal aufrufen (öffnen) kann. ...

Dazu gibt es schon einige Beiträge hier.
Such mal nach "eine Instanz", "OneInstance", "mehrfach starten", oder "Mutex". Dann wirst Du geholfen.

Muetze1 23. Jul 2007 13:39

Re: abfragen, ob eine Form offen ist.
 
Zitat:

Zitat von h826839
wenn den Programm ein MDI ist dann Funktioniert auch

Delphi-Quellcode:
if (Main.ActiveMDIChild is Form5) then ...

Nein, das bedeutet nur, das die aktuelle, aktive Form das Child ist, nicht aber, dass es nicht sichtbar ist, da es auch sichtbar und nicht aktiv sein kann. Diese Abfrage ist somit auch bei MDI nicht zweckerfüllend...

Zitat:

Zitat von RavenIV
Zitat:

Zitat von smart
...Ich möchte einfach erreichen, dass man eine Form nicht zweimal aufrufen (öffnen) kann. ...

Dazu gibt es schon einige Beiträge hier.
Such mal nach "eine Instanz", "OneInstance", "mehrfach starten", oder "Mutex". Dann wirst Du geholfen.

Eine Form einmalig zeigen ist was anderes als ein Programm einmalig starten können...

Codewalker 24. Jul 2007 07:22

Re: abfragen, ob eine Form offen ist.
 
Du könntest doch einfach im OnCreate Deines Forms einen Mutex erzeugen
Delphi-Quellcode:
dwMutex : DWORD;
{ .... }
dwMutex  := CreateMutex(nil,true,'Test'); // Schauen, ob das Programm schon mal läuft
ihn im OnClose wieder freigeben
Delphi-Quellcode:
CloseHandle(dwMutex);

und dann einfach vor dem CreateForm prüfen, ob der Mutex schon existiert
Delphi-Quellcode:
dwMutex  := CreateMutex(nil,true,'Test'); // Mutex erzeugen
  try
    if GetLastError <> ERROR_ALREADY_EXISTS then // Mutex noch nicht erzeugt
     CreateForm(  {... und so weiter }
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.

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.

SirThornberry 24. Jul 2007 07:47

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.

Codewalker 24. Jul 2007 10:29

Re: abfragen, ob eine Form offen ist.
 
Klar, das geht - dann wirds natürlich noch einfacher :mrgreen:

SirThornberry 24. Jul 2007 10:34

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 22:06 Uhr.
Seite 2 von 2     12   

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