Entwickler-Ecke

Sonstiges (Delphi) - Millisekunden


donarac - Mo 01.11.04 16:00
Titel: Millisekunden
Hallo Leute,

ich versuche ein kleines Programm zu scheiben, dass die verstrichene Zeit zwischen dem Loslassen der linken Maustaste bis zum Drücken der rechten Maustaste berechnet.

Der Wert soll im Millisekunden gemessen und in Label geschrieben werden.

Hier nun meine Fragen:
1.
Ist die Subtraktion von (Endzeit-Startzeit)*100000000 = Millisekunden?
Wenn nein, welcher Multiplikator mus eingesetzt werden?
Bsp.: "Zum Wechsel der Tasten wurden ... ms gebraucht!".

2.
"Endzeit: hh:mm:ss:ms"
"Startzeit: hh:mm:ss:ms"

Die FormatDateTime-Funktion gibt leider nur die Sekunden, nicht aber die Millisekunden zurück. Wer weiß Abhilfe?

Vielen Dank schon mal im Voraus


Kroni - Mo 01.11.04 16:35

Mit welcher Funktion beziehst du Start und Endzeit??
Wenn du das sagst, kann man dir helfen =)
Und den Rest sieht man dann ja später, also die Antwort auf deine zweite Frage, wenn man weiß, mit welcher Funktion du die Start und Endzeit misst. Bzw. wie mithilfe der Funktion die Zeit angezeigt wird.
PS: wenn du die Zeit in Millisekunden messen willst, warum willst du hinterher eine Anzeige machen, die Minuten und auch Stunden anzeigt??


donarac - Mo 01.11.04 17:03

var
dtStart, dtEnde : TDateTime;

...

dtStart := now; {Loslassen der linken MT}

if button = mbRight then dtEnde := now; {Drücken der rechten MT}


donarac - Mo 01.11.04 17:04

PS: wenn du die Zeit in Millisekunden messen willst, warum willst du hinterher eine Anzeige machen, die Minuten und auch Stunden anzeigt??

Sollte nur zur Kontrolle eingeblendet werden.


Kroni - Mo 01.11.04 18:04

so, helf mir mal eben auf die Sprünge.
Soweit ich das gesehen habe, stellt der Vorkommateil die Anzahl der Tage nach dem 30.12.1899 an??
jund der nachkommateil die Stunden oder so??*mich blöd anstell*
Ich persönlich würde einfach Time benutzen.


BenBE - Mo 01.11.04 21:08

Der Nachkommaanteil ist der Teil des vollen Tages, der vergangen ist.

Wenn du also (Trunc(Now * 86400) mod 86400 rechnest, bekommst du die Sekunden seit Mitternacht.

Trunc(1000*Frac(Now*86400)) sind dann die Millisekunden.


donarac - Sa 06.11.04 21:09

Kroni schrieb:
> Ich persönlich würde einfach Time benutzen.

Leider kann man damit nicht rechnen - zumindest nicht in Millisekunden.

BenBE schrieb:
>Wenn du also (Trunc(Now * 86400) mod 86400 rechnest, bekommst du die Sekunden >seit Mitternacht.

Hier kommt immer die Fehlermeldung: Fehler bei Fließkommaoperation!

Oder ich bin zu blöde dafür! :oops:


BenBE - Sa 06.11.04 21:41

Ich hab das bei mir grad nochmal getestet und es funzt ohne Probleme. Schreib mal ein wenig Source von dir. Ich glaub, der Fehler liegt an ner anderen Stelle.


Delete - Sa 06.11.04 21:58

Wie wäre es denn mit GetTickCount?
Ein Beispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  mmStart, mmDuration: integer;

implementation

{$R *.dfm}

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    mmStart := GettickCount;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then
  begin
    mmDuration := GettickCount - mmStart;
    label1.Caption := inttostr(mmDuration);
  end;
end;

end.

Das war doch das, wonach gefragt wurde. Oder?


donarac - Mo 08.11.04 17:56

Danke ELITE! :D

Genau das, was ich wollte! :!:

Der Name ist wohl Programm :wink: