title image


Smiley Re: Timer: Statt Interval feste Uhrzeit?
Ich hab mir dafür eine Komponente geschrieben, die mit Sekunden-Genauigkeit arbeitet und sich zum entsprechenden Zeitpunkt selbst vernichtet. Man muss aber nicht immer diesen Aufwand treiben.







type

TZeit = class(TComponent)

private

Punkt: TDateTime;

stimmt: boolean;

FTimer: TTimer;

constructor Create(Owner: TComponent); override;

destructor Destroy; override;

procedure Timer(Sender: TObject);

procedure Go;

public

OnAction: TNotifyEvent;

property Zeitpunkt: TDateTime read Punkt write Punkt;

property Genau: boolean read stimmt;

end;



constructor TZeit.Create(Owner: TComponent);

begin

Punkt := strtodatetime('31.12.9999 23:59');

FTimer := TTimer.create(nil);

FTimer.onTimer := Timer;

FTimer.Interval := 333;

end;



destructor TZeit.Destroy;

begin

FTimer.free;

inherited Destroy;

end;



procedure TZeit.Timer(Sender: TObject);

begin

if now < Punkt then exit;

stimmt := formatdatetime('dmyhns', now) = formatdatetime('dmyhns', punkt);

go;

end;



procedure TZeit.Go;

begin

FTimer.interval := 0;

if assigned(OnAction) then OnAction(self);

self.free;

end;



//------------------- Beispielaufruf ------------------------------



var

zeit: TZeit;

Event: TNotifyEvent;



procedure erreicht(Sender: TObject);

var s: string;

begin

beep;

if zeit.genau then s := 'erreicht' else s := 'überschritten';

showmessage('Zeitpunkt ' + s);

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

@Event := @erreicht;

zeit := TZeit.create(self);

zeit.onAction := Event;

zeit.zeitpunkt := strtodatetime('15.5.2003 22:23:51');

end;





Gruß DBR
Eine Stunde denken spart zehn Stunden programmieren!

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: