Esto del RTTI (Runtime Type Information) existe hace muchos años, permite obtener en run-time la información de los objetos cargados en memoria.
Una de mis intenciones es conseguir serializar / deserializar como XML mediante el uso de RTTI. Deseadme suerte.
Un ejemplo rudimentario. Para obtener la lista de propiedades (published) y eventos de un Tform:
procedure TForm1.FormCreate(Sender: TObject);
var
lista : TPropList;
count, I : integer;
begin
count := GetPropList(Sender.ClassInfo, tkAny, @lista);
for I := 0 to count – 1 do begin
showmessage(lista[I]^.Name);
end;
end;
Una desventaja que yo le veo al RTTI es que sólo puedes obtener información de las propiedades marcadas como published. Por suerte a partir de Delphi 7 existe una extensión del RTTI que compilando el código mediante la directiva $METHODINFO ON es posible obtener información de métodos y propiedades marcadas como public, en éste enlace mas información.
Mas información:
http://www.orlandobrea.com.ar/2006/02/reflection-en-delphi.html
http://delphi.about.com/od/oopindelphi/a/delphirtti.htm
http://chris.lichti.org/Lab/RTTI_Lib/RTTI_Lib.shtml
http://homepages.borland.com/jedi/jcl/