Ver Mensaje Individual
  #13  
Antiguo 05-02-2009
poyo poyo is offline
Miembro
 
Registrado: ene 2009
Posts: 47
Reputación: 0
poyo Va por buen camino
Bueno, actualicé eso que veníamos hablando en el otro hilo de las VMT y actualicé el RTTIUtils.pas y lo subí al FTP (en Delphi-Win32/Recursos):

http://www.terawiki.clubdelphi.com/a.../RttiUtils.zip

Bueno, además de lo que estaba, le agregué una función que salió de esta conversación. Es la siguiente:

function IsOverrideMethod(AClass, Ancestor: TClass; MethodIndex: Integer ): boolean;

Adentro se chequea que los argumentos sean válidos y luego Itera por la jerarquía de herencias...
mmmm..... ahora que lo pienso a lo mejor está de más eso...
no sé... bué... ya está, luego veremos.

Ejemplo de Uso:

Código Delphi [-]
TPadre = class (TObject)
   procedure a; virtual; abstract;
   procedure b; virtual;
 end;

 THijoA = class (TPadre)
   procedure a; override;
 end;

 THijoB = class (TPadre)
   procedure b; override;
 end;

 THijoC = class (THijoB)
   procedure a; override;
   procedure b; override;
 end;

 THijoD = class (THijoC)
 end;

 THijoE = class (TPadre)
 end;

 THijoF = class (THijoD)
   procedure a; override;
 end;

 THijoG = class (THijoE)
 end;

 THijoH = class (THijoG)
 end;

implementation

uses 
  rttiutils;

procedure TPadre.b;
begin
end;

procedure THijoA.a;
begin
end;

procedure THijoB.b;
begin
end;

procedure THijoC.a;
begin
end;

procedure THijoC.b;
begin
end;

procedure THijoF.a;
begin
end;

procedure check(AClass: TClass);
begin
  if IsOverrideMethod(AClass,TPadre,0) then
    Showmessage(Aclass.ClassName + ': Index 0 = Override!');
  if IsOverrideMethod(AClass,TPadre,1) then
    Showmessage(Aclass.ClassName + ': Index 1 = Override!');
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Check(THijoA);
  Check(THijoB);
  Check(THijoC);
  Check(THijoD);
  Check(THijoE);
  Check(THijoF);
  Check(THijoG);
  Check(THijoH);
end;

Se escuchan comentarios, sugerencias y derivadas
Responder Con Cita