Tutorial :How to make a splash screen with a progress bar on Turbo Delphi?



Question:

(Unit1.pas)

    unit Unit1;        interface        uses        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,        Dialogs, StdCtrls, ExtCtrls,unit2;        type        TForm1 = class(TForm)          Button1: TButton;          Label1: TLabel;          Timer1: TTimer;          procedure Timer1Timer(Sender: TObject);        private          { Private declarations }        public          { Public declarations }          procedure OpenSplash;          procedure ShowProgress;          procedure CloseSplash;        end;        var        Form1: TForm1;            X: Integer;            Total: Integer;            Percent: Integer;        implementation        {$R *.dfm}       procedure TForm1.OpenSplash;      begin        Label1.Caption := '';        Show;        Update;            end;    procedure TForm1.CloseSplash;  begin    Form1.Destroy;  end;      procedure TForm1.ShowProgress;  begin  Label1.caption:='';     Total := 1000;        for X := 1 to Total do        begin          Sleep(5);          Percent := (x * 100) div Total;          Label1.caption := StringOfChar('|', Percent) + IntToStr(Percent) + '%';          Label1.Repaint;          end;  end;     procedure TForm1.Timer1Timer(Sender: TObject);  begin    Close;    Release;    Form1 := nil;  end;    end.  

(Unit2.pas)

unit Unit2;    interface    uses    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,    Dialogs, StdCtrls;    type    TForm2 = class(TForm)      memo1: TMemo;      private      { Private declarations }    public      { Public declarations }    end;    var    Form2: TForm2;    implementation    {$R *.dfm}  function Splash: TForm2;  begin    if Form2 = nil then begin      Form2 := TForm2.Create(Application);    end;    result := Form2;  end;  end.  

(*.dpr)

program Project1;    uses    Forms,    Unit1 in 'Unit1.pas' {Form1},    Unit2 in 'Unit2.pas' {Form2};    {$R *.res}    begin    Application.Initialize;    Form1.OpenSplash;    Form1.ShowProgress;    Application.CreateForm(TForm1, Form1);    Form1.CloseSplash;    Application.Run;  end.  


Solution:1

In your *.dpr, try something like this:

begin    Application.Initialize;    FormSplash := TFormSplash.Create( Application );    FormSplash.OpenSplash;    // Do the rest of your initialisation...    // MAKE SURE THERE'S NO CreateForm FOR FormSplash!    FormSplash.ShowProgress( "Creating a form..." );    Application.CreateForm( ... , ... );    ...    // When you want to modify the splashscreen, do something like this:    FormSplash.ShowProgress( "Doing something else..." );    ...    // Close the splash screen    FormSplash.CloseSplash;    Application.Run;  end.  

You shouldn't need any references to your FormUtama type.


Solution:2

In your project code you are doing like this:

  Form1.OpenSplash;    Form1.ShowProgress;    Application.CreateForm(TForm1, Form1);    Form1.CloseSplash;  

Actually you are using methods from Form1 before creating it. This is dedicated to give problems...


Solution:3

Maybe this is interesting for you.


Solution:4

Here are the conclution

program Project1;    uses    Forms,    Unit1 in 'Unit1.pas' {Form1},    Unit2 in 'Unit2.pas' {Form2};    {$R *.res}    begin    Application.Initialize;    Form1 := TForm1.Create( Application );    Form1.OpenSplash;    Form1.ShowProgress;    Application.CreateForm(TForm2, Form2);    Form1.CloseSplash;    Application.Run;  end.  

Unit 1

unit Unit1;    interface    uses    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,    Dialogs, StdCtrls, ExtCtrls,unit2;    type    TForm1 = class(TForm)      Button1: TButton;      Label1: TLabel;    private      { Private declarations }    public      { Public declarations }      procedure OpenSplash;      procedure ShowProgress;      procedure CloseSplash;    end;    var    Form1: TForm1;        X: Integer;        Total: Integer;        Percent: Integer;    implementation    {$R *.dfm}   procedure TForm1.OpenSplash;  begin    Label1.Caption := '';    Show;    Update;        end;    procedure TForm1.CloseSplash;  begin    Form1.Destroy;  end;      procedure TForm1.ShowProgress;  begin  Label1.caption:='';     Total := 1000;        for X := 1 to Total do        begin          Sleep(5);          Percent := (x * 100) div Total;          Label1.caption := StringOfChar('|', Percent) + IntToStr(Percent) + '%';          Label1.Repaint;          end;  end;    end.  

Unit 2

unit Unit2;    interface    uses    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,    Dialogs, StdCtrls;    type    TForm2 = class(TForm)      memo1: TMemo;      private      { Private declarations }    public      { Public declarations }    end;    var    Form2: TForm2;    implementation    {$R *.dfm}    end.  

Thanks a lot for those who answer my question.


Solution:5

Add this code after the begin statement of the Project Source code (the .dpr file):

Application.Initialize; //this line exists!   SplashScreen := TMySplashScreen.Create(nil) ;   SplashScreen.Show;   SplashScreen.Update;   

After the final Application.Create() and before Application.Run:

SplashScreen.Hide;  SplashScreen.Free;  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »