Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.183 Beiträge
 
Delphi 12 Athens
 
#2

AW: Splash Screen sofort anzeigen

  Alt 17. Jun 2020, 11:04
Ja, wir haben auch die tausenden DevExpress-BPLs.

Vorab-Fazit: nein, geht nicht (einfach)

* ohne BPLs, alles in der EXE
* * hier wird zuerst die ganze Datei geladen und anschließend der Code ausgeührt, also garnicht möglich

* mit BPLs in der EXE auch nicht
* * denn Sie wird als Letztes ausgeführt, nachdem alle gelinkten BPLs geladen wurden, also nicht machbar

* wenn du es schaffst deine BPL als erstes laden zu lassen
* * darfst dort natürlich keine anderen BPLs als Abhängigkeit haben (DevExpress, RTL, VCL, ...)
* * also schön NonVCL ist wohl am Schnellsten, mit den wenigsten Abhängigkeiten
* * dann könntest du es schaffen, allerdings werden scheinbar die Units nicht sofort initialisiert,
sondern erst wenn sie von Anderen sie verwendet werden, aber du brauchst eine Unit-Initialization, um dort deine Form zu erstellen und anzuzeigen.


Alternativen:

* ein Bootloader
* * also eine kleine EXE, die zuerst gestartet wird und den Splashscreen anzeigt, bis sie das große Programm erfolgreich gestartet hat

* nicht aus dem Netzwerk starten

Ich hab hier ein paar alte bzw. sehr langsame PC mit einem langsamen Netzwerk,
dort hatte ich mir mal eine Batch geschrieben, welche die Dateien runterläd, in ein lokales Verzeichnis.
statt MeinProgramm.exe -Parameter ... wird dann MeinProgramm.local.cmd \\IRGENDWAS\FREIGABE\ -Parameter ... verwendet,
welche auch noch paar Sekunden länger sichtbar ist, bis der Splashscreen/Ladefortschritsanzeige kommt.

Code:
@PROMPT @@$G$S
CD /D "%~dp0"

REM
REM example: "C:\MeinZeug\MeinProgramm.local.cmd" \\IRGENDWAS\FREIGABE\ -DIE -PARAMETER -WENN -VORHANDEN
@REM example as single-line command without batch: CMD /C "CD /D "C:\MeinZeug"&&TASKKILL /F /IM MeinProgramm.exe&&ECHO Temp\>xcopy_exclude.txt&&ECHO Backup>>xcopy_exclude.txt&&ECHO *.ini>>xcopy_exclude.txt&&XCOPY \\IRGENDWAS\FREIGABE\* .\ /D /S /E /H /R /C /G /K /Z /V /Y /EXCLUDE:xcopy_exclude.txt&&DEL xcopy_exclude.txt&&START "" /B MeinProgramm.exe -DIE -PARAMETER -WENN -VORHANDEN"

@SET ERR=0
@SET PROGRAM=MeinProgramm.exe

@ECHO.
@ECHO #Source: %~1
@ECHO #Local: %~dp0
@IF NOT EXIST "%~1\%PROGRAM%" ( ECHO source-directory does not exist && SET ERR=1 )
@IF NOT EXIST "%~dp0\%PROGRAM%" ( ECHO local-directory is not correct && SET ERR=2 )
@IF NOT %ERR% == 0 GOTO error

TASKKILL /F /IM "%PROGRAM%" 2>NUL

@TITLE Download FileUpdates from %~1
XCOPY "%~1\*" "%~dp0" /D /S /E /H /R /C /G /K /Z /V /Y /EXCLUDE:%~f0
@IF ERRORLEVEL 2 SET ERR=3

@TITLE Start %PROGRAM%
SHIFT /1
START "" /B "%PROGRAM%" %*
@IF ERRORLEVEL 9059 SET ERR=4

@IF NOT %ERR% == 0 GOTO error
@TIMEOUT /t 5
EXIT /B

:error
@TIMEOUT /t 300
EXIT %ERR%

*** COPY-ExcludeList ***
*.config
*.ini
Backup
Temp\
.7z
.zip
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat