Bonjour,

je souhaite tracer dans un mémo tous les évènements liés à ma fiche (onClick sur boutons, onEnter, onExit, etc..) et ceci dynamiquement. C'est a dire sans devoir affecter à chaque évènement un bout de code me permettant de créer une trace.

Je suis parti dans l'optique de récupérer tous les composants de ma fiche (maForme.Component[i]) puis de récupérer les méthodes associées à ce composant via l'unité TypInfo et sa méthode GetPropList.

La ou je pêche c'est comment affecter une méthode unique (qui fera les traces) à tous ses évènements.

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
type
  TUneProcedure = procedure (obj : TObject);
 
 
TForm1 = class(TForm)
  ....
  private
    procedure GestionComposants;
    procedure maMethodeDeTrace(Sender : TObject);
  public
 
  end;
 
...
 
procedure TForm1.GestionComposants;
var
  pt : PPropList;
  i, j, z : Integer;
  PFonc : TUneProcedure;
begin
  New (Pt);
  PFonc := maMethodeDeTrace; // Je bloque ici
  for i := 0 to self.ComponentCount - 1 do
  begin
    j := GetPropList(PTypeInfo(Self.Components[i].ClassInfo), [tkMethod], pt);
    for z := 0 to j - 1 do
    begin
      PPropInfo(pt[i]).SetProc := PFonc(Self.Components[i]); // et ici.
    end;
  end;
end;
J'obtiens les erreurs suivantes :
[DCC Erreur] Unit1.pas(378): E2009 Types incompatibles : 'procédure normale et pointeur de méthode'
[DCC Erreur] Unit1.pas(384): E2010 Types incompatibles : 'Pointer' et 'procedure, untyped pointer or untyped parameter'


Si vous avez des conseils (autres techniques bienvenues) ou des remarques je suis preneur

Merci d'avance