Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Найти классы, зарегистрированные классом формы

Delphi , Компоненты и Классы , Классы

Найти классы, зарегистрированные классом формы

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

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;

Программа на Delphi, которая ищет все классы, зарегистрированные другим классом (родительским классом). Цель программы - отобразить все классы, зарегистрированные для каждого родительского класса.

Описание работы программы:

  1. Она определяет тип записи TFieldClassTable, который содержит целое число (Count) и массив ссылок на классы (Classes).
  2. Затем она определяет функцию GetFieldClassTable, которая принимает класс в параметре и возвращает связанную с этим классом таблицу полей (FieldClassTable). Это делается путем доступа к виртуальному методному таблице (VMT) класса.
  3. В обработчике события Button1Click она очищает компонент мемо (memo1) и затем перебирает все классы в иерархии наследования, начиная от самого себя (TForm1).
  4. Для каждого класса она отображает имя класса и проверяет, есть ли зарегистрированные классы, связанные с этим классом. Если нет зарегистрированных классов, она отображает сообщение "No classes registered".
  5. Если есть зарегистрированные классы, она отображает количество классов и затем перебирает все зарегистрированные классы, отображая их имена.
  6. Используется свойство ClassParent для навигации вверх по иерархии наследования. Цикл продолжается до тех пор, пока не будет достигнут базовый класс TPersistent.

В статье описывается способ нахождения классов, зарегистрированных в классе формы Delphi, с помощью функции GetFieldClassTable и цикла поиска родительских классов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Классы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:13:24/0.0032460689544678/0