/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Aflevere en værdi til en anden procedure ?
Fra : -= Texas =-


Dato : 15-10-01 17:00

Jeg sidder og leger med en timer og en progressbar. Jeg er ved at lave en
progressbar som skal tælle op til 100% efter x antal sekunder. Her er x =
Op.
Jeg ved godt det kan laves nemmere, men jeg vil lave det sådan at i den
ene procedure skriver man antal sekunder i en editbox. Når man så trykker
på en knap bliver de overført til en timer-procedure som så begynder at
tælle progressbar'en op. Men jeg kan ikke finde ud af hvordan jeg aflevere
variablen Op til timer-proceduren.



Her er et lille udklip af de 2 procedure det drejer sig om.


procedure TProgressBarForm.btnSekunderClick(Sender: TObject);

Op := StrToInt(edtSekunder.text);
Timer1Timer(op); // DETTE ER MIT FORSLAG, MEN DET VIRKER IKKE.


procedure TProgressBarForm.Timer1Timer(Sender: TObject);
begin
ProgressBar.Position := ProgressBar.Position + (100 div Op);
end;



 
 
Thomas Rose (15-10-2001)
Kommentar
Fra : Thomas Rose


Dato : 15-10-01 17:29

Hej Texas,

"-= Texas =-" <boxjunk2600@hotmail.com> wrote in message
news:9qf104$274n$1@news.cybercity.dk...
> procedure TProgressBarForm.btnSekunderClick(Sender: TObject);
>
> Op := StrToInt(edtSekunder.text);
> Timer1Timer(op); // DETTE ER MIT FORSLAG, MEN DET VIRKER IKKE.
>
>
> procedure TProgressBarForm.Timer1Timer(Sender: TObject);
> begin
> ProgressBar.Position := ProgressBar.Position + (100 div Op);
> end;

Som det fremgår af Timer1Timer-proceduren tager den en parameter af typen
TObject (altså en reference til et objekt), hvorimod du forsøger at overføre
en heltals-værdi vha. denne parameter... og det dutter ikke. Du kan derimod
f.eks. benytte en variabel på din TProgressBarForm, som du anvender til at
overføre værdien...

procedure TProgressBarForm.btnSekunderClick(Sender: TObject);

FAntalSekunder := StrToInt(edtSekunder.text);
Timer1Timer(nil);

procedure TProgressBarForm.Timer1Timer(Sender: TObject);
begin
ProgressBar.Position := ProgressBar.Position + (100 div FAntalSekunder);
end;

som du kan se har jeg lavet to rettelser... dels at antallet af sekunder
gemmes i en "tænkt" variabel på formen kaldt FAntalSekunder, og at kaldet
til Timer1Timer nu overfører parametren "nil" (der er en særlig type
objekt-reference).

Cheers,
Thomas




-= Texas =- (15-10-2001)
Kommentar
Fra : -= Texas =-


Dato : 15-10-01 21:06

Takker for hjælpen. Den vil jeg lige kigge nærmere på.



-= Texas =- (15-10-2001)
Kommentar
Fra : -= Texas =-


Dato : 15-10-01 21:29


"Thomas Rose" <trose@get2net.dk> wrote in message
news:3bcb0ecb$0$279$edfadb0f@dspool01.news.tele.dk...



> FAntalSekunder := StrToInt(edtSekunder.text);
> Timer1Timer(nil);

> som du kan se har jeg lavet to rettelser... dels at antallet af sekunder
> gemmes i en "tænkt" variabel på formen kaldt FAntalSekunder, og at kaldet
> til Timer1Timer nu overfører parametren "nil" (der er en særlig type
> objekt-reference).
>
> Cheers,
> Thomas


Sørme om det ikke virkede, tak for hjælpen. Men hvordan ved programmet at
det
lige præcis er FAntalSekunder som det skal overføre og ikke en anden
variable ?
Jeg tænker på hvis programmet feks så sådan ud -

FAntalMinutter := StrToInt(edtMinutter.text);
FAntalTimer := StrToInt(edtTimer.text);
FAntalSekunder := StrToInt(edtSekunder.text);
Timer1Timer(nil);



Thomas Rose (15-10-2001)
Kommentar
Fra : Thomas Rose


Dato : 15-10-01 22:14

Hej igen,

"-= Texas =-" <boxjunk2600@hotmail.com> wrote in message
news:9qfgp1$2vdn$1@news.cybercity.dk...
> Sørme om det ikke virkede, tak for hjælpen. Men hvordan ved programmet at
> det
> lige præcis er FAntalSekunder som det skal overføre og ikke en anden
> variable ?
> Jeg tænker på hvis programmet feks så sådan ud -
>
> FAntalMinutter := StrToInt(edtMinutter.text);
> FAntalTimer := StrToInt(edtTimer.text);
> FAntalSekunder := StrToInt(edtSekunder.text);
> Timer1Timer(nil);
>

Så skal du kigge på Timer1Timer-proceduren, da denne herefter _anvender_ de
tre værdier (FAntalSekunder, osv.)... husk på, at de er variable på formen,
og da pegge dine procedurer "ejes" af formen, har de adgang til disse
variable... dvs. de overføres ikke rigtigt, de er bare tilgængelige for alle
procedurer og funktioner på formen. Men for at vende tilbage til dit
spørgsmål... i mit tidligere svar skrev jeg i Timer1Timer-proceduren:

procedure TProgressBarForm.Timer1Timer(Sender: TObject);
begin
ProgressBar.Position := ProgressBar.Position + (100 div FAntalSekunder);
end;

hvori FAntalSekunder indgår... her kan du altså også bruge FAntalTimer og
FAntalMinutter i din beregning.

Cheers,
Thomas



Casper A. Hansen (17-10-2001)
Kommentar
Fra : Casper A. Hansen


Dato : 17-10-01 15:21

"Thomas Rose" <trose@get2net.dk> wrote in message news:<3bcb51a9$0$51421$edfadb0f@dspool01.news.tele.dk>...
> Hej igen,
>
> "-= Texas =-" <boxjunk2600@hotmail.com> wrote in message
> news:9qfgp1$2vdn$1@news.cybercity.dk...
> > Sørme om det ikke virkede, tak for hjælpen. Men hvordan ved programmet at
> > det
> > lige præcis er FAntalSekunder som det skal overføre og ikke en anden
> > variable ?
> > Jeg tænker på hvis programmet feks så sådan ud -
> >
> > FAntalMinutter := StrToInt(edtMinutter.text);
> > FAntalTimer := StrToInt(edtTimer.text);
> > FAntalSekunder := StrToInt(edtSekunder.text);
Tjae, ProcessBar.Position er en integer, så den rør sig ikke ud af
flækken hvis tidstagningen er over 100 sekunder. Jeg anbefaler at du
bruger en TDateTime til din beregning, det bliver langt mere nøjagtigt
(og nemmere)

Eks.:
type
TProgressBarForm = class(TForm)
Timer1 : TTimer;
edtTimer : TEdit;
edtMinuter : TEdit;
edtSekunder : TEdit;
...
procedure Timer1Timer(Sender : TObject);
...
private
procedure SetTimer;
end;

procedure TProgressBarForm.SetTimer;
begin
FAntalTid := EncodeTime(
StrToInt(edtTimer.text),
StrToInt(edtMinuter.text),
StrToInt(edtSekunder.text), 0);
FTidStartet := Now;
Timer1.Timer := 1000; // Opdater hvert sekund.
end;

procedure TProgressBarForm.Timer1Timer(Sender: TObject);
var
wTidGaaet : TDateTime;
begin
if FTidStartet = 0 then begin
// Start tid er ikke initialiseret, endnu.
ProcessBar.Position := 0;
end else begin
wTidGaaet := Now - FTidStartet;
if (wTidGaaet > 0) then begin
if wTidGaaet < FAntalTid then begin
// Opdater progress bar efter hvor lang tid der er gået.
ProgressBar.Position := Trunc(FAntalTid * 100 / wTidGaaet);
end else begin
// Timeglasset er løbet ud.
ProgressBar.Position := 100;
Beep;
end;
end else begin
// Det er under 10 ms siden at start-tiden er blevet sat.
ProcessBar.Position := 0;
end;
end;
end;

/Casper

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste