![]() |
Forms umschalten - ohne zwischendurch Desktop zu sehen?
Hallo Experten,
in meiner Anwendung empfange ich den Benutzer mit einem Begrüßungs-Form mit einem START-Knopf. Der Button soll unter anderem vom Begrüßungs-Form umschalten auf ein anderes Form. Das geschieht auch, ABER: zwischen dem verschwinden des Begrüßungs-Forms und dem Darstellen des neuen Forms ist eine Verzögerung, bei der bei schwachen Computern der Desktop für fast eine Sekunde sichtbar ist. Gibt's Wege, bei denen ich verzugslos umschalten kann? Danke schon mal, Michael |
AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?
Zitat:
|
AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?
Da fällt mir spontan ein ...
Delphi-Quellcode:
Die showmessage() wird erst angezeigt, wenn Formular 2 komplett sichtbar ist.
const
WM_FORM_VISIBLE = WM_USER + 1; type TDeineAnwendung = class(TForm) // .... private bFormVisibleChecked: Boolean; procedure WMFormVisible(var msg: TMessage); message WM_FORM_VISIBLE; public // .... end; implementation // .... procedure TDeineAnwendung.FormCreate(Sender: TObject); begin bFormVisibleChecked := False; end; procedure TDeineAnwendung.WMFormVisible(var msg: TMessage); begin if not bFormVisibleChecked then begin showmessage('Zweites Formular ist jetzt komplett sichtbar - verstecke Formular eins!'); bFormVisibleChecked := True; end; end; procedure TDeineAnwendung.FormPaint(Sender: TObject); begin if not bFormVisibleChecked then PostMessage(Handle, WM_FORM_VISIBLE, 0, 0); end; In WMFormVisible kannst du jetzt den Begrüßungsbildschirm ausblenden, schließen oder was auch immer machen. |
AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?
Also momentan mache ich es so:
in der dpr alle Application.CreateForm
Delphi-Quellcode:
//Im Ereignis-Code des "START" Buttons: ControlForm.Hide; //das ist das "Begrüßungs-Form" Form1.Show; //hier soll es weitergehen Form1.Left:=0; Form1.Top:=0; Form1.width:=1024; Form1.height:=768; tc:=GetTickcount; repeat Application.ProcessMessages; until (GetTickcount-tc)>200; MainUnit.MainLoop; //hier werden einige GDI+ Grafikroutinen aufgerufen die auf dem Form1 zeichnen ... |
AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?
Wenn ich Form1.Show vor dem ControlForm.hide aufrufe, ist der Inhalt von Form1
unvollständig. Und das impliziert dein Ansatz doch, oder? Zitat:
|
AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
WMFormVisible nicht mit FormShow verwechseln. Setz mal eine ShowMessage in FormShow und WMFormVisible. Du wirst sehen, dass die MessageBox in FormShow kommt, bevor das Formular sichtbar ist. Die MessageBox in WMFormVisible kommt erst, nachdem das Formular komplett gezeichnet wurde und somit sichtbar ist. Wenn du also ControlForm.Hide; in WMFormVisible machst, verschwindet der Begrüßungsbildschirm erst wenn dein Haupt-Formular komplett sichtbar ist. Im Anhang mal ein Beispiel. |
AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?
@Jim Carrey:
perfekt. so läuft's einwandfrei! Vielen Dank! |
AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?
Vielen Dank für die Rückmeldung.
Der Ehrlichkeit halber muss ich gestehen: ich weiß nicht, ob das eine saubere und gute Lösung ist. Aber ich hatte damit von Windows XP bis Windows 10 noch nie Probleme. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz