![]() |
Threaded Splash-Screen
Hi,
es gab schon diverse Diskussionen zum Thema z.B. ![]() ![]() Ich möchte eine animierte Splash (Animation starten - z.B. Video oder Bilderserie anzeigen). Dann soll ein Codeteil im Hauptthread ausgeführt werden, der unbekannt lange dauern kann. Nach dem Beenden des Hauptthreads soll der Splash dann beendet werden. Da es Interaktion mit der VCL gibt und kein Zugriff darauf besteht bzw. dieser nicht Threadsave ist, kann der Hauptthread nicht in einen separaten Thread ausgelagert werden. Vielmehr sollte der Splash-Screen im Thread laufen, so dass die Animation während der Wartezeit läuft.
Code:
Ist das grundsätzlich möglich oder mache ich hier einen Gedankenfehler?
StartSplashScreenThread;
try Sleep(10000); // Nicht ThreadSave finally StopSplashScreenThread; end; |
AW: Threaded Splash-Screen
Geht nicht.
Alles was mit der GUI zu tun hat muss (in der VCL) im Hauptthread erfolgen (bzw. in dem Thread in dem das Windows-GUI-Control erstellt wurde). Da es schwierig wird eine Formular im Thread zu erstellen und dann *irgendwie* zu verhindern das es globale Objekte (TApplication, ...) zugreift, welche auch Windows-GDI-Ressourcen nutzen wir das fast unmöglich sein zu tun. Ein DLL hilft dir nur wenn du das laden auch in einem Thread verlagern kannst und damit das dortige Application-Instanz auch im anderen Thread erzeugt wird. |
AW: Threaded Splash-Screen
Wie dort schon erwähnt, kann man NonVCL eine Form in jedem beliebigen Thread erstellen (CreateWindow/CreateDialog) und die kann während der MainThread hängt unabhängig arbeiten.
Bei uns wurde zuletzt im Haupthtread von einer Wait-TForm ein ScreenShot gemacht (intern mit Form.Print) und dieses Bitmap dann auf der NonVCL-Form angezeigt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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-2025 by Thomas Breitkreuz