Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Doppelten Start eines Programmes verhindern (https://www.delphipraxis.net/79630-doppelten-start-eines-programmes-verhindern.html)

turboPASCAL 26. Okt 2006 10:22

Re: Doppelten Start eines Programmes verhindern
 
Delphi-Quellcode:
Application.Title := 'hier muss ich denn text reinschreiben';´// <-- und diese auch
Und das wird nicht klappen, Delphi (zumindest mein D6) mekert dan rum und will das Project nicht mehr
starten und oder laden.

Die CreateMutex - Version ist ein wenig flexibler und sicherer.

Andidreas 27. Okt 2006 07:52

Re: Doppelten Start eines Programmes verhindern
 
Zitat:

Zitat von turboPASCAL
Delphi-Quellcode:
Application.Title := 'hier muss ich denn text reinschreiben';´// <-- und diese auch
Und das wird nicht klappen, Delphi (zumindest mein D6) mekert dan rum und will das Project nicht mehr
starten und oder laden.

Die CreateMutex - Version ist ein wenig flexibler und sicherer.

warum ist createmutex flexibler und sicherer??? also bis jetzt funktioniert deine variante einwandrei ;)

ich hab nur das problem, das wenn das programm im tray liegt (also als symbol neben der uhr), das dann das wieder
anzeigen der form nicht klappt... :pale:

muss mal kucken ob ich des da noch irgendwie rauskrieg *gg*

zur info ich arbeite mit cooltrayicon...

Andidreas 27. Okt 2006 09:17

Re: Doppelten Start eines Programmes verhindern
 
ok ich habs ^^

folgende zeile hab ich in turboPASCAL's code anpassen müssen

Delphi-Quellcode:
If IsIconic(FirstInstance) Then ShowWindow(FirstInstance, SW_SHOW)
da stand vorher SW_RESTORE, und des hat er irgendwie nicht gepackt....
mit SW_SHOW kriegt ers hin... nur das icon im tray wird nicht gekillt :(

Sunlight7 19. Nov 2006 00:43

Re: Doppelten Start eines Programmes verhindern
 
Zitat:

Delphi-Quellcode:
Application.Title := 'hier muss ich denn text reinschreiben';´// <-- und diese auch

Und das wird nicht klappen, Delphi (zumindest mein D6) mekert dan rum und will das Project nicht mehr
starten und oder laden.
Ich hab das so:

In der Projekt Datei:
Delphi-Quellcode:
SetAppTitle('Ein Titel');
In einer Unit:
Delphi-Quellcode:
procedure SetAppTitel(const Titel:String);
begin
   Application.Title:=Title;
end;
Und Delphi gibt Ruhe :???:

Proddi 10. Feb 2007 15:51

Re: Doppelten Start eines Programmes verhindern
 
Zitat:

Zitat von pertzschc
Zitat:

Zitat von Hansa
Ganz einfach : beim Programmstart wird eventuell eine Menge initialisiert, Dateien geöffnet usw.

Meinst Du Dinge innerhalb der Delphi-Anwendung, sprich Forms per Autocreate oder Datamodule oder meinst Du Dinge, die Windows automatisch macht, worauf man im Code der Anwendung keinen Einfluss hat?

Wenn zweiteres, bitte erläutere doch mal genauer, was genau man da Windows zerschiessen könnte mit einem Halt?

Danke+Gruß,
Christoph

Ich denke, das ist eher eine Stil-Sache.
In diesem Fall mag HALT funktionieren. Allerdings ist das obergrauenvoller Programmierstil und genau deswegen hab ich auch bei jedem HALT Bauchschmerzen. Wenn man ein Programm abbricht, dann sollte es ordnungsgemäß beendet werden. Windows alle Aufräumarbeiten zu überlassen ist was für Scriptkiddies, die es nicht besser wissen. Wir wissen doch alle, daß dies nie in 100% aller Fälle funktioniert. "Nach mir die Sinnflut" trifft das recht gut.

Hansa 10. Feb 2007 23:46

Re: Doppelten Start eines Programmes verhindern
 
Wieso werde ich in Verbindung mit "HALT" gebracht ? Wer verwendet denn so was ? :warn: Wenn schon, dann gleich mit GOTO. :mrgreen:

Es gibt zwei grundsätzliche Methoden, ein Programm nur einmal zu starten. Entweder beim Starten der zweiten Instanz eines Programmes die erste zu beenden und das eben wieder zu starten, egal wo das zuerst gestartete gerade war. Das hat meistens schwerwiegende Konsequenzen. Holzhammermethoden. 8) Das wäre wirklich "nach mir die Sintflut" mit HALT etc.

Die andere ist : Semaphore setzen, wie von mir vorgeschlagen, um eben genau wieder da zu sein, wo der irgendwann zu bearbeitende Text oder sonstwas, der 5 Stunden vergessen wurde eben ist. Und zwar so ungefähr :

Delphi-Quellcode:
     hWndMe := FindWindow(appClass,appTitle);
    // falls andere Instanz existiert : diese in Vordergrund bringen,
    // Programm steht dann wieder genau an der Stelle, an der es verlassen wurde
    if (hWndMe <> 0) then begin
      BringWindowToTop(hWndMe);
      ShowWindow(hWndMe,SW_SHOWNORMAL);
    end;
Vielleicht geht das mit Mutex auch. Kann allerdings aus eigener Erfahrung nur sagen, dass es mit Semaphoren genau so geht. Sehr viele Fragen und Hinweisversuche in zig Foren über Mutex, die diesem ca. 80 % "Fragen-Marktanteil" beschert haben geben mir aber zu denken. 8)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr.
Seite 3 von 3     123   

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