在 Delphi 中工作的类无法在 Lazarus 中运行

发布于 01-14 01:40 字数 976 浏览 4 评论 0原文

下面的类实现在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

指尖微凉心微凉2025-01-21 01:40:10

从这些错误来看,您可能正在测试 Delphi 代码,而没有使用 {$mode delphi} 启用完整的 Delphi 兼容模式。

From the errors you are probably testing Delphi code without enabling full Delphi compatibility mode with {$mode delphi}.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文