Delphi Zeit stoppen

Hi,

also ich arbeite wie in meine vorherigen Fragen an einem Programm welches nach einer Zahl fragt und dann muss man so oft klicken wie man eingegeben hat.

Nun wäre es toll wenn ich die zeit stoppen könnte für z.B. 100 Klicks.

Meine grobe Vorstellung ist das wenn man auf der Form2 OK klickt, der Timer startet und wenn der Wert minuszahl = 0 ist der Timer aufhört und dann das Ergebnis präsentiert.

Vielen Dank schonmal im Voraus.

MfG

Tristan

schau Dir mal die Funktionen GetTickCount und GetTickCount64 an.
(wenlche Version von Delphi benutzt Du eigentlich?)

VielenDank Niels.

Mach ich gleich mal.

Ich hab Delphi 7

MfG
Tristan

1 Like

Ich hab Delphi 7

ah, das beste Delphi, das Borland je gemacht hat. Allerdings legtEmbarcadero jetzt ein ziemliches Tempo vor in Sachen Delphi-Entwicklung.

Also ich hab mit Google gesucht und folgendes gefunden:

at := GetTickCount; // Anfangszeit
fn := fib(n);
et := GetTickCount; // Endzeit

eIterativ.text := IntToStr(fn);
eIterZeit.text := IntToStr(et-at);

Ich werde daraus aber nicht schlau.
Könntest du mir ein bisschen unter die Arme greifen, Niels?

Schonmal vielen Dank im Voraus.

MfG
Tristan

1 Like

Die Funktion gibt Dir die Millisekunden seit Einschalten des Rechners.

HIlfe
Also ich bin jetzt schon relativ weit, denke ich.

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
t1 : integer;
t2 : integer;
time1 : String;
time2 : String;
time3 : String;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
t1:=Gettickcount;
t2:=Gettickcount;
time1 := IntToStr(t1);
time2 := IntToStr(t2);
time3 := time2 - time1
Showmessage (time3)
end;

end.

Aber Delphi sagt mir bei Showmessage (time3):

[Fehler] Unit1.pas(39): Operator ist auf diesen Operandentyp nicht anwendbar.

Was hab ich falsch gemacht?

MfG

Tristan

1 Like

time1 : String;
time2 : String;
time3 : String;

was hast Du eigentlich immer mit Deinen Strings?

time1 := IntToStr(t1);

wozu?

time2 := IntToStr(t2);

wozu?

time3 := time2 - time1

hier kommt der Fehler

Showmessage (time3)

nicht hier

1 Like

Hi,
weil wenn ich das so machen würde:

var
Form1: TForm1;
t1 : integer;
t2 : integer;
t3 : integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
t1:=Gettickcount;
t2:=Gettickcount;
t3 := t1-t2 ;
Showmessage (t3)
end;

kommt die Fehlermeldung:
[Fehler] Unit1.pas(35): Inkompatible Typen: ‚String‘ und ‚Integer‘

Also hab ich integer in string umgewandelt.

Was henau ist denn jetzt falsch? Wie würdest du es machen?

MfG
Tristan

1 Like

Habs hinbekommen. Danke.

Quellcode:

var
Form1: TForm1;
t1 : integer;
t2 : integer;
t3 : integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
t1:=Gettickcount;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
t2:=Gettickcount;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
t3 := t2-t1 ;
ShowMessage(IntToStr(t3))
end;

end.

Bis bald, denk ich mal. :smile:

Hallo,

nachdem Du das jetzt hinbekommen hast, hier noch eine von mir etwas verbesserte Version:

var
 Form1: TForm1;

implementation

{$R \*.dfm}

var
 t1 : DWord; //DWord ist ein vorzeichenloser Integer...
 t2 : DWord; //und der richtige Typ für GetTickCount
 //Integer geht aber etwas eingeschränkt auch

procedure TForm1.Button1Click(Sender: TObject);
begin
 t1:=Gettickcount;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 t2:=Gettickcount;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 ShowMessage(IntToStr(t2-t1))
end;

end.

Auch wenn es im ersten Moment kleinkariert erscheint. Variablen sollten immer so lokal wie möglich deklariert werden (also nur in der Unit oder Funktion gültig sein, in der sie benötigt werden).
Spätestens, wenn Du mal ein Projekt hast, in dem mehrere Units Variablen mit gleichem Namen veröffentlichen kommst Du ins schwimmen.
Solche Fehler sind dann ganz schlecht zu finden!

Aber…
Wenn ich das jetzt so mache:

ShowMessage(IntToStr(t2-t1))
oder so
t3 := t2-t1;
ShowMessage(IntToStr(t3));

Kann ich garnichts anderes mehr schreiben. Also ich meine etwa wie:
„Du hast 1416 millisekunden gebraucht“

Wie wäre das zu realisieren?

Kann ich garnichts anderes mehr schreiben. Also ich meine etwa
wie:
„Du hast 1416 millisekunden gebraucht“

Wie wäre das zu realisieren?

ShowMessage(‚Du hast ‚+IntToStr(t3)+‘ Millisekunden gebraucht‘);

oder

ShowMessage(Format(‚Du hast %d Millisekunden gebraucht‘,[t3]));

VG
Jochen

1 Like

Hat wunderbar geklappt. Danke Jo

MfG
Tristan

1 Like