[Delphi] Splash screen lukt. Hoofdscherm niet meer

Pagina: 1
Acties:

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18:51
Dit is m'n Code in Delphi 5:

procedure TForm1.FormCreate(Sender: TObject);
begin
Form2.Visible := True;
Sleep(3000);
Form2.close;
Form1.Showmodal;
end;


of


procedure TForm1.FormCreate(Sender: TObject);
begin
Form2.Visible := True;
Sleep(3000);
Form1.Showmodal;
Form2.close;
end;

heb ik ook geprobeerd.

Bij alleen de laatste krijg ik het hoofdscherm weer terug, maar sluit hij Form2 niet.

Wat doe ik fout?

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Form1.show ?

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18:51
hebbik ook al geprobeerd

Verwijderd

Form2.ModalResult = 1;

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:52

Klippy

Still Game

Form1.visble := true :?

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

In de Help van Delphi zit een zeer goed voorbeeld van een splash screen.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

idd, goeie helpfunctie.
Ik doe het als volgt:

OP de OnCreate van de mainform maak ik frmSplash aan via een Create().
Dat splashscreen geef je een ShowModal.
Dat was de OnCreate().

Op de OnShow van de splash laat je timer starten, over 0.5 seconden ofzo, die vervolgens alle instellingen van je prog gaat laden.
Waarom start je die timer? omdat als je alles op de OnCreate() / OnShow van de frm doet, de form nog niet zichtbaar is! Dus start je alleen de timer

In de timer doe je wat je wilt.

Heel simpel en effectief. Enneh, zelf verzonnen >:)

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Uit de help:
This example shows progress of loading forms as an application starts up. The code example is placed in the project source (*.dpr) file. To see project source, select the View | Project Source menu item.
You will need to set up your project with the following steps before using the code example:

Add four additional forms to a default project.
Place a TProgressBar on Form5
Take the Project | Options | Forms menu option and place Form5 on the available forms list.
Change the code of your project (*.dpr) file to look like the example.

begin

Application.Initialize;
with TForm5.Create(nil) do
try
ProgressBar1.Max := 100;
Show; // show a splash screen contain ProgressBar control
Update; // force display of Form5
Application.CreateForm(TForm1, Form1);
ProgressBar1.StepBy(25);
Application.CreateForm(TForm2, Form2);
ProgressBar1.StepBy(25);
Application.CreateForm(TForm3, Form3);
ProgressBar1.StepBy(25);
Application.CreateForm(TForm4, Form4);

ProgressBar1.StepBy(25);
finally
Free;
end;
Application.Run;
end.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

dit heb ik ook eens ergens uit een voorbeeld gehaald:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
begin
  SplashScreen := TSplashScreen.Create(Application); 
  SplashScreen.Show;
  Application.Initialize;
  SplashScreen.Update;
  Sleep(2000);
  Application.Title := 'Application Title';

  //create al je formpjes
  Application.CreateForm(TMainForm, MainForm);

  SplashScreen.Hide;
  SplashScreen.Free; 
  Application.Run;
end.

edit: tikfoutjes...

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Een sleep zetten om een splash screen te tonen is iets wat ik nu niet zou doen. Het is nl. zo dat dat splash screen getoond wordt terwijl alle andere auto-created forms (ikzelf heb er meestal maar 2) aangemaakt worden en er evt. een connectie met de databank gelegd wordt.
Op tragere computers of in tragere netwerken kan dit nl. al een tijdje duren en er dan nog eens een sleep bijzetten zal wel zwaar irriterend zijn.

Ik denk ook dat de 'grote softwarehuizen' (MS, Adobe, ...) geen timer of sleep gebruiken bij het tonen van hun splash screens. Je moet maar eens kijken naar de splash-screens van Word, Excel, Acrobat Reader enzo. Die verdwijnen redelijk snel als je een snelle pc hebt.

Om even op uw probleem terug te komen: een splash screen maak je niet aan en toon je niet in de OnCreate van uw hoofdscherm ofzo, maar wel in de project-file. Je moet het eigenlijk op de manier van delighteddennis doen.

https://fgheysels.github.io/


Verwijderd

Een sleep zetten om een splash screen te tonen is iets wat ik nu niet zou doen. Het is nl. zo dat dat splash screen getoond wordt terwijl alle andere auto-created forms (ikzelf heb er meestal maar 2) aangemaakt worden en er evt. een connectie met de databank gelegd wordt.
In principe heb je gelijk, maar bij simpele applicaties die maar 1 of 2 forms aan moeten maken is het splashscreen dan in een mum van tijd vertrokken.
Zeker bij commerciele applicaties is het dan toch wel lekker om nog even je merknaam in beeld te houden door gebruik te maken van een Sleep().

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18:51
Krijg ik em nog in de rood? Probleem is nog niet opgelost

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Hoe ziet je code er nu uit?

https://fgheysels.github.io/


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18:51
Ik krijg dit goedje niet voor elkaar op de volgende manier in TWORLD.DPR
code:
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
program TWorld;

uses
  Forms,
  ToDworld in 'ToDworld.pas' {Form1},
  TWImage in 'TWImage.pas' {Form2};

{$R *.RES}



begin

Application.Initialize;
with TForm2.Create(nil) do
try
ProgressBar1.Max := 100;
Show; // show a splash screen contain ProgressBar control
Update; // force display of Form5
Application.CreateForm(TForm1, Form1);
ProgressBar1.StepBy(25);
ProgressBar1.StepBy(25);
ProgressBar1.StepBy(25);
ProgressBar1.StepBy(25);
finally
Free;
end;
Application.Run;
end.

Ik probeer ook wel
ProgressBar1.StepBy(100);
(en dan natuurlijk maar 1 keer. Maar ik krijg een vreemde Acces Violation foutmelding.

Ik denk dat de fout loopt bij, het createn van Form1. En dan heen en weer springt met Form2. Ik krijg namelijk Form2 wel te zien, maar Form1, krijgt geen inhoud, en loopt uit op een foutmelding. Daarna moet ik m'n delphi afsluiten, omdat ik em niet meer kan stoppen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
De createform van Form1 staat in de 'with' van Form2? of heb ik het mis?

https://fgheysels.github.io/


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18:51
Jullie gebruiken een SLEEP commando in een .DPR bestand. En dat mag niet. Of heb ik dit verkeerd?

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18:51
Ik heb em dus nu zonder fouten werkend, maar m'n sleep werkt niet in .DPR, want ik wil een sleep van 750 tussen elke statusbar update doen (25%).

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18:51
Ik ben erachter gekomen, dat hij bij het commando

Form2.Show;

vastloopt. Maar waarom? Dit is een essentieel commando

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18:51
OK. Ik heb wat meer USES in de DPR gezet. Dit helpt, Ik kan nu het SLEEP commando in .DPR gebruiken.

Alleen nu sluit m'n Form2 nog niet. Ik moet em met Alt+F4 afsluiten

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Bekijk de code van dennisdelighted nog eens goed zou ik zeggen.

https://fgheysels.github.io/


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18:51
Ik ben nou vanalles aan het spelen
Ik heb nu dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
begin

Application.Initialize;
Application.CreateForm(TForm1, Form1);
with TForm2.Create(nil) do
try
ProgressBar1.Max := 100;
ShowModal; // show a splash screen contain ProgressBar control
Update; // force display of Form5

ProgressBar1.StepBy(25);

ProgressBar1.StepBy(25);
ProgressBar1.StepBy(25);
ProgressBar1.StepBy(25);

finally
Form2.Free;
end;
Application.Run;
end.

Nog steeds niet goed. Hij sluit FORM2 (splash screen) niet. Form2.Close; mag niet. Dan crasht hij.
Alles wat ik met Form2. ervoor wil zetten, zoals Form2.Show of Form2.Showmodal of Form2.Close loopt vast.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Tuurlijk, je closed een form dat niet bestaat. Ik zie nergens een instance van TForm2 dat Form2 noemt.

https://fgheysels.github.io/


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18:51
Ik heb em nu helemaal werkend. Toch maar de basis van Dennisblabla gebruikt.

Hieronder m'n code: (voor anderen ... wie weet)
Ja, mensen, als men hiernaartoe verwijst, had de search maar gebruikt.
code:
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
program TWorld;

uses
  Forms,Windows, Messages, SysUtils, Classes, Graphics, Controls, Dialogs,
  ComCtrls, StdCtrls, ExtCtrls,
  ToDworld in 'ToDworld.pas' {Form1},
  TWImage in 'TWImage.pas' {Form2};

{$R *.RES}

begin
  Form2 := TForm2.Create(Application);
  Form2.Show;
  Application.Initialize;
  Form2.Update;
  Form2.ProgressBar1.StepBy(25);
  Sleep(500);
  Form2.ProgressBar1.StepBy(25);
  Application.CreateForm(TForm1, Form1);
  Sleep(100);
  Form2.ProgressBar1.StepBy(25);
  Sleep(800);
  Form2.ProgressBar1.StepBy(25);
  Sleep(200);
  Form2.Hide;
  Form2.Free;
  Application.Run;
end.

Verwijderd

Op dinsdag 12 februari 2002 20:07 schreef Cheater het volgende:
... van Dennisblabla ...
Let ik ff niet op, wordt gelijk m'n nick misbruikt.... :'(

Verwijderd

Op dinsdag 12 februari 2002 19:18 schreef Cheater het volgende:
Jullie gebruiken een SLEEP commando in een .DPR bestand. En dat mag niet. Of heb ik dit verkeerd?
Een .dpr bestand is gewoon een .pas file, en daar kun je dus alles gebruiken wat je aan Object Pascal kwijt wilt.
Voor kleinere console applicaties (text only, niks GUI) is 't wel gebruikelijk om het hele programma in dat ene .dpr bestand te zetten...

en wat Whoami zei:
Tuurlijk, je closed een form dat niet bestaat. Ik zie nergens een instance van TForm2 dat Form2 noemt.
Is ietsje meer dan een heel klein beetje belangrijk.
Wanneer je in de IDE een new form aanmaakt dat niet automatisch moet worden gecreeerd bij het starten van je applicatie, haal dan direct de regel
code:
1
2
var
  FormBlaBla: TFormBlaBla;

weg uit 't interface gedeelte van die unit!!!
Delphi zet die er "voor 't gemak" zelf in, maar in 9 van de 10 gevallen wil je die globale variabele helemaal niet, en je voorkomt de problemen waar jij tegenop liep.
Pagina: 1