Avatar billede madshenrik Nybegynder
02. marts 2000 - 00:20 Der er 10 kommentarer og
2 løsninger

Stopur

ER der nogen der ligger inde med koden til et stopur. jeg kan ikke huske hvordan det skal gøres.
Avatar billede retep Nybegynder
02. marts 2000 - 00:39 #1
Jep, her har du et løsningsforslag:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    EditTid: TEdit;
    ButtonStart: TButton;
    ButtonStop: TButton;
    ButtonClear: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure ButtonStartClick(Sender: TObject);
    procedure ButtonStopClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ButtonClearClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  editTid.Text := IntToStr(StrToInt(Edittid.Text) + 1);
end;

procedure TForm1.ButtonStartClick(Sender: TObject);
begin
  timer1.Enabled := true;
end;

procedure TForm1.ButtonStopClick(Sender: TObject);
begin
  timer1.Enabled := false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  edittid.Text := '0';
  edittid.ReadOnly := True;
end;

procedure TForm1.ButtonClearClick(Sender: TObject);
begin
  edittid.Text := '0';
end;

end.


Du kan selv sætte intervallet i timerens properties.

Mvh
Retep

Avatar billede psv Nybegynder
02. marts 2000 - 08:55 #2
retep: Din løsning holder ikke (selv om du satte timerens interval til 1000=1sek som ikke kan ses af din kode...). Hvis systemet får travlt kan du ikke regne med at din timer fyrer med nøjagtigt interval. Eventen vil bare blive lagt i kø...

Anvend i stedet function GetTickCount: DWord; (Unit windows). som returnerer antallet af millisekunder siden windows blev startet

erklær variabel ATick: DWord;

på start sættes ATick := GetTickCount;

På stop sættes ATick := GetTickCount - ATick;

For nu at vise stopurett fremskridt kan du lave en timer der kører med eks 50 som interval.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  editTid.Text := FloatToStr(GetTickCount - ATick);
end;

Denne tid vil være nøjagtig;
Avatar billede madshenrik Nybegynder
02. marts 2000 - 09:41 #3
Det virker fint psv men formatet kunne være bedre hvordan angives det i eks. edittid.text
Avatar billede pellelil Nybegynder
02. marts 2000 - 10:03 #4
Nedenstående eksempel er ikke 100% men den viser alligevel hvordan du kan gøre det. Variablen "fPollElapsed" indeholder tiden i sekunder" og denne "omregnes" til timer, minutter og sekunder".

var
  iHour : Integer;
  iMin  : Integer;
  iSec  : Integer;
begin
  fPollElapsed := iValue;
  iHour  := iValue div (60*60);
  iValue := iValue - (iHour * 60 *60);
  iMin  := iValue div 60;
  iSec  := iValue - (iMin*60);
  LabelPollElapsed.Caption := Format('%.2d:%.2d:%.2d',[iHour,iMin,iSec]);
  Application.ProcessMessages;
end;
Avatar billede psv Nybegynder
02. marts 2000 - 10:04 #5
madshenrik: For at lave det til sekunder skal du konvertere værdien divideret med 1000.

(GetTickCount - ATick) / 1000; // Antal sekunder...

Du kan i hjælpen finde hjælp på funktionen Str som kan give dig et mere formateret output, eks:

Str(((GetTickCount - ATick) / 1000):8:2, editTid.Text)

vil fylde editTid1.text med antallet af sekunder angivet med 2 decimaler.
Avatar billede madshenrik Nybegynder
02. marts 2000 - 17:57 #6
psv ved du hvordan man får formattet til at ligne timetostr formattet helt nøjagtigt.
Avatar billede madshenrik Nybegynder
02. marts 2000 - 17:58 #7
hov altså noget i retning af time:minut:sekund
Avatar billede psv Nybegynder
02. marts 2000 - 18:03 #8
Well...

Text := TimeToStr((GetTickCount-ATick/1000)/(24*60*60))

??
Avatar billede madshenrik Nybegynder
02. marts 2000 - 20:06 #9
Det virker fint...
Avatar billede psv Nybegynder
03. marts 2000 - 08:15 #10
Hvad med point? Kan vi få dem?
Avatar billede pellelil Nybegynder
03. marts 2000 - 08:26 #11
Jeg mener mindst at jeg har gjort mig fortjent til 1 point  ;-)
Avatar billede psv Nybegynder
03. marts 2000 - 09:25 #12
Fit med mig... bare spørgsmålet bliver afsluttet :-)
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