Autor Beitrag
bf109g.01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 01.12.10 21:59 
Setze einfach im Projektquelltext Application.ShowMainForm auf False.
bf109g.01 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Mi 01.12.10 22:08 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 02.12.10 00:03 
ausblenden 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;
// Tuwasimmer Du willst
end;

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 02.12.10 06:27 
user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: So 05.12.10 18:05 
Danke für die Antworten!

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 39



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: So 05.12.10 18:36 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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;
// Tuwasimmer Du willst
end;


Ich glaube, ich bin dafür einfach zu blöd...
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: So 05.12.10 18:38 
user profile iconkalmi01 hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.12.10 18:57 
user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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