Lazarus - почему я не могу назначить событие компоненту времени выполнения? - PullRequest
0 голосов
/ 20 марта 2010

У меня есть эта программа 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) Ошибка: неверное количество параметров, указанных для вызова «OnTlacitkoClick» в tlac.OnClick: = OnTlacitkoClick; выражение. Я искал и думаю, что это законное выражение в Delphi. Я хочу просто зарегистрировать OnTlacitkoClick как событие tlac.OnClick, чтобы не вызывать эту процедуру. Что-то не так с кодом или я должен сделать это по-другому в Lazarus / Freepascal?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 21 марта 2010

Как вы уже узнали, добавьте @ или включите режим Delphi.

В режиме (obj) fpc явное @ требуется для устранения неоднозначности некоторых теневых случаев.

2 голосов
/ 21 марта 2010

Да, у меня уже есть!Я должен сделать Tlac.OnClick: = @ OnTlacitkoClick;вместо просто без'@'.

...