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 Close geht nicht zum Programmbeenden (https://www.delphipraxis.net/40324-close-geht-nicht-zum-programmbeenden.html)

Ultimator 14. Feb 2005 13:12

Re: Close geht nicht zum Programmbeenden
 
Aber die Anwendung soll den Benutzer ja nur informieren, wenn sie schonmal geöffnet wurde, aber nicht ihm die Wahl lassen, ob er sie vielleicht doch 2mal offen haben will ;-)

alcaeus 14. Feb 2005 13:14

Re: Close geht nicht zum Programmbeenden
 
Hallo Chegga,

und wo soll da der Unterschied zu dem hier sein (außer der sinnbefreiten Abfrage auf Ok, nachdem das Form sowieso geschlossen werden soll...)

Delphi-Quellcode:
ShowMessage('Das Programm ist bereits geöffnet');
Close; //oder Application.Terminate, je nachdem was dir besser gefällt
Der sinnvollste (und auch normalerweise verwendete) Weg ist aber der, dass man einen Mutex o.ä. in der Projektdatei erstellt, und dort auch prüft ob er bereits existiert.

Greetz
alcaeus

MagicAndre1981 14. Feb 2005 13:16

Re: Close geht nicht zum Programmbeenden
 
Hi,

mit folgendem Code kannst du abfragen ob deine Anwendung schon läuft:
Delphi-Quellcode:
unit u_Instanz;

interface

implementation

uses windows,Dialogs,sysutils, u_SBNBUCH;

var mHandle: THandle;   // Mutexhandle

Initialization

    mHandle := CreateMutex(nil,True,'MEINEANWENDUNG');
    if GetLastError = ERROR_ALREADY_EXISTS then
    begin
        // Anwendung läuft bereits
        ShowMessage('MEINEANWENDUNG wird schon ausgeführt!!!');
        halt;
    end;

finalization  // ... und Schluß
  if mHandle <> 0 then CloseHandle(mHandle)
end.
Falls sie schon läuft bekommst du eine Meldung.

Mfg
André

JPSelter 14. Feb 2005 13:22

Re: Close geht nicht zum Programmbeenden
 
Die Anwendung soll von mehreren PCs im Netzwerk ausführbar sein. Keine Ahnung, ob Dein Quelltext auch im Netzwerk funktioniert. Aber ich habs jetzt erstmal über eine Textdatei gelöst, in der der Status, ein Timestamp und der User drinsteht.

Muetze1 14. Feb 2005 16:50

Re: Close geht nicht zum Programmbeenden
 
Moin!

Warum "empfehlen" hier noch so viele User die Haudrauf Methode "Application.Terminate" ?? Das wurde doch nun schon mehrfach geklärt, das dieses Probleme bereitet - genauso wie ein "Halt()" Aufruf im FormCreate. Sprint hatte dazu auch schon die Erklärung geschrieben (Application.MainForm ist im FormCreate noch nicht gesetzt und dadurch wird die MainForm nicht wieder abgeräumt, bzw. nicht sauber...).

Also, nehmt endlich Abstand sowas weiter zu empfehlen...

Zum anderen: Die Mainform ist ein Teil der Applikation - das Hauptfenster. Nun ist die Frage warum noch das Hauptfenster angelegt wird, wenn man sich schon vorher einig sein könnte, das die Applikation beendet werden sollte. Daher wäre es doch eigentlich Blödsinn noch die MainForm anzulegen, oder?

Also:
Mutex, Named Pipe, FindWindow/PostMessage, etc - aber nicht unbedingt im FormCreate.

MfG
Muetze1

bigg 14. Feb 2005 17:13

Re: Close geht nicht zum Programmbeenden
 
Eine Lösung würde sich hier mit:
initialization bzw. finalization anbieten. :zwinker:

Chegga 14. Feb 2005 18:34

Re: Close geht nicht zum Programmbeenden
 
Hi,

Zitat:

Zitat von bigg
Eine Lösung würde sich hier mit:
initialization bzw. finalization anbieten. :zwinker:

Du hast schon gelesen was MagicAndre1981 geschrieben hat?! :roll:

MfG Marc

bigg 14. Feb 2005 19:21

Re: Close geht nicht zum Programmbeenden
 
:mrgreen: gar nicht gesehen :zwinker:
ich würde aber keinen mutex erzeugen,
eher ein virtuelles Fenster :P


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr.
Seite 2 von 2     12   

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