Autor Beitrag
Guardian of R'lyeh
Hält's aus hier
Beiträge: 14

Windows9x, WindowsXP
D7 Prof
BeitragVerfasst: 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... :roll:
specialwork
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52

Windows XP Professional; Windows Server 2003
Delphi 7 Prof, Delphi 8.Net
BeitragVerfasst: Sa 19.07.03 21:44 
Titel: Ist ne Möglichkeit
Hallo Guardian of R'lyeh

Nicht schön aber funktioniert:

ausblenden Delphi-Quelltext
1:
2:
Form1.AlphaBlend:=True;
Form1.AlphaBlendValue:=0;


Gruß, Tom
Guardian of R'lyeh Threadstarter
Hält's aus hier
Beiträge: 14

Windows9x, WindowsXP
D7 Prof
BeitragVerfasst: 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 :oops:

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 :wink:
atami
Hält's aus hier
Beiträge: 8

WIN 2000, XP
D7 Enterprise
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.ShowMainForm := False; 
  Application.Run;
end.


Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
Guardian of R'lyeh Threadstarter
Hält's aus hier
Beiträge: 14

Windows9x, WindowsXP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52

Windows XP Professional; Windows Server 2003
Delphi 7 Prof, Delphi 8.Net
BeitragVerfasst: Sa 19.07.03 22:28 
Hallo Guardian of R'lyeh,

Man muss noch dazu sagen, das die Visible-Eigenschaft des Hauptformulars auf

ausblenden Delphi-Quelltext
1:
Visible:=False;					


eingestellt sein muß.

Warum setzt Du die Eigenschaft

ausblenden Delphi-Quelltext
1:
Application.ShowMainForm:=True; //(oder False)					


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 Threadstarter
Hält's aus hier
Beiträge: 14

Windows9x, WindowsXP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52

Windows XP Professional; Windows Server 2003
Delphi 7 Prof, Delphi 8.Net
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 14

Windows9x, WindowsXP
D7 Prof
BeitragVerfasst: 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



BeitragVerfasst: 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":

Suche in: Delphi-Forum, Delphi-Library MUTEX
Suche in: Delphi-Forum, Delphi-Library CREATEMUTEX

Gruß.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Mo 21.07.03 09:16 
Bessere Alternative zu Mutex ist das Semaphore-Objekte Suche in: Delphi-Forum, Delphi-Library SEMAPHORE, Suche in: Delphi-Forum, Delphi-Library 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!