Avatar billede kipolaks Nybegynder
18. juni 2002 - 01:47 Der er 9 kommentarer og
1 løsning

HASTER!! SplashScreen

½øjsa

jeg går lige til sagen:
jeg har to forme: form1, form2
lad os sige at form2 er min splashscreen.

nu er problemet så at jeg gerne vil have form2 til at blive vist med det samme når man starter programmet.
imens form2 står på skærmen skal form1 så blive loadet og når den er færdig så blive vist(og form2 lukker).
Avatar billede hermandsen Juniormester
18. juni 2002 - 02:10 #1
I Delphi vælger du:

Project->Options...->Forms og sætter din Form2 over til Available forms ved at vælge den og trykke på ">".

Så skal du skrive noget kode:

Project1.dpr

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.RES}

begin
  Application.Initialize;
  Form2 := TForm2.Create(NIL);
  Form2.Show;
  Form2.Repaint;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Fordi du lavede din form avalible, så bliver den ikke automatisk fjernet fra hukommelsen, derfor insætter du lige følgende kode i din Form1's OnShow-event:

procedure TForm1.FormShow(Sender: TObject);
begin
  SplashForm.Free;
end;

Det er lang tid siden jeg har lavet en SpalshScreen, men det var lige hvad jeg kunne finde af gamle eksemlper! :)

//hermandsen
Avatar billede kipolaks Nybegynder
18. juni 2002 - 02:24 #2
jeg får en fejl ved: Form2 := TForm2.Create(NIL);
Avatar billede hermandsen Juniormester
18. juni 2002 - 02:26 #3
Hvilken fejl? Sikker på at den hedder de rigtige navne? Har du fjernet den fra Auto-create-forms?
Avatar billede kipolaks Nybegynder
18. juni 2002 - 02:29 #4
den hedder form2 og står under "available"

her er koden:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {MainForm},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Form2 := TForm2.Create(NIL);  //<<<FEJL
  Form2.Show;
  Form2.Repaint;
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;


end.
Avatar billede hermandsen Juniormester
18. juni 2002 - 02:38 #5
Hmm... Det virker sådan set fint ved mig...

Her er det hele:


Project1.dpr:
-----------------
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.RES}

begin
  Application.Initialize;
  Form2 := TForm2.Create(nil);
  Form2.Show;
  Form2.Repaint;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Unit2.pas
------------
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm2 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

end.

Unit1.pas
------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.FormShow(Sender: TObject);
begin
  Form2.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Sleep(1000);
end;

end.
Avatar billede hermandsen Juniormester
18. juni 2002 - 02:49 #6
Får du det til at virke? :)
Avatar billede kipolaks Nybegynder
18. juni 2002 - 02:58 #7
hmmm mærkeligt, det vil ikke virke i det project hvor det skal være men jeg kan godt lave et nyt hvor det virker fint.... du skulle tilfældigvis ikke kende en smart fidus eller noget, den melder en fejl: acces violation at addres: blablabla
Avatar billede hermandsen Juniormester
18. juni 2002 - 03:07 #8
Kunne være noget på din form2 der bliver created og så laver fejl... Eller det kunne være en referance fra din form2 til din form1. Husk på at form1 endnu ikke er oprettet så hvis du bruger noget fra form1 i form2, så skal du flytte det et andet sted hen...

Hmmm, okay... Det var vist lidt forvirende!!! :)

Prøv evt at fjerne form2-koden i project1.dpr og smid din ind i buttonClick-event:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(Self);
  Form2.ShowModal;
end;

Ved form2 skal du så lave følgende:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

Jeg er ikke 100% sikker på at procedure-deklerationen er rigtig, men du skal bare skrive "Action := caFree" i Form2's OnCloseEvent... ;)
Avatar billede kipolaks Nybegynder
18. juni 2002 - 03:26 #9
nu fjernede jeg form2 og lavede en ny sååååååå....NU VIRKER DET!!!
Mange tak!! endnu en gang, du har sq svaret på mange af mine spm (måske fordi det altid er om natten jeg stiller dem) HURRA for nattemennesker!
Avatar billede hermandsen Juniormester
18. juni 2002 - 03:30 #10
Hehe... Anytime my friend! ;)

Skulle faktisk lige til at skrive at jeg ville til at i seng, så du skulle til at skynde dig hvis der var andet, men det blev heldigvis ikke nødvendigt! ;)

Nat nat!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester