Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eine Procedure von OnTimer Event aufrufen lassen. (https://www.delphipraxis.net/67237-eine-procedure-von-ontimer-event-aufrufen-lassen.html)

Kostas 11. Apr 2006 15:42


Eine Procedure von OnTimer Event aufrufen lassen.
 
Hallo Zusammen,

ich habe eine Unit ohne Form und möchte darin eine Timer haben.
Im initialization teil habe ich die Komponente Timer erzeugt.
Wie kann ich bitte das event OnTimer nutzen? Es soll die Procedure
MyTimerOnTimer aufrufen.


Delphi-Quellcode:
...
procedure MyTimerOnTimer(Sender: TObject);
begin
  MyTimer.Enabled := false;
  CheckUser;
  MyTimer.Enabled := true;
end;

initialization
  MyTimer := TTimer.Create(Application);
  MyTimer.Interval := 10000;
  MyTimer.OnTimer := MyTimerOnTimer; <<< so geht es leider nicht.
  MyTimer.Enabled := true;

finalization
  MyTimer.Enabled := false;
Gruß Kostas

jim_raynor 11. Apr 2006 15:48

Re: Eine Procedure von OnTimer Event aufrufen lassen.
 
Also am einfachsten ist es, wenn du dir eine Dummy Klasse darum baust:

Delphi-Quellcode:
interface

type
  class =TDummyClass
  public
    class procedure MyTimerOnTimer(Sender: TObejct);
  end;
.
.

implementation

class procedure TDummyClass.MyTimerOnTimer(Sender: TObject);
begin
  MyTimer.Enabled := false;
  CheckUser;
  MyTimer.Enabled := true;
end;

initialization
  MyTimer := TTimer.Create(Application);
  MyTimer.Interval := 10000;
  MyTimer.OnTimer := TDummyClass.MyTimerOnTimer;
  MyTimer.Enabled := true;
P.S: ungetestet! Aber als Denkanstoss sollte es reichen.
P.P.S: Ob aber der überhaupt Timer ohne Fenster funktioniert sei mal dahingestellt ... Einfach mal probieren.

himitsu 11. Apr 2006 15:56

Re: Eine Procedure von OnTimer Event aufrufen lassen.
 
Wenn ich mich recht erinnere, dann gibt es in den Klassenproceduren den "versteckten" Parameter Self, welcher die Klasse, oder die Objektreferenz übergibt (jenachdem wie die Prozedur aufgerufen wurde).

z.B.:
Delphi-Quellcode:
procedure MyTimerOnTimer(Self: TClass; Sender: TObject);
procedure MyTimerOnTimer(Self: TObjekt; Sender: TObject);
procedure MyTimerOnTimer(Self: Pointer; Sender: TObject);
...

Kostas 11. Apr 2006 16:13

Re: Eine Procedure von OnTimer Event aufrufen lassen.
 
Dank erstmal für die Hilfe.

So habe ich es versucht und bekomme die Fehlermeldung:
Inkompatible Typen: TNotifyEvent und Procedure.

Irgend eine Idee?
Gruß Kostas


Delphi-Quellcode:
...
type
  TDummyClass = class(TObject)
  public
    procedure MyTimerOnTimer(Sender: TObject);
  end;

implementation

procedure TDummyClass.MyTimerOnTimer(Sender: TObject);
begin
  MyTimer.Enabled := false;
  CheckUser;
  MyTimer.Enabled := true;
end;

initialization
  MyTimer := TTimer.Create(Application);
  MyTimer.Interval := 10000;
  MyTimer.OnTimer := TDummyClass.MyTimerOnTimer;
  MyTimer.Enabled := true;

finalization
  MyTimer.Enabled := false;


end.

Kostas 11. Apr 2006 16:14

Re: Eine Procedure von OnTimer Event aufrufen lassen.
 
Zitat:

Zitat von himitsu
Wenn ich mich recht erinnere, dann gibt es in den Klassenproceduren den "versteckten" Parameter Self, welcher die Klasse, oder die Objektreferenz übergibt (jenachdem wie die Prozedur aufgerufen wurde).

z.B.:
Delphi-Quellcode:
procedure MyTimerOnTimer(Self: TClass; Sender: TObject);
procedure MyTimerOnTimer(Self: TObjekt; Sender: TObject);
procedure MyTimerOnTimer(Self: Pointer; Sender: TObject);
...

Funkt leider nicht. Hab alle versionen probiert.

Gruß Kostas

Kostas 11. Apr 2006 16:21

Re: Eine Procedure von OnTimer Event aufrufen lassen.
 
HALT es funkt doch:
Abschrieben sollte man schon können!!!


Delphi-Quellcode:
type
  TDummyClass = class(TObject)
  public
    class procedure MyTimerOnTimer(Sender: TObject);
  end;

...

(*--------------------------------------------------------------------*)
class procedure TDummyClass.MyTimerOnTimer(Sender: TObject);
begin
  MyTimer.Enabled := false;
  CheckUser;
  MyTimer.Enabled := true;
end;

initialization
  MyTimer := TTimer.Create(Application);
  MyTimer.Interval := 10000;
  MyTimer.OnTimer := TDummyClass.MyTimerOnTimer;
  MyTimer.Enabled := true;

finalization
  MyTimer.Enabled := false;


end.
Tausend Dank, funkt einwandfrei.

Gruß Kostas

H4ndy 11. Apr 2006 16:32

Re: Eine Procedure von OnTimer Event aufrufen lassen.
 
[EDIT]
< gelöscht by my self >

Irgendwie funktioniert bei mir heute der rote Kasten net wirklich -.-
[/EDIT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 Uhr.

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