Bonjour

Je possède un object TParser qui possède un evenement OnGetVar : TGetVarEvent

Il s'agit bien entendu d'une procedure of object

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
TGetVarEvent = procedure(Sender : TObject; VarName : string; var
    Value : Extended; var Found : Boolean) of object;
Mon problème et que je voudrais connecter une procedure local qui n'est dnc pas une procedure of objects

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
FUNCTION TFenetre.Preparer_affichage_resultats:Boolean;
 
    PROCEDURE Evt_Remplir_Variables(Sender : TObject; VarName : string;
var Value : Extended; var Found : Boolean);
    BEGIN
      Value:=0;
    END;
 
BEGIN
  Mon_Parser.OnGetVar:=Evt_Remplir_Variables
  .....
END;
Bien entendu cela ne fonctionne pas, j'ai essayais diverses options (Addr, @, transtypage) mais rien n'y fait. Pourtant j'ai souvenir d'avir déjà fait ce genre de manip et que c'était simple .... mais j'ai un trou (où alors je rêve )

Si une bonne âme pouvait me dépanner, merci

N.B. Je ne peux pas mettre ma proc Evt_Remplir_Variables au niveau de TFenetre, ce qui résoudrai le "problème". Le contexte de calcul se trouve dans Preparer_affichage_resultats et pas ailleurs

[EDIT]
Je pense avoir trouvé, en tant cas cela compile...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
FUNCTION TFenetre.Preparer_affichage_resultats:Boolean;
VAR
  POnGetVar : ^Parser_Math.TGetVarEvent;
 
    PROCEDURE Evt_Remplir_Variables(Sender : TObject; VarName : string;
var Value : Extended; var Found : Boolean);
    BEGIN
      Value:=0;
    END;
 
BEGIN
  POnGetVar :=@Evt_Remplir_Variables;
  Mon_Parser.OnGetVar:=POnGetVar^;
  .....
END;

[EDIT]
Non cela plante majestueusement...

[edit] Modifié par Pascal Jankowski pour éviter la déformation du forum [/edit]