Gå til innhold

Anbefalte innlegg

Yoo...

Har mekka til en splash screen....

men på den skal det være en progress bar...

splashen varer i 3 sekunder... derfor må progressen våre på 100% når den er ferdig....hehe... *logisk*

hvordan gjør jeg dette? har satt inn et timer komponent og en progress bar!

hva er resten av "formelen"?

Lenke til kommentar
Videoannonse
Annonse

Hvis du vil ha en progressbar som viser hvor lenge splashen skal vises, 0%-100%, kan du f.eks bruke en Ttimer.

 

Der 3 000 millisekunder (3 sekunder) skal ha 100 poster, dvs 30 millisekunder per prosent.

 

Sett en timer1 enabled = false, interval = 30

Progressbar1.position = 0

 

(designtime)

 

 

fra splashscreen viser, f.eks formens on show, kan du ha koden:

 




If progressbar1.position < 100 then begin



progressbar1.position := progressbar1.position + 1; 



end

else



timer1.enabled := false;



// nå er baren 100% - ergo splash er ferdig. 



 

 

Håper det hjalp

 

mvh Sean S.

Lenke til kommentar

Det funka ikke...

skreiv inn dette i TTimer komponentet... og prøvekjørte...

Det skjedde ingenting!


procedure TForm4.Timer1Timer(Sender: TObject);

begin

If progressbar1.position < 100 then begin



progressbar1.position := progressbar1.position + 1;



end

else



timer1.enabled := false;



end;



end.

hva er galt?

Lenke til kommentar

Nei nei NEI!!

 

Du skal ikke endre den opprinnelige koden jeg ga deg.

 

Men for at Timer1 skal gjøre sin jobb, må du enable den først, men ikke i designtime, du må sette timer1.enabled := true når du vil at progressbar skal begynne.

Lenke til kommentar

Greit, det skal jeg gjøre.

 

Lag en splashform, på formens onshow, legger du til :

 


timer1.enabled;

 

så tar du å gjør det jeg sa aller først:

 

klikk på Ttimer1, så tar du i objectinspektoren (den til venstre med alle de fine knappene), og setter enabled til false.

Så skriver du inn 30 som interval (det vil nok stå 1000 der som default).

Så gjør du sikker på at progressbaren du bruker er på position 0.

 

etter det tar du å endrer om Ttimer1 sin ontimer til:

 


procedure TForm4.Timer1Timer(Sender: TObject);

begin

If progressbar1.position < 100 then begin



progressbar1.position := progressbar1.position + 1;



end

else



timer1.enabled := false;



end;



end.



Lenke til kommentar

nå skal jeg bare paste inn hele uniten til splash formen... sånn at du kan sjekke hva som er galt for meg!


unit splash;



interface



uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, ExtCtrls, StdCtrls, ComCtrls;



type

 TForm4 = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   GroupBox1: TGroupBox;

   ProgressBar1: TProgressBar;

   Timer1: TTimer;

   procedure Timer1Timer(Sender: TObject);

   procedure FormShow(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;



var

 Form4: TForm4;



implementation



{$R *.dfm}



procedure TForm4.Timer1Timer(Sender: TObject);

begin

If progressbar1.position < 100 then begin



progressbar1.position := progressbar1.position + 1;



end

else



timer1.enabled := false;



end;



procedure TForm4.FormShow(Sender: TObject);

begin

timer1.enabled := true;

end;



end.

kommer ikke noen feilmelding eller no... men det skjer bare ikke noe i progressbaren!

Lenke til kommentar
Superchez, dessverre så må du nok innrømme at invictus har rett her. Timer1.Enabled er eit boolsk uttrykk, Timer1.Enabled := True setter timeren igang.

 

Kilogram, jeg vet at det er boolsk uttrykk, men timer1.enabled := false skal settes i koden jeg ga, når timer1'en ikke lenger trenger å gjøre sin jobb.

Det betyr at når progressbar1.position = 100, kan timer1 disables.

 

Ergo, timer1.enabled := false skal fortsatt stå i program kode jeg ga.

 

Jeg kan ikke innrømme at inviticus har rett fordi hans setning sier dessverre burner89 svært litt, hvis du tar i betrakning at han er ganske grønn i språket.

 

Burner89, jeg må nesten ha all programkode for å finne ut hva du har gjort galt, men beklager det har jeg dessverre ikke tid til.

 

Lykke til videre! Du finner sikkert ut av det (Det er hvis du smører deg med tålmodighet).

 

Du kan jo spørre noen andre, eventuelt søke etter lignende på www.google.com ; det er sikkert noe andre som har hatt det samme spørsmålet før :)

Lenke til kommentar

vel jeg bare synes det virker logisk at hvis du bruker timer1.enabled := false; for å stoppe timern, at timer1.enabled := true; virker for å starte den (spesielt ettersom han fikk feilmelding på linjen du ga han). Dette går litt på generell/logisk syntax synes jeg og ikke bare ren delphi.

 

Jeg er ikke "grønn" i språket som du påstår superchez, jeg har programmert litt i delphi, men er ikke særlig god. I denne sammenhengen skrev jeg et svar som virka mest logisk i håp om at brukeren får ting til å virke. Hvis det virker så virker det, og hvis det ikke virker så var det verdt forsøket. Ikke noen vits å lynje meg av den grunn :-?

 

Hvis det du skulle frem til var at du kunne mer delphi enn meg (noe som det kunne virke som) så må jeg nok innrømme dette :lol:

 

EDIT:

tror kanskje du misforstod hva jeg foreslo superchez... jeg refererte til følgende:

Greit, det skal jeg gjøre.

 

Lag en splashform, på formens onshow, legger du til :

 


timer1.enabled;

 

IKKE at han skulle endre timer1.enabled := false; til timer1.enabled := true; slik som det kanskje kunne virke.

Lenke til kommentar

Nå har jeg fått det til delvis...


procedure TForm4.FormShow(Sender: TObject);

begin

timer1.enabled := true;

If progressbar1.position < 100 then begin



progressbar1.position := progressbar1.position + 100;



end

else



timer1.enabled := false;



end;

nå er det sånn at med en gang splash formen starte, er den på 100%

Det var ikke poenget! Den skal gå fra 0% til 100% på 3 sekunder!

Noen forslag? :woot:

Lenke til kommentar
Nå har jeg fått det til delvis...


procedure TForm4.FormShow(Sender: TObject);

begin

 timer1.enabled := true;

 timer1.interval := 30; // 3000 ms / 100 iterasjonar = 30 ms/iterasjon

end;



procedure TForm4.Timer1Timer(Sender: TObject);

begin

 If progressbar1.position < 100 then

   progressbar1.StepIt

 else

 begin  

   timer1.enabled := false;

   Form4.Hide;

 end;

end;

 

Prøv om dette virkar. Det skal virke.

Lenke til kommentar

Det kom noen feil når jeg gjorde d!

 

[Fatal Error] mp3playa2.dpr(8): Could not compile used unit 'splash.pas'

[Error] splash.pas(20): Unsatisfied forward or external declaration: 'TForm4.FormCreate'

[Error] splash.pas(46): Undeclared identifier: 'timer1'

[Error] splash.pas(42): 'THEN' expected but identifier 'position' found

[Error] splash.pas(42): Undeclared identifier: 'progressbar1'

[Error] splash.pas(40): ';' expected but '(' found

[Error] splash.pas(40): Undeclared identifier: 'Timer1Timer'

 

Kan jo bare paste hele unit'en her... Sånn at du (om du gidder) kan sjekke hva som er galt!


unit splash;



interface



uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, ExtCtrls, StdCtrls, ComCtrls;



type

 TForm4 = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   GroupBox1: TGroupBox;

   ProgressBar1: TProgressBar;

   Timer1: TTimer;

   procedure FormShow(Sender: TObject);

   procedure FormCreate(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;



var

 Form4: TForm4;



implementation



{$R *.dfm}



procedure TForm4.FormShow(Sender: TObject); 

begin 

 timer1.enabled := true; 

 timer1.interval := 30; // 3000 ms / 100 iterasjonar = 30 ms/iterasjon 

end; 



procedure TForm4.Timer1Timer(Sender: TObject);

begin 

 If progressbar1.position < 100 then 

   progressbar1.StepIt 

 else 

 begin  

   timer1.enabled := false; 

   Form4.Hide; 

 end;

end; 

end.

:shrug:

Lenke til kommentar
Det kom noen feil når jeg gjorde d!

 

Fikset kode:


unit splash;



interface



uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, ExtCtrls, StdCtrls, ComCtrls;



type

 TForm4 = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   GroupBox1: TGroupBox;

   ProgressBar1: TProgressBar;

   Timer1: TTimer;

   procedure FormShow(Sender: TObject);

   procedure Timer1Timer(Sender: TObject); // ENDRA!!

 private

   { Private declarations }

 public

   { Public declarations }

 end;



var

 Form4: TForm4;



implementation



{$R *.dfm}



procedure TForm4.FormShow(Sender: TObject); 

begin 

 timer1.enabled := true; 

 timer1.interval := 30; // 3000 ms / 100 iterasjonar = 30 ms/iterasjon 

end; 



procedure TForm4.Timer1Timer(Sender: TObject);

begin 

 If progressbar1.position < 100 then 

   progressbar1.StepIt 

 else 

 begin  

   timer1.enabled := false; 

   Form4.Hide; 

 end;

end; 



end.

 

Du kan ikkje berre paste inn kode kvar som helst. Du må deklarere funksjonar, og det gjer Delphi automatisk for deg når du legg dei inn på rett måte. No er du nødt til å sette OnTimer-eventen til Timer1 til Timer1Timer. Då vil det virke 100% bra.

 

mvh.,

Vegard

Lenke til kommentar

Sorry... Men jeg er helt grønn ass!

Nå gikk det heller ikke....

Jeg tok all den koden du skreiv å satt den inn istedenfor den som var der...

bare at jeg fjerna bold greine du satt inn ...

Hva har jeg gjort feil nå?


unit splash; 



interface 



uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 

 Dialogs, ExtCtrls, StdCtrls, ComCtrls; 



type 

 TForm4 = class(TForm)

   Label1: TLabel; 

   Label2: TLabel; 

   Label3: TLabel; 

   Label4: TLabel; 

   Label5: TLabel;

   GroupBox1: TGroupBox; 

   ProgressBar1: TProgressBar; 

   Timer1: TTimer; 

   procedure FormShow(Sender: TObject); 

   procedure Timer1Timer(Sender: TObject);

 private 

   { Private declarations } 

 public 

   { Public declarations }

 end; 



var 

 Form4: TForm4;



implementation 



{$R *.dfm}



procedure TForm4.FormShow(Sender: TObject); 

begin

 timer1.enabled := true; 

 timer1.interval := 30; // 3000 ms / 100 iterasjonar = 30 ms/iterasjon

end; 



procedure TForm4.Timer1Timer(Sender: TObject);

begin

 If progressbar1.position < 100 then

   progressbar1.StepIt

 else

 begin

   timer1.enabled := false;

   Form4.Hide;

 end;

end; 



end.

Takk for all tålmodighet!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...