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.