Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mehrfachstart wahlweise erlauben (https://www.delphipraxis.net/53377-mehrfachstart-wahlweise-erlauben.html)

hsbc 15. Sep 2005 08:51


Mehrfachstart wahlweise erlauben
 
Ich habe bei einem Programm von mir den Mehrfachaufruf wie folgt verhindert:

Delphi-Quellcode:
Initialization
  mHandle := CreateMutex ...
das funktioniert auch einwandfrei.

Wie kann ich nun erreichen, dass der Anwender selbst einstellen kann, ob das Programm Mehrfachaufrufte zulässt oder nicht. Ich habe dazu einen Menüpunkt eingebaut: Mehrfachstart erlauben - nur kann ich diese Auswertung im Initialisations-Teil der Programmes nicht verwenden, da zu diesem Zeitpunkt ja dort nicht bekannt ist, ob der Menüpunkt aktiviert oder deaktiviert war. Wenn ich im Initialization-Abschnitt eingebe:

Delphi-Quellcode:
if Mehrfachstart.Checked then ...
so kommt natürlich eine Fehlermeldung. Wie kann ich trotzdem wahlweise Mehrfachstart erlauben bzw. verhindern?

Ich hoffe, ich konnte mich verständlich genug ausdrücken.

mfg
Herbert

leddl 15. Sep 2005 08:55

Re: Mehrfachstart wahlweise erlauben
 
Du speicherst diese Information doch garantiert ab, oder? Dann mußt du nur noch dafür sorgen, daß eben diese Information schon an dieser Stelle wieder geladen ist ;)

//edit: Also natürlich darfst du dann auch nicht auf die CheckBox zugreifen, da die ja zu dem Zeitpunkt noch nicht erstellt ist

Heffalump 15. Sep 2005 09:03

Re: Mehrfachstart wahlweise erlauben
 
Für den ersten Start des Programmes ist es unerheblich, ob der mehrfache Start erlaubt ist oder nicht. Damit hast Du erstmal den Menüpunkt zur Verfügung. Den benötigten Wert kannst Du nun in der Registry hinterlegen. Jede Instanze die von Deinem Programm gestartet wird muss dann diesen Wert auswerten und entscheiden, macht es die Mutexprüfung oder nicht. Wäre eine Möglichkeit.

shmia 15. Sep 2005 09:07

Re: Mehrfachstart wahlweise erlauben
 
Es geht ja meistens nicht nur darum, einen mehrfachen Start zu verhindern,
sondern man möchte ja auch, das die neue Instanz mit der bestehenden Instanz kommuniziert.
Also die 2. Instanz teilt der 1. Instanz ihre Startparameter mit und beendet sich dann selbst.
Bezogen auf dein Problem würde die 2. Instanz die 1. fragen, ob Mehrfachinstanzen erlaubt sind und sich dann ggf. selbst beenden.

Diese Variante ist eleganter und besser, als wenn die 2. Instanz die Info aus einer INI-Datei oder der Registry lesen würde.

Schau dir mal die Unit JclAppInst aus der JCL an.
Dort wird gezeigt, wird die Instanzen untereinander Daten austauschen können.
Entweder abkupfern oder JCL direkt verwenden.

orabimus 16. Sep 2005 14:25

Re: Mehrfachstart wahlweise erlauben
 
Irgendwie erkennt Dein Programm in einer Unit, daß es
=====
if Mehrfachstart.Checked then ...
=====
schon läuft.

Verleg doch einfach die boolsche Abfrage, die "Mehrfachstart.Checked" bedient, in die DPR-Datei Deines Projekts.

Die Delphi-DPR-Dateien sind reinrassige Pascal-Dateien, in denen sich fast Alles machen lässt - wenn man sich nur traut :mrgreen:

mfg

leddl 16. Sep 2005 14:30

Re: Mehrfachstart wahlweise erlauben
 
:gruebel: Warum mußte das jetzt noch sein?
Erstens gab es jetzt eigentlich schon die Lösung (shmia hat das ja ganz gut erklärt) und zweitens macht er doch schon das, was du vorgeschlagen hast.
Nur: wie soll er denn Mehrfachstart.Checked abfragen, bevor Mehrfachstart erstellt wurde? Daraus ergibt sich, er muß die Einstellung vor dem Erstellen des Forms in eine Variable laden, und damit bist du genau bei meinem Vorschlag ;)
Aber shmias Lösung ist viel besser, eleganter und praktischer. (Edit: :lol: Ich seh grade: so ähnlich hat ers ja auch geschrieben :lol:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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