2010-03-20 39 views
0

我有這個拉扎勒斯程序:拉撒路 - 爲什麼我不能將事件分配給運行時組件?

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)錯誤:用於調用 「OnTlacitkoClick」 在tlac.OnClick指定的參數數目錯誤:= OnTlacitkoClick;表達。我已經搜索並認爲這是Delphi中的合法表達。我只想將OnTlacitkoClick註冊爲tlac.OnClick事件,而不是調用此過程。代碼中是否存在某些錯誤,或者我是否應該在Lazarus/Freepascal中做到這一點?

謝謝。

回答

6

正如您已經發現的那樣,添加@或啓用Delphi模式。

在(obj)fpc模式下,顯式@需要消除一些陰暗情況的歧義。

2

是的,我已經擁有了!我必須做Tlac.OnClick:= @ OnTlacitkoClick;而不僅僅是沒有'@'。

相關問題