很郁闷的问题(50分)

  • 主题发起人 主题发起人 mystudy
  • 开始时间 开始时间
M

mystudy

Unregistered / Unconfirmed
GUEST, unregistred user!
帮我看看这个怎么会有问题的
unit unit1;

interface
uses
Windows,Messages,SysUtils,ExtCtrls,Classes;
procedure myontime(sender:TObject);
var
mytimer:Ttimer;
procedure myontime(sender:TObject);
begin
//
end;


initialization
mytimer:=Ttimer.Create(nil);
mytimer.Interval:=100;
mytimer.Enabled:=false;
mytimer.OnTimer:=myontime;//这句怎么会出错的

finalization
mytimer.Enabled:=false;
mytimer.Free;
end.
 
procedure myontime(sender:TObject);
看方法的声明和timer的ontimer的原型是否一致(记不清了)
不行的话将procedure myontime(sender:TObject);声明在窗体类中试试
 
不能这样调用
一个过程怎么能 赋值给 TNotifyEvent类型呢?
 
解决方法:
procedure ShiftToHide(handle: HWND; Msg, idEvent: uint; dwTime: DWORD); stdcall ;
implementation
procedure ShiftToHide(handle: HWND; Msg, idEvent: uint; dwTime: DWORD);
begin
//Ontime........
end;
initialization
SetTimer(application.handle, 3, 100, @ShiftToHide);
//其实这句不应该放在这了,我是给出示范,你在什么时候要timer Enable就在什么位置调用;
finalization
KillTimer(application.Handle,3);
end.
 
to 52free
应该是一致的,我建个窗体可以,但是这个写不行的,不知道什么原因
to xuxiaohan
有什么好的办法吗
 
主要是initialization
中的语句先执行,而认为myontime还没声明好,可能是这个原因
 
mytimer.OnTimer:=myontime;//这句怎么会出错的
看TNotifyEvent的声明
TNotifyEvent = procedure(Sender: TObject) of object;//对象方法

所以OnTimer是一个对象的方法属性, myontime也应该是对象方法,

 
写在类中,比如:
....
type
TForm1 = class(TForm)
Timer1: TTimer;
private
mytimer: TTimer;
procedure myontime(Sender: TObject);
{ Private declarations }
public
Constructor Create(AOwner: TComponent);override;
Destructor Destroy;override;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
mytimer:=Ttimer.Create(nil);
mytimer.Interval:=100;
mytimer.Enabled:=false;
mytimer.OnTimer:=myontime;
end;
destructor TForm1.Destroy;
begin
mytimer.Enabled:=false;
mytimer.Free;
inherited;
end;
procedure TForm1.myontime(Sender: TObject);
begin
end;
initialization
finalization
end.

TNotifyEvent = procedure(Sender: TObject) of object,
这种声明实际上要传递对象的指针,所以,写在类中
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1448859
为什么我动态创建的timer,它的ontimer事件就不触发呢?
 
多人接受答案了。
 
后退
顶部