سؤال

لدي برنامج لازاروس هذا:

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؛تعبير.لقد بحثت وأعتقد أن هذا هو التعبير القانوني في دلفي.أريد ببساطة تسجيل OnTlacitkoClick كحدث tlac.OnClick، وليس استدعاء هذا الإجراء.هل هناك خطأ ما في الكود أم يجب أن أفعل ذلك بشكل مختلف في Lazarus/Freepascal؟

شكرًا.

هل كانت مفيدة؟

المحلول

كما تعلمت بالفعل، أضف @ أو قم بتمكين وضع دلفي.

في وضع (obj)fpc، يكون @ الصريح مطلوبًا لتوضيح بعض الحالات المشبوهة.

نصائح أخرى

نعم، لدي بالفعل!يجب أن أفعل Tlac.OnClick:=@OnTlacitkoClick;بدلاً من ببساطة بدون "@".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top