Avatar billede alex253 Nybegynder
10. marts 2005 - 17:40 Der er 5 kommentarer og
1 løsning

Hvordan laver man en nedtælning?

Hej.

Jeg vil gerne lave et program der tæller ned med timer, minutter og sekunder fra en bestemt dato, timer, minutter og sekunder.

Nogen der kan hjælpe. Jeg ved ikke hvor meget spg'et er værd, men jeg sætter den til Medium.

MVH Alex
Avatar billede martinlind Nybegynder
10. marts 2005 - 18:37 #1
uses
  DateUtils;

VAR
  MyTid, T : TDateTime;

begin
  MyTid := Now;
  T := IncHour(MyTid,-2);
  while MyTid > T do MyTid := IncSec(MyTid,-1);
end;
10. marts 2005 - 19:34 #2
Sæt en edit (Edit1) på til den dato der skal tælles ned til.
Sæt en edit (Edit2) på til det klokkeslet der skal tælles ned til.
Sæt en CheckBox på, hvor du kan slå tælle funktionen til og fra.
Tælle funktionen skal slåes fra når der indtastes dato og tidspunket.
Sæt en timer på, med 'Enabled sat til false', og 'Interval sat til 1000'.

Lav følgende rutine til checkbox'ens OnClick event:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  Timer1.Enabled := CheckBox1.Checked;
end;

Lav følgende til timerens OnTimer event:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Remain: TDateTime;
begin
  Remain := (StrToDate(Edit1.Text) + StrToTime(Edit2.Text)) - Now;
  Label1.Caption := DateTimeToStr(Remain);
end;

Sæt programmet igang, og indtast dato og klokkeslet, og start tællere ved at sætte kryds i checkboxen.

Bemærk der er ingen fejl korigering i dette eksempel.
Du kan evt. bruge MaskEdit i stedet for Edit.
Du kan også putte timeren ind i en try/except.
10. marts 2005 - 19:41 #3
Hov der er en lille fejl i linien: Label1.Caption := DateTimeToStr(Remain);
Fordi Dato 0 (Nul) det er jo lig med '01-01-1900', så der skal fifles lidt med den tekst der kommer ud af 'DateTimeToStr(Remain)' så der trækkes 1900 fra årstallet, og 1 fra både dato og måned.
10. marts 2005 - 20:04 #4
OnTimer eventen skal se sådan ud:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Dato: TDateTime;
  Dage: String;
begin
  Dato := StrToDate(Edit1.Text) + StrToTime(Edit2.Text);  // Tidspunkt der skal tælles ned til.
  Dage := IntToStr(DaysBetween(Dato, Now));  // Antal hele dage.
  Label1.Caption := Dage + ' ' + TimeToStr(Dato - Now);
end;
10. marts 2005 - 20:17 #5
Nå ja, en fejl kommer sjældent alene.
Oppe under uses, skal der tilføjes 'DateUtils'.
Avatar billede alex253 Nybegynder
11. marts 2005 - 10:07 #6
Tak Anton. Det virker perfekt!
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