Problema con chiamata procedure ( callback) ( risolto )

di il
1 risposte

Problema con chiamata procedure ( callback) ( risolto )

Problema, faccio un esempio banale del codice che devo realizzare 

type
  TMio = Function(a:String):Integer;
  TForm1 = class(TForm)
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
  private
    TempValore : Integer;
    { Private declarations }
    Funzione:TMio;
    procedure go;

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


procedure TForm1.Button2Click(Sender: TObject);
Var Valore : Integer;
  Function due(a:String):Integer;
  Begin
   Form1.Caption := a;
   Valore := 2;
   due := 1;
 End;

begin
  Funzione := @due;
  go;
  caption := caption + inttostr(TempValore);
end;

procedure TForm1.go;
begin
 Funzione('ciao');
end;

quando da “go” chiamo la funzione “funzione” la variabile “Valore” non è accessibile ( in questo caso mi sta anche bene, non è vero), anche usando la variabile “TempValore” dichiarata all'interno della classe mi da un errore di accesso. 
L'unico modo che mi funziona ma non mi piace è mettere una variabile globale.

grazie.

1 Risposte

  • Re: Problema con chiamata procedure ( callback) ( risolto )

    Risolto dichiarando usando la funzione due come metodo della classe, pubblico la soluzione.
    Sembra che la soluzione di sopra perdesse i riferimento alla classe e quindi i riferimenti alle variabili.

    type
      TMio = Function(a:String;rc:TRect):Integer of object;
      TForm1 = class(TForm)
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
        TempValore : Integer;
        Funzione:TMio;
        procedure go;
        Function due(a:String;rc:TRect):Integer;
    
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.DFM}
    
    Function TForm1.due(a:String;rc:TRect):Integer;
    Begin
     TempValore := 2;
     Caption := a;
    End;
    
    procedure TForm1.Button2Click(Sender: TObject);
    Var Valore : Integer;
        Base : TForm;
    begin
      Base := Form1;
      Funzione := due;
      go;
      caption := caption + inttostr(TempValore);
    end;
    
    procedure TForm1.go;
    begin
      Funzione('ciao',rect(10,10,10,10));
    end;
    end.
    
Devi accedere o registrarti per scrivere nel forum
1 risposte