Autor Beitrag
lemming
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Mo 04.08.03 15:34 
Wie kann ich in einer Consolenanwendung einen Timer installieren ohne dabei ein Datenmodul implementieren zu müssen?

-lemming
lemming Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: 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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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:
ausblenden volle Höhe 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Di 05.08.03 12:49 
Das klappt leider irgendwie nicht. DoTimer wird nie ausgeführt!
Woran kann das liegen?
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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:
ausblenden 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