Zum Programmstart Infos anzeigen und die Ladezeit des Hauptformulars überbrücken. Das ist der Zweck eines „Startbildschirms“. Lösungsvorschläge gibt es diverse, doch kaum einer ist geschmeidig.
Die hier vorgestellte Lösung ist ein Konglomerat verschiedener Quellen, die zwar häufig funktionslos, jedoch gute Ideengeber waren. Statt eines weiteren endlosen YouTube-Videos, bei dem ausgiebig das Positionieren von Elementen und zig-fache Scheitern beim Compilieren einer unbefriedigenden Lösung gezeigt wird, erläutere ich hier eine elegante Variante, inklusive funktionsfähigem Quellcode zum Download.
Die Anforderung
So banal ein Startschirm in der Erscheinung wirkt, ist die Umsetzung davon kniffliger, wenn er geschmeidig sein soll:
- Der Start des Hauptprogramms darf weder verzögert noch behindert werden.
- Das Gezeigte soll lange genug sichtbar sein, damit es zumindest überflogen werden kann.
- Nach der Anzeige sollen keine Reste davon im Speicher Platz belegen.
Die Lösung
Der Schlüssel liegt in der Projektdatei von Delphi. Hier werden alle Programmteile zusammengefügt und die Anwendung gestartet. Der Startbildschirm nimmt dabei eine Sonderstellung ein: Er soll einerseits zwar vom Programmstart abhängig, der eigentliche Programmstart davon jedoch entkoppelt sein.
Hauptprogramm
Das wird „wie immer“ erstellt. Hier gibt es keine besonderen Anforderungen, das bleibt, wie es ist.
Startschirm
Der wird als neues Formular dem Projekt hinzugefügt und nach Wunsch gestaltet. Rand und Menü-Symbole sind Geschmackssache, ich blende beides aus, weil es irreführend ist: Ein Startschirm ist kein „richtiges“ Programmfenster und hat keine weitere Funktion. Relevant ist jedoch die Eigenschaft FormStyle = fsStayOnTop
, damit das Formular „ganz oben“ sichtbar ist.
Die Mindestanzeigedauer wird mit einem TTimer
realisiert. Der besondere Kniff: Das Schließen ist von einer von mir so benannten und bereit gestellten Eigenschaft Remove
abhängig, die das Formular als property
in der Projektdatei ansprechbar macht.
Zeitsteuerung und „aufräumen“ wird in Ereignissen des Splash-Formulars organisiert. Details siehe dort.
Tipp: Das Timer-Interval sollte kleiner als die Mindestanzeigedauer sein. Die sollte „etwas kleiner“ als ein Vielfaches des Intervalls sein. Das legt fest, wie viel die Anzeige ggf. länger als die Mindestdauer ist.
Die Projektdatei
Die Projektdatei fristet üblicherweise ein Schattendasein. Die Delphi-IDE generiert diese Datei automatisch, weshalb sie unterschätzt wird. Denn sie kann genauso Programmfunktionen ausführen wie alle anderen Units. Da sie für die Ladereihenfolge der Elemente verantwortlich ist, wird hier die Splash-Screen-Steuerung integriert.
Vorweg wird der im Projekt erzeugte Splash-Screen in den Projektoptionen → Anwendung → Formulare1 aus der Liste der automatisch erzeugten Formulare in die Liste der verfügbaren Formulare verschonben („nach rechts“), damit das „Formulare aufräumen“ störungsfrei funktioniert.
Mit den dafür vorgesehen Funktionen wird der Startschirm von Hand erzeugt und angezeigt, bevor die eigentliche Anwendungsinitialisierung erfolgt. Ist das alles erledigt, wird dem Splash-Screen die Erlaubnis zum Schließen erteilt. Dafür wird die dem Formular hinzugefügte Eigenschaft Remove
benutzt.
Der Schirm bleibt so lange geöffnet, bis die Mindestdauer erreicht ist, während darunter die Hauptanwendung schon bereitstehen und benutzt werden kann. Sollte das Einrichten der Hauptanwendung länger dauern, schließt der Startschirm erst, wenn er schließen darf. Es gibt also eine lose Beziehung zwischen Startschirm und Hauptanwendung, jedoch keine Blockade von irgend etwas.
Das ist der Fall, wenn – wie bei diversen Vorschlägen – die Splash-Wartezeit mit der Funktion sleep〈〉
realisiert wird. Die legt für die eingestellte Zeit den kompletten Rechner lahm …
Warum das geschmeidig funktioniert
Der „Kniff“ ist die Entkopplung des Startschirms vom eigentlichen Programm. Während das noch mit Startklar machen beschäftigt ist, wird vorneweg der Startschirm gezeigt. Dessen Anzeige wiederum ist unabhängig vom Hauptprogramm. Das muss „arbeitsfertig“ sein, bevor dem Startschirm das Schließen erlaubt wird. Der entscheidet dann über das eingestellte Timer-Intervall und die Mindestdauer, ob oder wie lange er noch sichtbar ist und räumt sich nach dem Schließen selbst auf.
Das Demo-Programm
Die Demo „kann nix außer Startschirm zeigen“. Sowohl auf dem Hauptformular als auch dem Splash-Screen ist lediglich ein Label zur Identifizierung. Diese Quelle ist mit „Rio“ erstellt, verwendete Funktionen sind durchweg „Grundfunktionalität“, daher sollte das Beispiel sowohl abwärts kompatibel, als auch FreePascal-tauglich sein2.
Alles auspacken, SplashDemo.dpr öffnen, compilieren, dann den Code ansehen — oder mir schreiben, dass es mit Delphi … / FreePascal doch Probleme gibt. Vorzugsweise mit Hinweis, welche, idealerweise mit entsprechend korrigierten Quellen.
Download
7z-Archiv vom 23.01.2020, 15:44 Uhr, Größe: 1.6 KB
Zum Auspacken ist 7z erforderlich.
Diese Quellen dürfen gemäß MIT-Lizenz verwendet und verteilt werden.
- Dieses Beispiel hat geholfen?
-
💡 Via PayPal könnten Sie mir dafür einen Kaffee spendieren!