Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ladebalken in Splash (https://www.delphipraxis.net/100399-ladebalken-splash.html)

Svenkan 27. Sep 2007 18:19


Ladebalken in Splash
 
Hallo,
ich möchte gerne einen Ladebalken zu Start meines Programms in meinen Splash-Screen anzeigen lassen.
Dieser soll anzeigen, wie weit das Programm bereits geladen wurde.

Wie ist möglich?

shmia 27. Sep 2007 18:35

Re: Ladebalken in Splash
 
Dazu müsste irgend ein Codestück den globalen Überblick haben wie vielen Einheiten der gesamte Ladevorgang hat und wie viele Einheiten schon geladen wurden.
Jede Änderung am Programm würde hier wieder Nacharbeit nach sich ziehen.
Deutlich einfacher wäre dem Benutzer auf einem Label anzuzeigen, was gerade passiert.
z.B. "Lade globale Optionen", "Lade Artikel..."
Delphi-Quellcode:
class procedure TSplashForm.DisplayMessage(const s: string);
begin
  if Assigned(SplashForm) then
  begin
    SplashForm.LabelInfo.Caption := s;
    SplashForm.Update;
  end;
   
  LogObj.WriteLogFile('SplashForm: '+s);
end;

Progman 27. Sep 2007 19:17

Re: Ladebalken in Splash
 
Hallo, ich mache sowas gleich in der dpr-Datei.
Das Form SplashScreen hat eine public-Procedure (StepForward), die den Vortschrittsbalken weiterschiebt bzw. neu setzt. Hier der Code einer dpr-Datei von mir. Hab aber einiges rausgenommen. Soll ja nur das Prinzip verdeutlichen.
Delphi-Quellcode:
program irgendwas;

uses
  Forms,
  Windows,
  SysUtils,
  Controls,
  ph2_Tools in '..\4AllUnits\ph2_Tools.pas',
  ph2_Main in '..\4AllUnits\ph2_Main.pas' {frmMain},
  ph2_Splash in '..\4AllUnits\ph2_Splash.pas' {SplashScr},
  ph2_HauptMenu in '..\4AllUnits\ph2_HauptMenu.pas' {HauptMenu},
  ph2_ShowUebung in 'Units\ph2_ShowUebung.pas',
  ph2_Sound in '..\4AllUnits\ph2_Sound.pas',
  ph2_frm301 in 'Units\ph2_frm301.pas' {frm301},
  ph2_afrm301 in 'Units\ph2_afrm301.pas' {auf301},
  ph2_frm302 in 'Units\ph2_frm302.pas' {frm302},
  ph2_frm303 in 'Units\ph2_frm303.pas' {frm303},
  ph2_afrm303 in 'Units\ph2_afrm303.pas' {auf303},
  ph2_frm304 in 'Units\ph2_frm304.pas' {frm304},
  ph2_afrm304 in 'Units\ph2_afrm304.pas' {auf304},
  ph2_frm305 in 'Units\ph2_frm305.pas' {frm305},
  ph2_frm306 in 'Units\ph2_frm306.pas' {frm306};

{$R *.res}

begin
  ProgrammIndex:=3;
  Application.Initialize;
  Application.Title := 'Elektronik';
  Application.CreateForm(TfrmMain, frmMain);
  Application.CreateForm(TLoginScreen, LoginScreen);
  if ((LoginScreen.ShowModal=mrOK) and AppData.appLoginOK) then begin
    Application.CreateForm(TSplashScr, SplashScr);
    SplashScr.ProgressBar.Max:=10;
    SplashScr.show;
    SplashScr.repaint;
    LoginScreen.Free;
    //alle anderen Windows laden
    SplashScr.StepForward; //Position 1
    if FileExists(AppData.ResPath+'HG.bmp') then
     frmMain.BackGround.LoadFromFile(AppData.ResPath+'HG.bmp');
    SplashScr.StepForward; //Position 2
    if FileExists(AppData.ResPath+'crDefault.cur') then
     Screen.Cursors[myDefault]:=LoadCursorFromFile(PChar(AppData.ResPath+'crDefault.cur'));
    Screen.Cursor:=myDefault;
    SplashScr.StepForward; //Position 3
    Application.CreateForm(THauptMenu, HauptMenu);
    SplashScr.StepForward; //Position 4
    //Übung 1
    Application.CreateForm(Tfrm301, frm301);
    Application.CreateForm(Tauf301, auf301);
    SplashScr.StepForward; //Position 5
    //Übung 2
    Application.CreateForm(Tfrm302, frm302);
    SplashScr.StepForward; //Position 6
    //Übung 3
    Application.CreateForm(Tfrm303, frm303);
    Application.CreateForm(Tauf303, auf303);
    SplashScr.StepForward; //Position 7
    //Übung 4
    Application.CreateForm(Tfrm304, frm304);
    Application.CreateForm(Tauf304, auf304);
    SplashScr.StepForward; //Position 8
    //Übung 5
    Application.CreateForm(Tfrm305, frm305);
    SplashScr.StepForward; //Position 9
    //Übung 6
    Application.CreateForm(Tfrm306, frm306);
    SplashScr.StepForward; //Position 10
    SplashScr.Free;
    Application.Run;
  end else begin
    Application.Terminate;
  end;
end.

Svenkan 28. Sep 2007 13:28

Re: Ladebalken in Splash
 
@ Progman: Leider ist es so, dass wenn ich den Code zum Weitersetzen reinschreibe, die Forms, die darunterliegen, 'rausgenommen' werden und der Splash-Screen dann auch nicht geschlossen wird, weil anscheinend die Initialisierung gar nicht mehr abgeschlossen wird.

@ shmia: Woher bezieht das Programm denn bei deinem Code die Abläufe?

shmia 28. Sep 2007 14:06

Re: Ladebalken in Splash
 
Zitat:

Zitat von Svenkan
@ shmia: Woher bezieht das Programm denn bei deinem Code die Abläufe?

Angenommen beim Start werden mehrere Datenmodule und Formulare geladen.
Dann muss das SplashForm mit Uses in jede dieser Unit eingebunden werden.
Im Event OnCreate steht dann z.B. Folgendes:
Delphi-Quellcode:
procedure TArtikelDataModule.DataModuleCreate(Sender: TObject);
begin
   TSplashForm.DisplayMessage('Verbinde mit Datenbank...');
   Connection.Connect;
   TSplashForm.DisplayMessage('Lade Artikel...');
   QryArtikel.open;
   TSplashForm.DisplayMessage('Artikel geladen');
end;
Wenn dein Programm wären des Ladens auf einen Fehler trifft, dann sieht man auf dem SplashForm, was die letzte Aktion war; eine gute Hilfe zur Fehlereingrenzung.
Wenn das SplashForm nicht angezeigt wird, dann passiert nix, da in TSplashForm.DisplayMessage überprüft wird, ob das SplashForm überhaupt da ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz