dum*_*uch 7 delphi delphi-2007
给出以下记录类型:
type
TMyRecord = record
private
procedure SomeMethod(_Sender: TObject);
end;
Run Code Online (Sandbox Code Playgroud)
应该可以将此方法指定为事件处理程序吗?
var
MyRecord: TMyRecord;
begin
Button1.OnClick := MyRecord.SomeMethod;
end;
Run Code Online (Sandbox Code Playgroud)
在Delphi 2007中,我在分配后得到内部编译器错误C1264.
我不确定Record方法的内部结构是否满足分配给事件指针的要求.
编辑:正如David Heffernan所指出的,这是Delhpi 2007中的编译器错误.我最终使用了以下解决方法:
type
TMyRecord = record
private
procedure SomeMethod(_Sender: TObject);
function GenerateNotifyEvent(_CodePtr: pointer): TNotifyEvent;
end;
function TMyRecord.GenerateNotifyEvent(_CodePtr: pointer): TNotifyEvent;
var
Method: TMethod;
begin
Method.Data := @Self;
Method.Code := _CodePtr;
Result := TNotifyEvent(Method);
end;
var
MyRecord: TMyRecord;
begin
Button1.OnClick := MyRecord.GenerateNotifyEvent(@TMyRecord.SomeMethod);
end;
Run Code Online (Sandbox Code Playgroud)
不像简单的任务那么好,但足够好.我只是希望我可以简单地更新到更新版本的Delphi,其中修复了该错误.
是的,你应该能够做到这一点.您可以指定以下类型的方法:
object关键字引入的不推荐使用的类型.由于这是内部编译器错误,这似乎是Delphi 2007中的编译器错误.当然,您的代码将在更高版本的Delphi中编译.
QC#59807似乎与您的问题非常相似.根据该错误报告,它在构建11.0.2902.10471中得到了解决.然后,也许就是这个:QC#60621报告在构建12.0.0.15784中被解析.
如果无法升级到没有错误的编译器,请执行以下操作:
var
Method: TMethod;
....
Method.Code := @TMyRecord.SomeMethod;
Method.Data := @MyRecord;
Button1.OnClick := TNotifyEvent(Method);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |