Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - MainForm erst öffnen, wenn alles geladen wurde


Bergmann89 - Fr 11.11.11 01:54
Titel: MainForm erst öffnen, wenn alles geladen wurde
Hey,

ich steh grad vor nem Problem für das es sicher eine einfache Lösung gibt, ich aber grad keine finde. Und zwar versuche ich die MainForm erst anzuzeigen, wenn die restlichen Formulare auch geladen sind. Jetzt wird sie angezeigt, sobald sie erzeugt wurde. Wenn ich direkt nach dem Erzeugen ein Hide aufrufe, dann flackert sie nur kurz auf, aber das sieht sehr unschön aus. Weiß jmd wie ich die Form von Anfang an unvisible machen kann?

MfG Bergmann.


Tranx - Fr 11.11.11 03:29

Am Einfachsten ist es, als erste Anweisung bei der Formcreate-Prozedur folgendes zu schreiben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure Form1.Formcreate(Sender : TObject);
begin
  Top := 2000;
.
.
.
.
end;


und bei Formshow:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure Form1.FormShow(Sender : TObject);
begin
  Top := 0;
.
.
.
.
end;

Dann sollte das Formular erzeugt werden, aber erst an der Stelle y = 2000, also außerhalb des sichtbaren Bildschirms. Und beim Zeigen (FormShow) wird es dann auf y = 0 (Also am oberen Rand des Bildschirms gesetzt. Zugegeben, eine etwas ungewöhnliche Art, aber wirksam.

Moderiert von user profile iconNarses: Delphi-Tag repariert.


bummi - Fr 11.11.11 06:29


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  Application.Initialize;
  SendMessage(Application.Handle,sw_Hide,0,0);
  Application.CreateForm(TForm1, Form1);
  sleep(1000);
  Application.CreateForm(TForm2, Form2);
  sleep(1000);
  Showmessage('Alles erzeugt');
  SendMessage(Application.Handle,sw_Show,0,0);
  Application.Run;


jaenicke - Fr 11.11.11 06:48

Es ist standardmäßig sowieso so, dass das Formular erst dann angezeigt wird. Das ist also alles eigentlich gar nicht nötig. Ausprobieren sollte sich das mit einem simplen neuen Projekt mit zwei Formularen lassen, wobei im FormCreate des zweiten einfach ein Sleep eingebaut wird. Das Hauptformular sollte erst nach dem Sleep sichtbar werden.

Wenn das anders ist, dann liegt das an dem eigenen Code. Und da wir den nicht kennen, lässt sich dazu auch nicht viel sagen.


Bergmann89 - Fr 11.11.11 18:41

Hey,

@jaenicke: hast Recht, ich hab beim Laden der Formulardaten das Visible auch mit gespeichert und da wird es natürlich auch mit geladen. Hab's angepasst und jetzt gehts so, wie ich es haben wollte ;) Danke.

MfG Bergmann


Delete - Sa 12.11.11 09:41

Man sollte auch Folgendes bedenken:

- wenn nach dem Programmstart "länger" nichts zu sehen ist, startet man das Programm nocheinmal, evtl. dann mit Administratorrechten - das ist nicht im Sinne des Programmierers... - deshalb nur 1 Instanz zulassen!
- Grundsätzlich sollte immer ein Lebenszeichen erkennbar sein - alles andere ist Quatsch und amateurhaft!


haentschman - Sa 12.11.11 09:47

Moin...

ich werfe mal noch das Stichwort "Splashscreen" in den Raum 8)


Bergmann89 - Sa 12.11.11 13:08

Hey,

ist alles schon verbaut :D Dass das Programm nur einmal ausgeführt werden kann war schon vorher drin, und das Problem mit der MainForm hatte ich nur, weil ich nen FlashScreen einbauen wollte. Da is nämlich die Form immer aufgesprungen, obwohl der FlashScreen noch da war, bzw das Programm noch nicht vollständig initialisiert wurde.

MfG Bergmann.