Retrouver les Class enregistrée sur un TForm

{

Question:
How can I get all classes that are currently registered in my application?

Answer: There is no way to get at classes registered via RegisterClasses, since the
list holding these is private to the classes unit. You can get at the classes
registered on a form, however, since those use a table connected to the form
classes class record. The following is based on some spelunking in the classes unit:
}

// defined in classes.pas
type
PFieldClassTable = ^TFieldClassTable;
TFieldClassTable = packed record
Count: Smallint;
Classes: array[0..8191] of ^TPersistentClass;
end;

function GetFieldClassTable(AClass: TClass): PFieldClassTable; assembler;
asm
MOV EAX,[EAX].vmtFieldTable
OR EAX,EAX
JE @@1
MOV EAX,[EAX+2].Integer
@@1:
end;
// end of quote from classes.pas

procedure TForm1.Button1Click(Sender: TObject);
procedure Display( const S: string);
begin
memo1.Lines.Add(S);
end;
var
pFCT: PFieldClassTable;
aClass: TClass;
i: SmallInt;
begin
memo1.Clear;
aClass := Classtype;
while aClass <> TPersistent do
begin
Display('Registered classes for class ' + aClass.ClassName);
pFCT := GetFieldClasstable(aClass);
if not Assigned(pFCT) then
Display(' No classes registered')
else
begin
Display(Format(' %d classes registered', [pFCT^.Count]));
for i := 0 to pFCT^.Count - 1 do
Display(' ' + pFCT^.Classes[i]^.ClassName);
end;
aClass := aClass.ClassParent;
end
end;
Ajouter un commentaire
Pseudo
Adresse email
Site internet (optionnel)
Votre commentaire
Fiche de l'article
Mise a jour14/11/2004
VisualisationVu 727 fois
PublicInternaute zz
CategorieDelphi - Trucs et astuces - Autre categorie
Auteur de l'article
SwissDelphiCenter SwissDelphiCenter
connecté le 02/11/2011
329 articles dans la section
Contacter l'auteur