Avatar billede lolle Nybegynder
03. august 2000 - 13:00 Der er 14 kommentarer og
1 løsning

Timer, nedtælling og stopur ?

Hej !

Hvordan kan man lave en Timer som Bipper når kl er x som man har sat den til ???

Hvordan kan man lave et StopUr ?

Hvordan kan man lave en Nedtælling som bipper når den har talt ned ?

Jeg har i link til eks. som jeg laver lige de ting som jeg vil ha !

http://home12.inet.tele.dk/ka_ab/aatimer1.zip

Hvis der er nogen som vil lave et sådan en ting til mig med kode så får du 250 point !

altså en klon af den på det link som er med !
Avatar billede pellelil Nybegynder
03. august 2000 - 13:45 #1
>Hvordan kan man lave en timer som Bipper...
Du kan bruge en TTimer hvis \"Interval\" er sat til 1000, således vil dens \"OnTimer\" blive kaldt et gang i sekundet. I denne \"OnTimer\" checker du således på at klokken er blevet det den skal være (kig evt i hjælpen efter NOW)

>Hordan kan man lave et StopUr.
Læs værdien \"GetTickCount\" (defineret i \"Windows.pas\" som du således skal use. Denne værdi opdateres 1000 gange i sekundet og du kan således bruge den til en timer.

Her har du en Class (TTickTimer) der indkapsler en \"timer\" du kan bruge. Denne timer kan ikke sammenligned med TTimer (som er visuel). Denne TTickTimer er beregnet på at blive brugt internt i applicationen og kan således \"måle hvor lang tid der er gået\" enten som Ticks (1000. dele sekunder) eller hele sekunder:
<SNIP>
  TTickTimer = Class
  private
    FActive : Boolean;
    FTicks  : LongInt;
  protected
    Function GetElapsedTicks : LongInt;
    Function GetElapsedSecs  : Float;
  public
    Constructor Create;
    Destructor  Destroy;
    Procedure  Reset;
    property Active : Boolean read FActive write FActive;
    property Ticks : LongInt read FTicks write FTicks;
    property ElapsedTicks : LongInt read GetElapsedTicks;
    property ElapsedSecs : Float read GetElapsedSecs;
  end;

Constructor TTickTimer.Create;
begin
  Inherited Create;
  Reset;
end;


Destructor  TTickTimer.Destroy;
begin
  Inherited Destroy;
end;


Function    TTickTimer.GetElapsedTicks : LongInt;
begin
  Result := Abs(GetTickCount - FTicks);
end;


Function    TTickTimer.GetElapsedSecs  : Float;
begin
  Result := Abs(GetTickCount - FTicks) / 1000.0;
end;


Procedure  TTickTimer.Reset;
begin
  FTicks := GetTickCount;
end;


Procedure  TTickTimer.SleepedTicks(iTicks : Integer);
begin
  FTicks := FTicks + iTicks;
end;
</SNIP>

>Hvordan kan man lave en Nedtælling som bipper når den har talt ned ?

Du kan bruge en TTickTimer til at holde styr på hvor lang tid der er gået og du kan således (evt.) bruge en TTimer som en gang i sekundet checker på om ElapsedSecs har \"opnået\" den tid du vil vente (selvfølgelig kan du også bare bruge en TTimer).

Avatar billede pellelil Nybegynder
03. august 2000 - 13:58 #2
Det skal lige siges at jeg Definere \"Float\" som en \"Extended\" så for at du kan compilere ovenståend skal du enten \"definere\" en Float eller også skal du erstatte \"Float\" med \"Extended\" (eller \"Double\" eller \"Single\"). Lige et kort eksempel på brugen af TTickTimer:

Hvis du eksempelvis vil bruge den til at se hvor langtid dín PC er om en eller anden opgave kan du gøre som flg.

<SNIP>
var
  Timer : TTickTimer;
begin
  Timer := TTickTimer.Create;
  Timer.Reset;  // \"Nulstiller\" FTick ved læse \"nuværende\" GetTickCount
  // Her placere du så den kode, som du vil \"måle\" hvor lang tid
  // tager at udføre
  TLabel1.Caption := \'Det tog \' + FloatToStr(TTimer.ElapsedSecs) + \' sekunder\';
  Timer.Free;
end;
</SNIP>

Hvis du vil bruge den som et stop ur, så kan du lade din form have en variable af typen Timer du definere blot variablen direkte i sourcen (Timer : TTickTimer;), og så kan du evt. i formens OnCreate allokere den (\"Timer := TTickTimer.Create;\").

Som nævnt tidligere kan du bruge en \"almindelig\" timer\'s (OnTimer) event til at se hvor lang tid der er gået (sæt evt. dennes \"Interval\" til 100 således at du kan opdatere skærmen 10 gange/sekund).

<SNIP>
procedure TForm1.TestTimerTimer(Sender: TObject);
begin
  TLabel1.Caption := \'Tid:\' + FloatToStr(TTimer.ElapsedSecs);
  if TTimer.ElapsedSecs > 60 then begin
    // gør et eller andet når der er gået et minut
  end;
end;
<SNIP>
Avatar billede martinlind Nybegynder
03. august 2000 - 15:55 #3
Hvis du er til det lidt mere langhårede kan du også bruge pc\'ens Ur den har alarm indbygget og bruger IKKE CPU-tid.
Avatar billede pellelil Nybegynder
03. august 2000 - 15:58 #4
TTickTimern bruger ingen CPU tid, det er \"koster CPU tid\" er når man skal checke hvorlang tid der er gået
Avatar billede lolle Nybegynder
03. august 2000 - 16:01 #5
martinlind > Nej jeg kan ikke bruge det.

pellelil > Kan du ikke lave et eks. eller en klon af den som er her ???
http://home12.inet.tele.dk/ka_ab/aatimer1.zip

Der behøves ikke være det der med Font Størrelse og Menu\'en !
Avatar billede borrisholt Novice
03. august 2000 - 16:21 #6
Hej lolle

Send en e-mail til Jens@Borrisholt.com så skal jeg sende dig kilde koden! Jeg har ikke den orginale kilde kode, men jeg har lavet Reverse engineering på den.

Jens B
Avatar billede lolle Nybegynder
04. august 2000 - 02:13 #7
Jens -> Jeg kan ikke sende email til dig Jens !

Jeg får en mail tilbage efter et par timer hvor der står !

Titel: Warning - delayed mail

--------------------------------------------------------------------------------
---------------------------------------------------------------------

              ***************************************
              **      This is a warning only      **
              **    No action is required by you  **
              ***************************************

Re: Message to Jens@Borrisholt.com

Your message  has not  been  delivered  after  3 hours.  Attempts to
deliver your message will continue for a further  45 hours.  If it has
still not been delivered,  it will be returned to you.  The first few
lines of your message are repeated below.
Avatar billede lolle Nybegynder
04. august 2000 - 02:13 #8
Du kan bare prøve at sende til tws@jubiipost.dk
Avatar billede borrisholt Novice
04. august 2000 - 12:11 #9
nu har jeg sendt den til dig, håber du kan bruge den .. !?!?

JEns B
Avatar billede lolle Nybegynder
04. august 2000 - 15:54 #10
Jens -> Der er lige to fejl som du gerne må rette !

1). Nedtælling
Når nedtælling bipper skal den bippe indtil man afbryder !

2). Timer-Status
Når den er aktiv skal den kun bippe f.eks. 10:00:00 og ikke i alle sekunterne der er der, men den skal stadin bippe hele tiden indtil man stopper !
Avatar billede borrisholt Novice
04. august 2000 - 19:47 #11
Er hermed gjort, og sendt til dig ...

Jens B
Avatar billede lolle Nybegynder
05. august 2000 - 18:48 #12
Hej Jens !

Der kommer en fejl når man starter Timer-Status på f.eks. 1:00 og når den står til 00:00 og kl er 01:30 bipper den og det skal den jo ikke  !

Kan du ikke lige rette det ?
Avatar billede borrisholt Novice
06. august 2000 - 19:21 #13
Kærre ven

Må jeg have lov til at foreslå at du selv retter den ? Jeg lavede programmet til dig. Det tog godt en time. Jeg rettede et par små bugs, by request, det tog også tid. Ærlig talt nu synes jeg du stammer den! Hvis der er flere fejl i den så ret dem ! Selv !

Jens B

Jens B
Avatar billede lolle Nybegynder
12. august 2000 - 23:47 #14
unskyld men jeg har ikke lige været hjemme !
Avatar billede borrisholt Novice
13. august 2000 - 17:09 #15
Hvis du løber ind i et mere konkret problem så skriv endelig igen :o)
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