从TWinControl基类上自建组件 从TWinControl基类上自建组件,并加入了Ttimer,Tclientsocket标准组件,如何编辑标准组件中的事件?比如我要让timer发挥作用,能够输入一段代码来监控一些状态,这些代码怎么输入到timer其中,并让他发挥作用。 我现在已加入了这些控件,只是不能使用他们的事件. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 procdedure urOntimr(...)begin//你的操作end;timer.ontimer:=urtimer; procdedure a(Sender:Tobject);begin{你的操作}end;timer.ontimer:=a;其实:timer的事件的参数与所对应过程的参数要一致。 可以的,应该是你的赋值语句或者格式的问题,你也可以自己用指针比如上面传入urOntimr或者@urOntimr 还是出错呀,提示:seeder_yl.pas(59): Unsatisfied forward or external declaraton:'tseeder_yl.a'光标停在 procdedure a(Sender:Tobject); 声明的地方 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;就是这个出错的,能指点一下吗? 1.在自建控件类的私有成员定义以上对象引用2.要加上以上类所在单元3.在自建控件的Create事件中事例化成员组件,用Self代表自身4.普通过程是不能作为方法赋值的,所以它必须是一个类成员过程,当然也可以通过填充一个TMethod记录来实现!如:var Mtd:TMethod;Mtd.Code:=@a;Mtd.Data:=Self;FTimer.OnClick:=TNotifyEvent(Mtd);当然最简单的方法还是a作为自建控件类的成员定义 procedure TMyWinControl.a(Sender:Tobject);//少了所属的类 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.好像还不行,能给段代码吗? 正确的是: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. 数据库时informix insert语句含中文就插入失败 散分~~~~回家准备结婚去了 delphi和vb两个都懂的人请进,做出来的话,加分同时再加现金作为报酬,分另外开题再加 使用Delphi中的ADO连接有密码的Access数据库问题 菜鸟问题,读取缓冲区的内容!急!!!! question!!! 怎样做一个监视桌面上是不是有一个标题为"Apple"的窗口,一旦有,马上关闭 delphi6要出官方中文版了 想和大家交个朋友。 为何报表预览总显示不出来query的动态查询结果? 送分!! 菜鸟问题 那里有devexpress for d6 下载?
begin
//你的操作
end;timer.ontimer:=urtimer;
begin
{你的操作}
end;timer.ontimer:=a;
其实:timer的事件的参数与所对应过程的参数要一致。
@urOntimr
seeder_yl.pas(59): Unsatisfied forward or external declaraton:'tseeder_yl.a'光标停在 procdedure a(Sender:Tobject); 声明的地方
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;就是这个出错的,能指点一下吗?
2.要加上以上类所在单元
3.在自建控件的Create事件中事例化成员组件,用Self代表自身
4.普通过程是不能作为方法赋值的,所以它必须是一个类成员过程,当然也可以通过填充一个TMethod记录来实现!如:
var
Mtd:TMethod;Mtd.Code:=@a;
Mtd.Data:=Self;
FTimer.OnClick:=TNotifyEvent(Mtd);当然最简单的方法还是a作为自建控件类的成员定义
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.
好像还不行,能给段代码吗?
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.