我有这个Lazarus计划:
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, ComCtrls;
type
{ TForm2 }
TForm2 = class(TForm)
procedure OnTlacitkoClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
tlac:TButton;
private
{ private declarations }
public
{ public declarations }
end;
var
Form2: TForm2;
implementation
{ TForm2 }
procedure TForm2.OnTlacitkoClick(Sender: TObject);
begin
showmessage('helloworld');
end;
procedure TForm2.FormCreate(Sender: TObject);
var i,j:integer;
begin
tlac:=TButton.Create(Form2);
tlac.OnClick:=OnTlacitkoClick;
tlac.Parent:=Form2;
tlac.Left:=100;
tlac.Top:=100;
end;
initialization
{$I unit2.lrs}
end.
但编译器说:unit2.pas(63,32)错误:在tlac.OnClick中调用“OnTlacitkoClick”时指定的参数数量错误:= OnTlacitkoClick;表达。我搜索并认为这是德尔福的法律表达。我想简单地将OnTlacitkoClick注册为tlac.OnClick事件,而不是调用此过程。代码是否有问题,或者我必须在Lazarus / Freepascal中做到与众不同吗?
感谢。
答案 0 :(得分:7)
正如您已经发现的那样,添加@或启用Delphi模式。
在(obj)fpc模式中,显式@需要消除一些阴暗情况的歧义。
答案 1 :(得分:2)
是的,我已经拥有它了!我必须做Tlac.OnClick:= @ OnTlacitkoClick;而不是简单地没有'@'。