Avatar billede danielks Nybegynder
07. november 2002 - 22:42 Der er 11 kommentarer og
1 løsning

count down

jeg har en timer der bliver sat efter en textboks til f.eks 60000...

Denne tid skal laves om til timer,minutter,sekunder og vises som en count down.. sådan at tallet falder i takt med at timeren tæller opad...
Avatar billede hermandsen Juniormester
08. november 2002 - 07:37 #1
private
  Tid, Forskel: Cardinal;

procedure TForm1.ButtonStartClick(Sender: TObejct);
begin
  Timer1.Interval := 1000;
  Tid := Cardinal;
  Forskel := StrToInt(EditTid.Text);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  C: Cardinal;
begin
  C := GetTickCount - Tid;
  if C >= Forskel then
  begin
    ShowMessage('Tiden er gået!');
    Timer1.Enabled := False;
  end
  else
  begin
    Caption := Format('%d dage %d timer %d minutter %d sekunder %d milisekunder',
    [C div (1000*60*60*24), C div (1000*60*60) mod 24, (C div (1000*60)) mod 60, (C div 1000) mod 60, C mod 1000]);
  end;
end;

//hermandsen
Avatar billede hermandsen Juniormester
08. november 2002 - 07:40 #2
Okay... Rettelser! :)

Tid := Cardinal; skal være: Tid := GetTickCount;

Du bør nok også lige smide Timer1.Enabled := True; ind under ButtonStartClick-proceduren! ;)

Hvis du synes at der er for mange ting i tid-tilbage-strengen, så fjerner du bare dem du ikke skal bruge! ;)
Avatar billede danielks Nybegynder
14. november 2002 - 17:25 #3
hvorfor kan jeg ikke skrive:

Forskel := StrToInt(xit.Timer.Interval);
Avatar billede danielks Nybegynder
14. november 2002 - 17:28 #4
og er Timer1Timer den timer der allerede tæller ned ?
Avatar billede danielks Nybegynder
14. november 2002 - 17:34 #5
til

Forskel := StrToInt(xit.Timer.Interval);

skriver den Incompatible types "String and Cardinal"

Jeg er nybegynder... Hvad betyder Integer, String, Boolean og Cardinal
Avatar billede danielks Nybegynder
14. november 2002 - 19:47 #6
Det virker næsten nu... legede lige lidt...

procedure Txit.TimerTimer(Sender: TObject);
var
  C: Cardinal;
begin
  C := GetTickCount - Tid;
  if C >= Forskel then
  begin
    timer.Enabled := False;
    ShowMessage('Tiden er gået!');
  end
  else
  begin
    xit.lbl.caption := Format('%d dage %d timer %d minutter %d sekunder %d milisekunder',
    [C div (1000*60*60*24), C div (1000*60*60) mod 24, (C div (1000*60)) mod 60, (C div 1000) mod 60, C mod 1000]);
  end;

end;

Den besked med tiden er gået virker, men er egentlig ubrugelig for mit vedkommende, det jeg ikke forstår er hvorfor jeg ikke får min caption til at blive noget...
Avatar billede hermandsen Juniormester
15. november 2002 - 08:33 #7
Okay, en kort forklaring...

En Cardinal, Integer, Byte, Boolean, Char osv. er det man kalder en ordinal. Det vil sige at det er en type som har en mindste værdi, en højeste værdi og af og til en mellem værdi, enten i heltal, bogstaver eller en selvdefineret type.

En Cardinal er en 4-bytes variabel som kan indeholde tal fra 0 til 2^32 -1. En Integer har samme størrelse som Cardinal'en, men indeholder tal fra -2^31 til 2^31 -1.
En Byte fylder sjovt nok, en byte, og kan indeholde tal fra 0 til 255.
Boolean'en fylder en byte, men kan kun antage værdierne True og False.

Der er flere, men hvis du vil lære dem alle at kende bør du anskaffe dig en bog. Per Amdal Steffensen's Delphi 4 Programmering kan anbefales!

GetTickCount er en funktion i Windows som tæller antallet af milisekunder som systemet har kørt siden sidste genstart. Den holder vist omkring 43 dage eller noget (du kan selv regne ud hvor længe).

Er du forresten sikker på at din Timer kører?
Fra programmet bør den have Enabled-værdien False (det er en Boolean). Når du så ønsker at starte den sætter du bare værdien til True og så kører det! ;)

Skriv hvis der er mere, ellers vil jeg anbefale dig at læse en bog! ;)

//hermandsen
Avatar billede danielks Nybegynder
15. november 2002 - 09:26 #8
Ja den er False fra starten af, og bliver TRUE når man trykker på start knappen

Jeg har stadig problemet forklaret i:

Kommentar: danielks 14/11-2002 19:47:50
Avatar billede hermandsen Juniormester
15. november 2002 - 11:23 #9
Hvor lang tid går der gør sin siger "Tiden er gået!"?
Avatar billede danielks Nybegynder
15. november 2002 - 11:27 #10
Der går det tid jeg indstiller timeren til, så den del passer...
Avatar billede hermandsen Juniormester
15. november 2002 - 12:18 #11
Hehe... Nej, den del passer nemlig ikke...

En Timer er en komponent der udfører en handling når Interval er løbet ud... Altså i det her tilfælde, efter 1000 milisekunder...

Når Interval er løbet ud vil Timer'en udføre OnTimer-eventen...

Prøv at sætte Forskel til 10000, så sker der noget efter 10 sekunder! ;)

Så kan du egentlig også sætte Timer1.Interval til hvad du vil...
Avatar billede danielks Nybegynder
25. november 2002 - 20:43 #12
Jeg kan ikke få det til at virke men du hjælper mig med meget :)
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