Entwickler-Ecke
Dateizugriff - SplashScreen und ProgressBar-Problem.. ;)
Terra23 - Mo 01.09.08 15:36
Titel: SplashScreen und ProgressBar-Problem.. ;)
Hi!
Ich habe mit Hilfe der Suche herausgefunden, wie ich einen SplashScreen in mein Programm einbauen kann. Darauf befindet sich ein Timer, der im OnTimer-Ereignis das ProgressBar (das oder der?) um 1 erhöht.
Nun kommt mein Problem:
Es tut sich dort rein gar nix und der SplashScreen verschwindet, bevor auch nur irgendwas mit dem ProgressBar passiert ist.
Was mache ich falsch?
Die bisherigen Suchergebnisse haben mich nicht wirklich vorangebracht.
Bisher sieht meine DPR so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| program DeckButler;
uses Forms, DeckButler_Unit in 'DeckButler_Unit.pas' , MutexConfig in 'MutexConfig.pas', Sammlungen_Unit in 'Sammlungen_Unit.pas' , Splash_Unit in 'DB-Bilder\Splash_Unit.pas' ;
{$R *.res}
begin
SplashForm:=TSplashForm.Create(Application);
Try SplashForm.Show; SplashForm.Update;
Application.Initialize; Application.Title := 'DeckButler 2.0 BETA'; Application.HelpFile := 'D:\Alex\Delphi\Neue Projekte\DeckButler\DeckButler.chm'; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2);
If SplashForm.ProgressBar1.Position=100 Then SplashForm.Hide;
Finally SplashForm.Free; End; Application.Run; end. |
Hinzu kommt halt, dass ich nicht weiß, ob ich evtl. in der DPR was verändern muss oder so. Würde ich hier z.B. ein Sleep einbauen (was mein Delphi mit ner Fehlermeldung verweigert), dann steht doch IMHO das gesamte Programm, oder? Also somit auch der SplashScreen.
Wäre nett, wenn mir jemand mal auf die Sprünge helfen würde. Ich brauche nur nen Denkanstoß, der mich weiterbringt, keinen vorgekauten Code zum kopieren und einfügen.
MfG
Terra
PS: Ich weiß, die Lesbarkeit meines Codes ist furchtbar. Ich hab's von der Schule her so gelernt und ich muss miur erstmal die Lesbarkeit einimpfen lassen.
Gausi - Mo 01.09.08 15:44
Wenn du eine Fortschrittsanzeige im Splashscrren haben willst, würde ich das über ein paar Zwischenzeilen im Code von MainForm.Create machen. Eine Prozent-genaue Anzeige macht da eh keinen Sinn, von daher reicht es imho aus, wenn man da ab und zu Sachen ausgeben lässt wie "Einstellungen geladen", "verarbeite Einstellungen...", "Lade Daten...", etc.
btw.: Das ist ganz böse: ;-)
Delphi-Quelltext
1:
| Application.HelpFile := 'D:\Alex\Delphi\Neue Projekte\DeckButler\DeckButler.chm'; |
Terra23 - Mo 01.09.08 16:03
Warum im Create-Ereignis der Main-Form? Die ist ja zu diesem Zeitpunkt noch gar nicht sichtbar, weil der SplashScreen "davor" ist.
Das mit der Hilfe-Datei habe ich entfernt, zumal die Hilfe-Datei ja gar nicht mehr exisitert. Warum ist das böse? Weil dieser Pfad nur bei mir existiert???
Terra
Hidden - Mo 01.09.08 16:10
Terra23 hat folgendes geschrieben: |
| Weil dieser Pfad nur bei mir existiert? |
Du hast es erraten ;)
Nimm lieber so 'was:
Delphi-Quelltext
1: 2:
| Application.HelpFile := ExtractFilePath(ParamStr(0)) + 'DeckButler.chm'; |
mfG,
Terra23 - Mo 01.09.08 16:15
OK, aber das hilft mir trotzdem nicht bei meinem ProgressBar-Problem.
Der bewegt sich nicht und der SplashScreen verschwindet vorher.
Terra
Gausi - Mo 01.09.08 16:38
Du erzeugst zuerst den Splashscreen und zeigst ihn an. Dann kommt der Rest, der wohl etwas länger dauert. Damit es dem User nicht langweilig wird, soll dabei der Splashscreen einen Fortschritt anzeigen, oder habe ich da was falsch verstanden?
Deine Methode funktioniert nicht, weil die Timer Message nicht verarbeitet wird, während die lange Create-Methode der Hauptform arbeitet. Wenn in dieser aber so etwas steht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| macheinbissel; SplashScreen.Label1.Caption := 'Ein bissel was getan...'; Machnocheinbissel; SplashScreen.Label1.Caption := 'Noch ein bissel was getan...'; Machnochmehr; SplashScreen.Label1.Caption := 'Fast fertig...'; |
Dann sollte das funktionieren. Anstelle des Labels kann man natürlich auch ein Progressbar manuell hochfahren. Evtl. muss man auch das Neuzeichnen veranlassen mit
SplashScreen.Update; oder so ähnlich.
Terra23 - Mo 01.09.08 16:59
Danke, Gausi.
Hab's inzwischen nach einigem hin und her herausgefunden und es klappt so, wie ich es mir vorgestellt habe.
Gruß,
Terra
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!