Entwickler-Ecke

Sonstiges (Delphi) - Console: Timer


lemming - Mo 04.08.03 15:34
Titel: Console: Timer
Wie kann ich in einer Consolenanwendung einen Timer installieren ohne dabei ein Datenmodul implementieren zu müssen?

-lemming


lemming - Mo 04.08.03 16:00

Ich hab jetzt schonmal was gefunden. Der Timer wird auch ohne Murren erstellt. Nur die Procedure die den Timer steuert wird einfach ignoriert. Sie wird partout nicht aufgerufen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure DoTimer(Sender: TObject);
begin
  ShowMessage('Timer');
end;

begin
  //SendTimer
  TimerSend := TTimer.Create(nil);
  TimerSend.Interval := 100;
  @TimerSend.OnTimer := @DoTimer;
  TimerSend.Enabled := True;
.
.
.

Wenn ich die Prozedur DoTimer ohne Pointer aufrufe kommt die Meldung:
Zitat:
Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'


Ist der Aufruf via Pointer schlecht oder fehlt noch was um den Timer anzuschucken?


Tino - Di 05.08.03 11:21

lemming hat folgendes geschrieben:
Ist der Aufruf via Pointer schlecht oder fehlt noch was um den Timer anzuschucken?

Dann mach es doch so:

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:
Type
  TTimerHandler = Class
    Private
      fTimer: TTimer;
      Procedure DoTimer (aSender: TObject);
      Function GetEnabled: Boolean;
      Procedure SetEnabled (aValue: Boolean);
    Public
      Constructor Create;
      Destructor Destroy;  override;
      Property Enabled: Boolean read GetEnabled write SetEnabled;
    End;

Constructor TTimerHandler.Create;
Begin
  fTimer := TTimer.Create (nil);
  fTimer.Interval := 100;
End;

Destructor TTimerHandler.Destroy;
Begin
  fTimer.Free;
  Inherited;
End;

Function TTimerHandler.GetEnabled: Boolean;
Begin
  Result := fTimer.Enabled;
End;

Procedure TTimerHandler.SetEnabled (aValue: Boolean);
Begin
  fTimer.Enabled := aValue;
End;

Procedure TTimerHandler.DoTimer (aSender: TObject);
Begin
  ShowMessage('Timer');
End;

{ Main }

Var
  TimerHandler: TTimerHandler;
Begin
  TimerHandler: TTimerHandler.Create;
  TimerHandler.Enabled := True;

  {...}

  TimerHandler.Free;
End;


lemming - Di 05.08.03 12:49

Das klappt leider irgendwie nicht. DoTimer wird nie ausgeführt!
Woran kann das liegen?


Tino - Di 05.08.03 13:38

lemming hat folgendes geschrieben:
Woran kann das liegen?

Da hättest du eigentlich auch selbst drauf kommen können.

Ich hab die Zuweisung vergessen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Constructor TTimerHandler.Create; 
Begin 
  fTimer := TTimer.Create (nil); 
  fTimer.Interval := 100
  fTimer.OnTimer := DoTimer;
End;

Gruß
Tino