Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zeit messen (https://www.delphipraxis.net/130385-zeit-messen.html)

delphi-projekt 7. Mär 2009 15:02


Zeit messen
 
Hallo,

wie kann ich mit einer ganz einfachen Prozedur messen, wie lange ein Button gedrückt worden ist?

Kann mir jemand dazu ne kurze Anleitung mit Quelltext nennen?

LG :-D

blink182 7. Mär 2009 15:10

Re: Zeit messen
 
hi

im MouseDown vom button in einer globalen variable die zeit speichern und dann im MouseUp die differenz bilden, dann hast du die millisekunden

Delphi-Quellcode:
var zeit:integer;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 zeit:=GetTickCount;
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 showmessage(inttostr(GetTickCount-zeit));
end;

jaenicke 7. Mär 2009 15:10

Re: Zeit messen
 
In OnMouseDown den Wert von GetTickCount in einer Cardinalvariable merken, Tag des Buttons ginge auch, dann in OnMouseUp die Differenz ausrechnen.

Alternativ (genauer) ginge es mit QueryPerformanceCounter.

// EDIT:
Statt
Delphi-Quellcode:
var zeit:integer;
lieber
Delphi-Quellcode:
var
  zeit: Cardinal;
Und noch besser gar nicht als globale Variable sondern z.B. als Feld im Formular. ;-)

Whatever 7. Mär 2009 15:11

Re: Zeit messen
 
Das ist nicht allzuschwer also gibts au kein Codebeispiel :-D
Ich würd dir GetTickCout empfehlen.
Im MouseDowm speicherste den aktuellen TickCount in eine Variable. Im MouseUp erneuet. Dann errechnest du die Differenz.

mfg Whatever

Micha88 7. Mär 2009 15:14

Re: Zeit messen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mal vor einiger Zeit folgendes in einem Forum gefunden, nicht allzu gut aber für jemanden der nur Timer und wenige Datentypen kennt das richtige

(Ist halt nur nicht auf die Millisekunde genau ..)

jaenicke 7. Mär 2009 15:16

Re: Zeit messen
 
Zitat:

Zitat von MichaelLinden
Ich habe mal vor einiger Zeit folgendes in einem Forum gefunden, nicht allzu gut aber für jemanden der nur Timer und wenige Datentypen kennt das richtige

(Ist halt nur nicht auf die Millisekunde genau ..)

Das dürfte so ziemlich die ungenaueste und unsauberste Variante sein, die es gibt. ;-)

_frank_ 7. Mär 2009 15:18

Re: Zeit messen
 
GetTickCount löst aber nur etwa 10ms-genau auf, ist die procedure schneller benötigt man QueryPerformanceCounter...da hab ich das mal implementiert: http://www.delphipraxis.net/internal...=998390#998390

TTimer wird imho auch angehalten, wenn z.b. das Formular verschoben wird...

Gruß Frank

Whatever 7. Mär 2009 15:21

Re: Zeit messen
 
Ja einmal stoppt er kurz und desweiteren hab ich mal irgendwo gelesen das der Timer nur auf ca. 40ms genau ist...

delphi-projekt 7. Mär 2009 15:26

Re: Zeit messen
 
Danke für die schnellen Antworten.

Eine Frage habe ich noch: Warum streicht es mir den Befehl Button1MouseDown immer rot an?
Ich habe doch einen Button1

jaenicke 7. Mär 2009 15:27

Re: Zeit messen
 
Zitat:

Zitat von Whatever
Ja einmal stoppt er kurz und desweiteren hab ich mal irgendwo gelesen das der Timer nur auf ca. 40ms genau ist...

Ein Timer ist so oder so ungenau, egal mit welchem Intervall. Ein Timer ist aber auch gar nicht dafür gedacht genau zu sein. Schließlich passiert die Zeitmessung (eigentlich :roll: ) unabhängig davon.

Zitat:

Zitat von delphi-projekt
Eine Frage habe ich noch: Warum streicht es mir den Befehl Button1MouseDown immer rot an?
Ich habe doch einen Button1

Kann es sein, dass du das nicht unter Ereignisse beim Button eingetragen sondern einfach kopiert hast? :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz