delphi7中我在程序运行时定义一类,但在定义了实例后其中的定时器T1的事件OnT1Timer无法触发,请部何故?程序如下:unit Unit2;interfaceuses QExtCtrls,SysUtils;type
  Ttest=class(Tobject)
  private
    T1:ttimer;
  public
    constructor create;
    destructor destroy;
    procedure onT1Timer(Sender:Tobject);
 end;implementationuses Unit1;
procedure Ttest.onT1Timer(Sender:Tobject);
var
  i,j:integer;
begin
  i:=j*1000;
end;constructor Ttest.create;
begin
  t1:=TTimer.Create(form1);
  t1.Enabled:=true;
  t1.Interval:=2000;
  t1.OnTimer:=onT1Timer;
end;destructor Ttest.Destroy;
begin
  t1.Free;
end;end.

解决方案 »

  1.   

    好像没有问题,将这两句
    t1.Enabled:=true;
    t1.Interval:=2000;
    放在t1.OnTimer:=onT1Timer;后面,并且两个顺序换一下。
      

  2.   

    how do you now the t1's ontimer event is not executed?
      

  3.   

    如果你得ontime事件完全是这样的:
    procedure Ttest.onT1Timer(Sender:Tobject);
    var
      i,j:integer;
    begin
      i:=j*1000;
    end;
    那么不会执行,因为变量I没有用刀,已经被Delphi编译器优化掉了
      

  4.   

    事件会触发,把断点设在end;上
      

  5.   

    你这样写constructor Ttest.create;事件根本就不会触发
    你把它写在procedure TForm1.FormCreate(Sender: TObject);事件中就可以了
    以下是我对你程序的修改
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Timer1: TTimer;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
      T1:ttimer;    { Private declarations }
      public
      //constructor create;
        destructor destroy;
        procedure onT1Timer(Sender:Tobject);
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      s :string;
      i:integer;
    begin
      s :='1 2 4 5 13 334';
      i:=2;
      while length(s)>0 do
      begin
        if i=1 then
         begin
           ShowMessage(Copy(s,1,length(s)));
           exit;
         end;
         if Copy(s, 1, Pos(' ', s) - 1)<>'' then
           ShowMessage(Copy(s, 1, Pos(' ', s) - 1));
        i:=pos(' ',s)+1;
        s :=Copy(s, i, Length(s));
      end;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    var
      s :string;
      i,j:integer;
    begin
      s :='1 2 4 5 13 334';
      j:=length(s);
      i:=0;
      while i<j do
      begin
        ShowMessage(Copy(s, 1, Pos(' ', s) - 1));
        i:=pos(' ',s)+1;
        s :=Copy(s, i, Length(s));
      end;
    end;procedure Tform1.onT1Timer(Sender:Tobject);
    var
      i,j:integer;
    begin
      j:=2;
      i:=j*1000;
      showmessage(inttostr(i));
    end;
    {constructor TForm1.Create;
    begin
    t1:=TTimer.Create(form1);
      t1.Enabled:=true;
      t1.Interval:=2000;
      t1.OnTimer:=onT1Timer;end;  }destructor Tform1.Destroy;
    begin
      t1.Free;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    t1:=TTimer.Create(form1);
      t1.Enabled:=true;
      t1.Interval:=1000;
      t1.OnTimer:=onT1Timer;
    end;end.
      

  6.   

    不好意思,button1,buttont2事件不是你程序要的,可以不看
      

  7.   

    t1:=TTimer.Create(form1);     //不该这么写,不可靠  t1.Enabled:=true;            
      t1.Interval:=2000;
      t1.OnTimer:=onT1Timer;    //顺序不妥t1.OnTimer:=onT1Timer;
      t1.Interval:=2000;
      t1.Enabled:=true;    //....oktry again