Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Узнать класс формы

01.01.2007
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;
 
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;