Entwickler-Ecke

Sonstiges (Delphi) - Uhr im label


Arctics - Di 21.11.06 22:58
Titel: Uhr im label
Ich hab nun außreichent danach gesucht, hab aber nichts gefunden was mir weiterhelfen könnte.

Das Problem ist:
ich will in einem ganz normalen label eine uhr einbauen

ich habs auch versucht, aber hier passiert erst ne ganz zeit gar nichts und dann wird die uhrzeit angezeit, aber nicht sekündlich aktuallisiert

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);

var w:real;
begin
repeat
w:=w+1;

Label1.Caption := FormatDateTime('hh:nn:ss', now);

until w=200001;
end;


Moderiert von user profile iconraziel: Quote- durch Delphi-Tags ersetzt


Ironwulf - Di 21.11.06 23:03

omg ;D
nimm nen timer anstatt nen button


Danny87 - Di 21.11.06 23:03

Warum machst du nicht einfach nen Timer mit

Delphi-Quelltext
1:
Label1.caption := TimeToStr(Time);                    

??

Gruss
Daniel


Delete - Di 21.11.06 23:04

timer nehmen...


Dragonclaw - Di 21.11.06 23:10

Das kannste ganz einfach mit nem Timer machen, den findest du unter dem Reiter 'System'.
Wenn du Enabled auf true lässt fängt er direkt an.

Die Procedure bekommst du über nen Klick auf Ereignisse und dann Doppelklick auf 'OnTimer'.

Das Intervall des Timers gibt die abstände in millisekunden an, in denen die Procedure Timer
ausgeführt werden.


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := FormatDateTime('hh:nn:ss', now);
end;


Delete - Di 21.11.06 23:16

schon ganz gut,... aber du hats den processmessage vergessen...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
PROCEDURE TForm1.Button1Click(Sender: TObject);

VAR
 w: REAL;
BEGIN
 REPEAT
  w := w + 1;

  Label1.Caption := FormatDateTime('hh:nn:ss', now);
  
  application.processmessage; // <<-- hier einfügen
 UNTIL w = 200001;
END;


Arctics - Di 21.11.06 23:20

:shock:
danke, mit so einem timer ist ja sehr hilfreich,



ich hab erst vor kurzem mit delphi angefangen...

gibts hier eigentlich irgentwo ein tutorial?


Ironwulf - Di 21.11.06 23:21

wenn ers so macht und dann noch nen normal schnelln rechner hat zeigt das label, vllt max. 4-5 sekunden an


Delete - Mi 22.11.06 00:24

@Ironwulf: ein paar sekunden??? bei mir zeigt er nicht mal eine an. aber das war ja nicht seine frage...

aber er kann ja nach dem "application.processmessages" ja noch 'n sleep(3) oder so einbauen ;-)


VaNaTiC - Mi 22.11.06 00:56

Setz das Timer.Interval auf etwa 500ms, dann wird die Zeit ordentlich angezeigt.

Und Sleep(x) hat zusätzlich zum Warten die gleiche Funktionalität wie Application.ProcessMessages.


Dragonclaw - Mi 22.11.06 01:02

Ehmm wenn man den Timer auf 500ms (also 0,5sec) setzt aktualisiert sich die Ziet ja alle 0,5sec. Das bringt aber nix weil die Zeit sich ja im Sekundentakt (1000ms) verändert. Wenn du jetzt den Timer doppelt so oft ausführen lasst, verbraucht das nur mehr Leistung, und der Rest des Prgrammes läuft langsamer, die Zeit wird aber nicht genauer.


VaNaTiC - Mi 22.11.06 01:32

TTimer ist nicht 100%ig genau und Deine Zeit wird demzufolge nicht GENAU nach einer Sekunde auch GENAU nach einer Sekunde aktualisiert, deshalb etwa der Turnus pro halbe Sekunde. Und von Systemauslastung kann man dabei nicht sprechen.