| Autor |
Beitrag |
bf109g.01
      
Beiträge: 84
|
Verfasst: Mi 01.12.10 21:53
Hallo ich möchte mein Form1 direkt nach Programmstart unsichtbar machen.
Das hab ich auch probiert -> 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
Zuletzt bearbeitet von bf109g.01 am Mi 01.12.10 22:06, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 01.12.10 21:59
Setze einfach im Projektquelltext Application.ShowMainForm auf False.
|
|
bf109g.01 
      
Beiträge: 84
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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; |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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.
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
bf109g.01 
      
Beiträge: 84
|
Verfasst: 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 39
|
Verfasst: 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 
      
Beiträge: 84
|
Verfasst: So 05.12.10 18:36
|
|
bf109g.01 
      
Beiträge: 84
|
Verfasst: 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:
| 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...
Zuletzt bearbeitet von bf109g.01 am So 05.12.10 18:58, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|