0

私はこの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.

しかし、コンパイラはtlac.OnClick := OnTlacitkoClick;式に次のエラーを言います。

unit2.pas(63,32)エラー:「OnTlacitkoClick」の呼び出しに指定されたパラメーターの数が間違っています

私は検索しましたが、これはDelphiでの合法的な表現だと思います。このプロシージャを呼び出さずに、単にイベントハンドラOnTlacitkoClickとして登録したい。tlac.OnClick

コードに何か問題がありますか、それともLazarus / FreePascalで別の方法で行う必要がありますか?

4

2 に答える 2

8

すでにわかっているように、@を追加するか、Delphiモードを有効にします。

(obj)fpcモードでは、いくつかの怪しげなケースを明確にするために明示的な@が必要です。

于 2010-03-21T20:26:53.243 に答える
3

はい、私はすでにそれを持っています!Tlac.OnClick := @OnTlacitkoClick;単になしではなく、やらなければなりません@

于 2010-03-21T13:15:19.753 に答える