Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Delphi-Anwendung unsichtbar direkt nach Programmstart
bf109g.01 - Mi 01.12.10 21:53
Titel: Delphi-Anwendung unsichtbar direkt nach Programmstart
Hallo ich möchte mein Form1 direkt nach Programmstart unsichtbar machen.
Das hab ich auch probiert ->
http://www.festra.com/eng/snip10.htm
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TF.FormActivate(Sender: TObject); begin ShowWindow(Application.Handle, SW_HIDE); Hide; end; |
HIerbei bekomme ich beim AUsführen aber die FEhlermeldung: "Eigenschaft Visible kann in OnShow und OnHide nicht verändert werden."
Kann ich das irgendwie umgehen?
Danke schonmal.
mfg
jaenicke - Mi 01.12.10 21:59
Setze einfach im Projektquelltext Application.ShowMainForm auf False.
bf109g.01 - Mi 01.12.10 22:08
jaenicke hat folgendes geschrieben : |
| Setze einfach im Projektquelltext Application.ShowMainForm auf False. |
Wo mache ich das bitte?
Im Quelltext sehe ich diese Zeile nirgends und im Obektinspektor für Form1 finde ich die Zeile auch nicht...
EDIT: Habs schon. Danke!!
EDIT: Ich muss das noch mal genauer beschreiben:
Ich möchte dass das Programm von Anfang an unsichtbar bleibt: Fenster weg und Taskleistensymbol weg. Dann will ich erstmal einige Dialog-Felder aufmachen.
Nur habe ich entweder das Formular, irgendwann selbst wieder auftaucht, oder der blöde Taskleistenblock geht nicht weg.
Und wenn ich Application.ShowMainForm auf False setze, dann kann ich ncihts ausführen, weil das Ereignis OnActivate nie eintritt und wenn ich meine Anweisungen bei FormCreate reinschreibe, verschwindet es logischerweise erst danach... :(
bummi - Do 02.12.10 00:03
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); protected Procedure Loaded;override;
private
.... ..... ... procedure TForm1.Loaded; begin Button1.Click; end; |
jaenicke - Do 02.12.10 06:27
bf109g.01 hat folgendes geschrieben : |
| Und wenn ich Application.ShowMainForm auf False setze, dann kann ich ncihts ausführen, weil das Ereignis OnActivate nie eintritt und wenn ich meine Anweisungen bei FormCreate reinschreibe, verschwindet es logischerweise erst danach... :( |
Brauchst du denn das Formular überhaupt? Wenn nicht, schmeiß es doch einfach raus...
Jedenfalls gehört der Code zum Laden einfach auch in den Projektquelltext. Der wird beim Start ausgeführt.
Wenn du das Formular nicht anzeigst, ist es irgendwie unlogisch da den Code reinzupacken...
bummi - Do 02.12.10 08:53
@jaenicke
kommt drauf an, vielleicht soll es ja auf ein Events hin angezeigt werden und hat vorher schon einiges aufgebaut.
bf109g.01 - So 05.12.10 18:05
Danke für die Antworten!
jaenicke hat folgendes geschrieben : |
Brauchst du denn das Formular überhaupt? Wenn nicht, schmeiß es doch einfach raus...
Wenn du das Formular nicht anzeigst, ist es irgendwie unlogisch da den Code reinzupacken... |
Hm, eig brauch ichs wirklich nicht. Wie kann ich denn ohne das Formular arbeiten?
Hab bisher immer Formulare oder Konsolenanwendungen benutzt, aber die Konsole will ich auch nicht sichtbar haben...
jaenicke - So 05.12.10 18:12
Du brauchst lediglich eine Botschaftsbehandlungsschleife, dann brauchst du auch keine Konsolenanwendung. Die Anwendung muss ja nur weiterlaufen bis sie beendet wird.
kalmi01 - So 05.12.10 18:19
Hi,
Du hast mehrere Möglichkeiten, deine Form1 zu "verstecken".
- Width und Height im OnCreate auf 1 setzen, Top und Left auf z.B. -9999
- Alphablend so einstellen, das die Form transparent wird
- im OnPaint Visible := false setzen
Vorteil, man kann die Form bei Bedarf hervor zaubern.
bf109g.01 - So 05.12.10 18:36
bummi hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); protected Procedure Loaded;override;
private
.... ..... ... procedure TForm1.Loaded; begin Button1.Click; end; | |
Ich glaube, ich bin dafür einfach zu blöd...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject);
protected Procedure Loaded;override; private public end;
var Form1: TForm1;
implementation
{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ShowWindow(Application.Handle, SW_HIDE); Hide; end;
procedure TForm1.Loaded; begin Button1.Click; end;
end. |
Also da passiert groß nichts. da bleibt ein Formular, da sieht man den Taskleisten Button...
Nur wenn ich eben auf den Button klicke, ist beides weg... :(
bf109g.01 - So 05.12.10 18:38
kalmi01 hat folgendes geschrieben : |
Hi,
Du hast mehrere Möglichkeiten, deine Form1 zu "verstecken".
- Width und Height im OnCreate auf 1 setzen, Top und Left auf z.B. -9999
- Alphablend so einstellen, das die Form transparent wird
- im OnPaint Visible := false setzen
Vorteil, man kann die Form bei Bedarf hervor zaubern. |
Danke. zT schon probiert. Nur werd ich dann wieder den Button auf der Taskleiste nicht los, oder? ;)
EDIT:
Ich habe hier folgendes gefunden:
| http://www.delphi-fundgrube.de/faq01.htm hat folgendes geschrieben: |
Um den Taskbar-Eintrag des Programms zu verstecken, muß man das Applikationsfenster (nicht die MainForm!) unsichtbar machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TMainForm.FormShow(Sender: TObject); var Owner : HWnd; begin Owner:=GetWindow(Handle,GW_OWNER); ShowWindow(Owner,SW_HIDE); end; | |
Wie / wo wird diese Prozeudr aufgerufen, bzw. wo muss ich sie einfügen, damit sie aufgerufe wird? Einfahc nach implementation eingefügt funktionierts nicht...
jaenicke - So 05.12.10 18:57
bf109g.01 hat folgendes geschrieben : |
| Und wenn ich Application.ShowMainForm auf False setze, dann kann ich ncihts ausführen, weil das Ereignis OnActivate nie eintritt |
Wie gesagt: Schreib deinen Quelltext nicht ins Formular, sondern auch direkt dort hin... Der wird ausgeführt, wie du ja daran merkst, dass diese Zeile ausgeführt wird...
Und sonst lass das Formular ganz weg und pack stattdessen eine eigene Botschaftswarteschleife hin.
Es gibt schon genug Möglichkeiten. Was genau jetzt in welcher Reihenfolge bei dir passieren soll ist mir aber bisher nicht klar. Ob du nur auf Botschaften reagieren willst (nur Tray Icon), das Formular doch noch willst, ...
bummi - So 05.12.10 19:15
Mein Posting erfolgte in der Annahme Du hättest Jaenickes Hinweis
| Zitat: |
Setze einfach im Projektquelltext Application.ShowMainForm auf False.
|
bereits umgesetzte und hättest folgendes Problem
| Zitat: |
Und wenn ich Application.ShowMainForm auf False setze, dann kann ich ncihts ausführen, weil das Ereignis OnActivate nie eintritt und wenn ich meine Anweisungen bei FormCreate reinschreibe, verschwindet es logischerweise erst danach.
|
hier hättest Du mit
Procedure Loaded;override;
einen Einsprungspunkt um etwas zu tun
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!