Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Uhrzeit


Supernova - So 18.01.04 16:47
Titel: Uhrzeit
wie kann ich eine Uhr erstellen die sich jede Sekund aktualiesiert !!!


tomtom62 - So 18.01.04 17:32

Meinst Du so etwas ?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Timer1.Interval:=1000;
Timer1.enabled:=true;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

label1.caption:=timetostr(now);

end;


MSCH - So 18.01.04 20:46

Timer fressen aber Resourcen, sind leider nicht unbegrenzt verfügbar,
Hier ein Beispiel mit einem Thread, der nur dann ausgeführt wird, wenn das System im Leerlauf ist:


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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
unit sbpZeit;

interface

uses
  Classes, ComCtrls;

type
  TStatusBarPanelZeit = class(TThread)
  private
    Panel: TStatusPanel; // Panel wo die Zeit angezeigt wird
    procedure UpdatePanel; virtual;
  protected
    procedure Execute; override;
  public
    Constructor Create(aPanel:TStatusPanel);
  end;

  TStatusBarPanelDatum = Class(TStatusbarPanelZeit)
  private
    procedure UpdatePanel; override;
  end;

implementation

uses SysUtils;

{ TStatusBarPanelZeit }

constructor TStatusBarPanelZeit.Create;
begin
  Inherited Create(true);
  Panel:=aPanel;
  FreeOnTerminate:= true;
  Priority:= tpIdle; // nur im Leerlauf
  Resume;            // und Thread starten
end;

procedure TStatusBarPanelZeit.Execute;
begin
  while not terminated do    // solange nicht beendet
    Synchronize(UpdatePanel);// Zeit updaten
end;

procedure TStatusBarPanelZeit.UpdatePanel;
begin
  Panel.Text:= TimeToStr(now);// Zeit anzeigen
end;

{ TStatusBarPanelDatum }

procedure TStatusBarPanelDatum.UpdatePanel;
begin
  Panel.Text:= DateToStr(now);// Datum anzeigen
end;

end.


im Hauptprogramm muss sich eine TStatuspanel mit min. 3 Panels befinden.
Dann, vieleicht in der OnCreate() des Haptfensters:


Delphi-Quelltext
1:
2:
  TStatusBarPanelZeit.Create(Statusbar.Panels[1]);
  TStatusBarPanelDatum.Create(Statusbar.Panels[2]);


viel spass
grez
msch


Anonymous - So 18.01.04 22:12

Naja, selbst wenn Timer viele Ressourcen verbrauchen (was ich bezweifle) sehe ich keinen Sinn darin, direkt einen Thread dafür zu missbrauchen. So wie mir das aussieht, würde dein Thread ggf. auch das Panel viel zu oft updaten. (=>100% CPU-Auslastung)