Thema: Delphi TNotifyEvent

Einzelnen Beitrag anzeigen

RalfOne

Registriert seit: 23. Jul 2004
31 Beiträge
 
Delphi 7 Professional
 
#9

Re: TNotifyEvent

  Alt 7. Jun 2005, 10:46
Hallo zusammen,

ich habe jetzt schon alles gelesen und auch in der Suche mich bemüht etwas zu finden aber irgendwie finde ich nicht das passende womit ich persönlich weiterkomme.
Also ich habe folgendes problem.
Ich habe eine Konsolenanwendung welche immer laufen muss.
Also bilde ich eine Endlosschleife.
In dieser Endlosschleife würde ich gerne auf den OnTimer reagieren. Dies klappt aber leider nicht!
Dieser wird immer ignoriert!
Das auslagern in einem Thread habe ich auch probiert klappt aber bei mir leider auch nicht?!!
Warum keine Ahung........
Hier mal einen Auszug meines Sources.
Erster Versuch.....
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,QExtCtrls;


var
  aTimer : TTimer;
procedure aOnTimer(Sender:TObject);
begin
  writeln('Test');
end;



begin
  aTimer := TTimer.Create(nil);
  aTimer.Interval := 1*10*1000;
  aTimer.OnTimer := aOnTimer;
  aTimer.Enabled := True;
  sleep(0);
  while true do begin
    sleep(0);
  end;
end.

Der zweite Versuch mit Luckie Code............
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ExtCtrls,
  Classes;

type
  PMethodPointer = ^TMethodPointer;
  TMethodPointer = packed record
    pMethod: Pointer;
    pObject: TObject;
  end;

var
  T : TTimer;
  p : TMethodPointer;
  i : Integer;


procedure NotifyEvent(Self: TMethodPointer; Sender: TObject);
begin
  writeln('yes');
  beep;
end;

begin
  T := TTimer.Create(nil);
  T.Interval := 200; // -> löst alle 200 ms das OnTimer-Event aus
  try
    p.pMethod := @NotifyEvent;
    p.pObject := nil;
    T.OnTimer := TNotifyEvent(p);

    T.Enabled := true; // aktiviert den Timer
    writeln('Warte auf Event: ');
    for i := 1 to 5 do
    begin
      sleep(500);
      writeln('warte ' + inttostr(i * 500) + 'ms...');
      NotifyEvent(p, T);
    end;
    while true do begin
      sleep(0);
    end;
    T.Enabled := false; // deaktiviert den Timer
  finally
    T.Free;
  end;
end.
Danke im voraus für Vorschläge!!
  Mit Zitat antworten Zitat