Autor |
Beitrag |
Guardian of R'lyeh
Hält's aus hier
Beiträge: 14
Windows9x, WindowsXP
D7 Prof
|
Verfasst: Sa 19.07.03 21:34
Hi, Leute!
Ich hab folgendes Problem:
Ich versuche seit Stunden, mein Programm so starten zu lassen, dass es nur im Hintergrund läuft - es darf auf keinen Fall auf dem Bildschirm erscheinen, auch nicht für einen kurzen Moment.
Wenn ich direkt im FormCreate ein "Hide" platziere, passiert garnichts...selbst mit "SendMessage" usw kann man nichts erreichen. Gibt es irgendeine Möglichkeit?
Das einzige, was mir noch einfiele, wäre, das Programm ausserhalb des sichtbaren Bereichs zu starten und einen Timer mitlaufen zu lassen, der auf niedrigsmöglichen Intervall gestellt ist und solange versucht, mittels "Hide" das Programm zu minimieren, bis es endlich geklappt hat... 
|
|
specialwork
      
Beiträge: 52
Windows XP Professional; Windows Server 2003
Delphi 7 Prof, Delphi 8.Net
|
Verfasst: Sa 19.07.03 21:44
Titel: Ist ne Möglichkeit
Hallo Guardian of R'lyeh
Nicht schön aber funktioniert:
Delphi-Quelltext 1: 2:
| Form1.AlphaBlend:=True; Form1.AlphaBlendValue:=0; |
Gruß, Tom
|
|
Guardian of R'lyeh 
Hält's aus hier
Beiträge: 14
Windows9x, WindowsXP
D7 Prof
|
Verfasst: Sa 19.07.03 21:47
*lach* oookay....stundenlang gesucht....mich dazu überrungen, was in nem Forum zu posten und wenige Minuten später sehe ich die Lösung
oh, danke, specialwork, aber es geht noch einfacher
Also für alle, die das gleiche Problem haben:
in der Projektdatei nach dem CreateForm vor dem Application.run einfach die Zeile Application.ShowMainForm:= false einfügen 
|
|
atami
Hält's aus hier
Beiträge: 8
WIN 2000, XP
D7 Enterprise
|
Verfasst: Sa 19.07.03 21:52
Hallo,
damit ein Programm beim starten nicht sichtbar ist, mußt Du in die Projektdatei (*.dpr) die Zeile "Application.ShowMainForm := False;" hinzufügen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| program Project1;
uses Forms, Unit1 in 'Unit1.pas' ;
{$R *.res}
begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.ShowMainForm := False; Application.Run; end. |
Moderiert von Tino: Delphi-Tags hinzugefügt.
|
|
Guardian of R'lyeh 
Hält's aus hier
Beiträge: 14
Windows9x, WindowsXP
D7 Prof
|
Verfasst: Sa 19.07.03 21:59
japp, danke
jetzt hab ich das Problem, dass es nicht so einfach geht, dass man das Programm sichtbar machen kann....
Das Programm soll ja nur völlig unsichtbar starten...wenn man die EXE-datei nochmal startet, erkennt das Programm, dass schon ein Prozess läuft und soll sich sichtbar machen.
|
|
specialwork
      
Beiträge: 52
Windows XP Professional; Windows Server 2003
Delphi 7 Prof, Delphi 8.Net
|
Verfasst: Sa 19.07.03 22:28
Hallo Guardian of R'lyeh,
Man muss noch dazu sagen, das die Visible-Eigenschaft des Hauptformulars auf
Delphi-Quelltext
eingestellt sein muß.
Warum setzt Du die Eigenschaft
Delphi-Quelltext 1:
| Application.ShowMainForm:=True; |
nicht im OnCreate-Ereignis Deines Hauptformulars, in der Du zuvor überprüfst, ob bereits eine Instanz Deines Programms läuft.
Gruß, Tom
|
|
Guardian of R'lyeh 
Hält's aus hier
Beiträge: 14
Windows9x, WindowsXP
D7 Prof
|
Verfasst: Sa 19.07.03 22:36
Hmm....das geht leider nicht so einfach....schliesslich läuft das Programm die ganze Zeit im Hintergrund und bekommt nichts davon mit, dass versucht wird, eine weitere Instanz zu starten...und mit der neuen Programminstanz, die ja nicht ausgeführt werden soll, wenn es schon eine INstanz gibt, kann ich ja schlecht auf die Eigenschaft der schon laufenden zugreifen...
|
|
specialwork
      
Beiträge: 52
Windows XP Professional; Windows Server 2003
Delphi 7 Prof, Delphi 8.Net
|
Verfasst: So 20.07.03 23:56
Hallo Guardian of R'lyeh,
Versuch doch mal einen Wert in der Registry hochzuzählen.
Gruß, Tom
|
|
Guardian of R'lyeh 
Hält's aus hier
Beiträge: 14
Windows9x, WindowsXP
D7 Prof
|
Verfasst: Mo 21.07.03 00:06
mmm....dann müsste ich andauernd meine Nase in der Registry halten, um zu schauen, wie der momentane Wert ist....hmmm.....ach Du meinst, beim Start des Programms...achso, achso...aber doof beim Stromausfall zum Beispiel....aber was ist mit Nachrichten per API versenden? Man kann Programmen doch Nachrichten schicken und diese drauf irgendwie reagieren lassen...? Muss dann aber ne eigene Message sein, die ich im Programm selbst abfange....die normale ShowWindow-Anweisung macht das Programm zwar sichtbar, aber alle Steuerelemente fehlen dann...
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 21.07.03 08:00
specialwork hat folgendes geschrieben: | Warum setzt Du die Eigenschaft [...] nicht im OnCreate-Ereignis Deines Hauptformulars, in der Du zuvor überprüfst, ob bereits eine Instanz Deines Programms läuft. |
Ich würde so eine Prüfung bereits im Projektquelltext (*.dpr) ausführen. Dort hast du die Möglichkeit, das Programm noch vor dem Erzeugen irgendeines Formulars zu beenden.
Guardian of R'lyeh hat folgendes geschrieben: | schliesslich läuft das Programm die ganze Zeit im Hintergrund und bekommt nichts davon mit, dass versucht wird, eine weitere Instanz zu starten... |
Falscher Ansatz! Die neue Instanz muss bemerken, dass bereits eine läuft und sich dann selbst beenden - und (optional) vorher die bereits laufende Instanz in den Vordergrund holen.
Suchbegriffe zum Thema "Programm nur einmal starten":
MUTEX
CREATEMUTEX
Gruß.
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 21.07.03 09:16
Bessere Alternative zu Mutex ist das Semaphore-Objekte SEMAPHORE, CREATESEMAPHORE! M$ hat Dokumentationen veröffentlich wo es unter 9x Systemen dazu kommen kann, dass ein Mutex-Objekt nicht mehr korrekt freigegeben werden kann - das hätte zur Folge, dass das Prog in dieser Windows-Sitzung nicht mehr gestartet werden könnte.
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|