AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Das Programm einmal Starten. Beispiel.
Thema durchsuchen
Ansicht
Themen-Optionen

Das Programm einmal Starten. Beispiel.

Ein Thema von Karstadt · begonnen am 27. Jan 2006 · letzter Beitrag vom 26. Jul 2006
Antwort Antwort
Seite 2 von 3     12 3      
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Das Programm einmal Starten. Beispiel.

  Alt 28. Jan 2006, 01:06
Moin Karstadt,

mit Application.Terminate habe ich ein kleines Problem.
Nicht, dass es nicht funktionieren würde, aber solche Routinen wie OnClose und OnCloseQuery werden dann nicht mehr verarbeitet (was natürlich manchmal auch gewünscht sein kann). Deshalb nehme ich, i.d.R., nur Close im Hauptformular.

Aber noch einmal zu Deinem Problem:
Die Lösung hast Du doch schon selber geschrieben, mit Deinem if-then-else-Konstrukt.
Für den Fall, dass schon ein passendes Fenster gefunden wurde, werden CreateForm und Run einfach nicht mehr aufgerufen.
Den Aufruf von Terminate, kannst Du dann IMHO auch weglassen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12

Re: Das Programm einmal Starten. Beispiel.

  Alt 28. Jan 2006, 01:53
Zitat von ichbins:
du rufst
application.terminate; auf. das stoppt den application.run-Befehl, aber nicht das Projekt. Du musst das Projekt mit
exit; stoppen.
Und dann alles bereits instantiierte im Speicher sein Unwesen treiben lassen ? Nene das Run darf erst gar nicht ausgeführt werden. Und sowas kann man mit Semaphoren bewerkstelligen. Leider sind die Foren mit Mutex-Tips verseucht. Im Anhang ist eine EXE. Da steht in einem Edit als Text der Standardtext "Edit1". Wer den ändert und trotzdem das Programm 2mal startet (egal ob minimiert, aus Explorer, DOS-Modus oder sonstwie) der soll mal sagen wie. Beim 2. Start steht das Programm genau da, wo man vorher auch war. Bei Bedarf suche ich den Source, ca. 20 Zeilen.

Edit : Anhang geht momentan anscheinend nicht. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Das Programm einmal Starten. Beispiel.

  Alt 28. Jan 2006, 04:45
Zitat von Hansa:
Leider sind die Foren mit Mutex-Tips verseucht.
Warum verseucht? Ein Mutex ist genau dafür vorgesehen - im Gegensatz zu einem Semaphor, den man allerdings dazu auch nehmen könnte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#14

Re: Das Programm einmal Starten. Beispiel.

  Alt 28. Jan 2006, 05:39
Delphi-Quellcode:
unit Only_one;

interface

implementation
uses forms, windows;
var mutex : THandle;
    h : HWnd;


initialization
  Mutex := CreateMutex(nil, true, 'NetRadio_v3');
  if GetLastError = ERROR_ALREADY_EXISTS then
    begin
     h := 0;
     repeat
       h := FindWindowEx(0, h, 'TApplication', PChar(Application.Title))
     until h <> application.handle;
      if h <> 0 then
        begin
         Windows.ShowWindow(h, SW_ShowNormal);
         windows.SetForegroundWindow(h);
       end;
     halt;
  end;
finalization
  ReleaseMutex(mutex);
end.
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#15

Re: Das Programm einmal Starten. Beispiel.

  Alt 28. Jan 2006, 06:51
ich meinte ja dass er genau da exit aufrufen soll wo er zuerst application.terminate ausführt. da ist noch garkeine Form erstellt. Application.terminate lässt das Programm weiterlaufen, das Form erstellen, die Anwendung starten, das Form anzeigen, die Nachrichtenschleife starten und dann überprüft es ob es ja eigentlich darum geht das Programm zu beenden.
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Das Programm einmal Starten. Beispiel.

  Alt 28. Jan 2006, 12:56
Moin Michael,

Zitat von ichbins:
Application.terminate lässt das Programm weiterlaufen, das Form erstellen, die Anwendung starten, das Form anzeigen, die Nachrichtenschleife starten und dann überprüft es ob es ja eigentlich darum geht das Programm zu beenden.
Nein, das macht Application.Terminate nicht.
Das Problem war nur, dass das Programm danach weitergelaufen ist, und noch Initialize, CreateForm und Run aufgerufen werden.

Wenn man das umgeht, beendet sich das Programm gleich wieder, ohne das mann Application.Terminate, exit, halt oder ähnliches bräuchte.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Karstadt

Registriert seit: 8. Nov 2005
788 Beiträge
 
#17

Re: Das Programm einmal Starten. Beispiel.

  Alt 28. Jan 2006, 13:16
Hallo. Wenn ich euch richtig verstanden haben, wir die ONCREATE Methode in meinen Fall bearbeietet. Ich habe in Createform die Showmessage('gestartet'); eingebaut, das wird nur beim ersten starten angezeigt und nicht beim zweiten. oder verstehen ich irgendwas falsch?

beim zweiten start wird die Anwendung nicht gestartet. Die methoden werden nicht bearbeitet.
  Mit Zitat antworten Zitat
Karstadt

Registriert seit: 8. Nov 2005
788 Beiträge
 
#18

Re: Das Programm einmal Starten. Beispiel.

  Alt 28. Jan 2006, 13:26
probiert aus
Angehängte Dateien
Dateityp: rar 1xstaten_194.rar (173,4 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#19

Re: Das Programm einmal Starten. Beispiel.

  Alt 30. Jan 2006, 15:11
So geht es auch:
Delphi-Quellcode:
var
  ThePrevInstance: hWnd;

BEGIN
  ThePrevInstance := FindWindow('TApplication', 'Meine Application');
  if ThePrevInstance <> 0 then
  begin
    if IsIconic(ThePrevInstance) then ShowWindow(ThePrevInstance, SW_RESTORE)
      else SetForegroundWindow(ThePrevInstance);
    FlashWindow(ThePrevInstance, TRUE);
  end else
  begin
    Application.Title := 'Meine Application';
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
END.
... bei dieser Version wird das Fenster in den Vordergrund geholt und ggf. auch wiederhergestellt wenn es in die Taskbar minimiert wurde.

Leider wird HPrevInst (System.HPrevInst) nicht mehr von Delphi unterstützt glaube ich.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Karstadt

Registriert seit: 8. Nov 2005
788 Beiträge
 
#20

Re: Das Programm einmal Starten. Beispiel.

  Alt 31. Jan 2006, 08:42
Funktioniert leider nicht. Wenn die Anwendung minimiert ist, wird sie nicht maximiert. Schade
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:21 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