在 Delphi 中工作的类无法在 Lazarus 中运行
下面的类实现在 Delphi 中运行良好,但在 Lazarus 中运行时失败。
目的是异步运行计时器。
// Declaration
type
TTimerEvents = class
private
class procedure tonTimer(Sender: TObject);
end;
// Implementation
class procedure TTimerEvents.tonTimer(Sender: TObject);
var
vTag: string;
begin
(Sender as TTimer).Enabled := false;
vTag := 'Tag_' + IntToStr((Sender as TTimer).Tag);
// more stuff here
end;
// Call
procedure TmainForm.actTON(i: integer);
var
t: TTimer;
begin
t := TTimer.Create(mainForm);
t.Interval := StrToInt(vTime) * 1000;
t.Tag := vTag;
t.OnTimer := TTimerEvents.tonTimer; //<<<----HERE
t.Enabled := True;
// more stuff here
end;
错误消息:
fmmain.pas(371,33) 错误:为调用“tonTimer”指定的参数数量错误
如果我包含 Timer1 作为发送者
,则会收到不同的错误消息:
fmmain.pas(371,49) 错误:参数号的类型不兼容。 1:得到“无类型”,预期“<对象的过程(TObject)的过程变量类型;注册>”
The below class implementation works fine in Delphi, however it fails when running in Lazarus.
The purpose is to run a timer asynchronously.
// Declaration
type
TTimerEvents = class
private
class procedure tonTimer(Sender: TObject);
end;
// Implementation
class procedure TTimerEvents.tonTimer(Sender: TObject);
var
vTag: string;
begin
(Sender as TTimer).Enabled := false;
vTag := 'Tag_' + IntToStr((Sender as TTimer).Tag);
// more stuff here
end;
// Call
procedure TmainForm.actTON(i: integer);
var
t: TTimer;
begin
t := TTimer.Create(mainForm);
t.Interval := StrToInt(vTime) * 1000;
t.Tag := vTag;
t.OnTimer := TTimerEvents.tonTimer; //<<<----HERE
t.Enabled := True;
// more stuff here
end;
Error msg:
fmmain.pas(371,33) Error: Wrong number of parameters specified for call to "tonTimer"
If I include Timer1 as Sender
then I get a different error msg:
fmmain.pas(371,49) Error: Incompatible type for arg no. 1: Got "untyped", expected "<procedure variable type of procedure(TObject) of object;Register>"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

从这些错误来看,您可能正在测试 Delphi 代码,而没有使用 {$mode delphi} 启用完整的 Delphi 兼容模式。
From the errors you are probably testing Delphi code without enabling full Delphi compatibility mode with {$mode delphi}.