2010-03-20 26 views
0

J'ai ce programme Lazare:Lazarus - pourquoi je ne peux pas assigner un événement à un composant d'exécution?

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. 

mais dit compilateur: unit2.pas (63,32) Erreur: nombre de paramètres spécifiés pour appel à "OnTlacitkoClick" dans tlac.OnClick: = OnTlacitkoClick; expression. J'ai cherché et je pense que c'est une expression légale dans Delphi. Je veux simplement enregistrer OnTlacitkoClick en tant qu'événement tlac.OnClick, pour ne pas appeler cette procédure. Y at-il quelque chose qui ne va pas avec le code ou dois-je le faire différemment dans Lazarus/Freepascal?

Merci.

Répondre

6

Comme vous l'avez déjà découvert, ajoutez le @ ou activez le mode Delphi.

En mode (obj) fpc, le @ explicite est requis pour désambiguïser certains cas douteux.

2

Oui, je l'ai déjà! Je dois faire Tlac.OnClick: = @ OnTlacitkoClick; au lieu de simplement sans '@'.