从TWinControl基类上自建组件,并加入了Ttimer,Tclientsocket标准组件,如何编辑标准组件中的事件?
比如我要让timer发挥作用,能够输入一段代码来监控一些状态,这些代码怎么输入到timer其中,并让他发挥作用。  我现在已加入了这些控件,只是不能使用他们的事件.

解决方案 »

  1.   

    procdedure  urOntimr(...)
    begin
    //你的操作
    end;timer.ontimer:=urtimer;
      

  2.   

    procdedure  a(Sender:Tobject);
    begin
    {你的操作}
    end;timer.ontimer:=a;
    其实:timer的事件的参数与所对应过程的参数要一致。
      

  3.   

    可以的,应该是你的赋值语句或者格式的问题,你也可以自己用指针比如上面传入urOntimr或者
    @urOntimr
      

  4.   

    还是出错呀,提示:
    seeder_yl.pas(59): Unsatisfied forward or external declaraton:'tseeder_yl.a'光标停在 procdedure  a(Sender:Tobject); 声明的地方
      

  5.   

    public
      procedure a(Sender: TObject);
    constructor Tseeder_yl.Create(AOwner: TComponent);
     begin
     Inherited;
      Self.Constraints.MaxHeight :=190;
      Self.Constraints.MaxWidth :=210;
      Self.Constraints.MinHeight :=190;
      Self.Constraints.MinWidth :=210;
      self.BevelOuter:= bvraised;
      self.BevelKind:=bksoft;  timer1:=Ttimer.Create(self);
      timer1.Enabled:=true;
      timer1.Interval:=100;
      timer1.OnTimer:=a;procedure a(Sender:Tobject);
     begin
       showmessage('ok');
     end;就是这个出错的,能指点一下吗?
      

  6.   

    1.在自建控件类的私有成员定义以上对象引用
    2.要加上以上类所在单元
    3.在自建控件的Create事件中事例化成员组件,用Self代表自身
    4.普通过程是不能作为方法赋值的,所以它必须是一个类成员过程,当然也可以通过填充一个TMethod记录来实现!如:
    var
      Mtd:TMethod;Mtd.Code:=@a;
    Mtd.Data:=Self;
    FTimer.OnClick:=TNotifyEvent(Mtd);当然最简单的方法还是a作为自建控件类的成员定义
      

  7.   

    procedure TMyWinControl.a(Sender:Tobject);//少了所属的类
      

  8.   

    unit seeder_yl;interfaceuses
       Windows, Messages, SysUtils, Classes, Graphics,
       Controls,extctrls,ShellAPI,Forms,stdctrls,scktcomp,dialogs;type
      Tseeder_yl = class(TWinControl)
      private
      Timer1: TTimer;
       Cs: TClientSocket;  procedure a(sender:tobject);protectedpublic
      constructor Create(AOwner: TComponent); override;
    published
     end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('seeder', [Tseeder_yl]);
    end;constructor Tseeder_yl.Create(AOwner: TComponent);
     begin
     Inherited;
      Self.Constraints.MaxHeight :=190;
      Self.Constraints.MaxWidth :=210;
      Self.Constraints.MinHeight :=190;
      Self.Constraints.MinWidth :=210;
      self.BevelOuter:= bvraised;
      self.BevelKind:=bksoft;  timer1:=Ttimer.Create(self);
      timer1.Enabled:=true;
      timer1.Interval:=100;
      timer1.OnTimer:=a;
    end;  procedure a(sender:tobject);
     begin
       showmessage('ok');
     end;end.
    好像还不行,能给段代码吗?
      

  9.   

    正确的是:
    unit seeder_yl;interfaceuses
       Windows, Messages, SysUtils, Classes, Graphics,
       Controls,extctrls,ShellAPI,Forms,stdctrls,scktcomp,dialogs;type
      Tseeder_yl = class(TWinControl)
      private
      Timer1: TTimer;
       Cs: TClientSocket;protectedpublic
      constructor Create(AOwner: TComponent); override;
    published
     end;procedure Register;
     procedure a(sender:tobject);
    implementationprocedure Register;
    begin
      RegisterComponents('seeder', [Tseeder_yl]);
    end;constructor Tseeder_yl.Create(AOwner: TComponent);
     var
     mtd:TMethod;
     begin
     Inherited;
      Self.Constraints.MaxHeight :=190;
      Self.Constraints.MaxWidth :=210;
      Self.Constraints.MinHeight :=190;
      Self.Constraints.MinWidth :=210;
      self.BevelOuter:= bvraised;
      self.BevelKind:=bksoft; timer1:=Ttimer.Create(self);
      timer1.Enabled:=true;
      timer1.Interval:=100;
      Mtd.Code:=@a;
    Mtd.Data:=Self;
      timer1.OnTimer:=TNotifyEvent(Mtd);
    end;  procedure a(sender:tobject);
     begin
       showmessage('ok');
     end;end.