RTTI и другие трюки с информацией о классах, модулях и т.п.
Мне необходима функция, которая возвращала бы имя класса компонента и имя модуля, где определен данный класс.
Например: xxx('TPanel') возвращала бы 'ExtCtrls'
Также мне необходима функция, возвращающая список имен страниц палитры компонентов.
Code: |
Uses TypInfo;
Function ObjectsUnit (Obj: TClass): String; Begin Result := GetTypeData (PTypeInfo(Obj.ClassInfo))^.UnitName end; |
Для создания описанной вами функции "Какой модуль" могут использоваться описанные в TOOLINTF.INT методы GetModuleCount, GetModuleName, GetComponentCount и GetComponentName.
Для получения представления о формате палитры компонентов обратитесь к файлу DELPHI.INI.
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Предмет данной статьи - инспектор объектов как средство, доступное конечному пользователю некоторой прикладной программы. Само понятие "инспектор" трактуется в данном случае очень широко: инспектор - это инструмент прикладной программы, с помощью которого пользователь может посмотреть и изменить свойства тех объектов, с которыми он работает. Отметим, что речь идет о любых объектах прикладного уровня, а не только о визуальных компонентах (как в Delphi).
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
I would like to change the font color on all components on a form at runtime (and the components owned by the components etc). I devised a recursive algorithm using RTTI that accepts a TComponent as a parameter. It works to some extent, but I still have to use 'if' statements to cast the object to a particular descendant, resulting in about 30 lines of code to test for all of the components I use. Also, some objects (TColumnTitle), are not descended from TComponent, even though they have a font property.
This may do the trick (with D6 and maybe D5):
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Как выполнить метод по его имени?
Ниже представлен пример кода:
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Как определить, насдледовано ли свойство от определённого класса?
Ниже представлен пример кода:
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Как выяснить имеет ли объект определённое свойство?
Ниже представлен пример кода:
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
If I am given a TPersistent object, and a method name, is there a way to determine if the name is an event of TNotifyEvent type? For example, given a TPersistent lMyObj and an event name, "OnDataChanged", how can I determine if OnDataChanged is a TNotifyEvent?
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Как динамически прочитать информацию о классе:
Ниже представлен код:
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Как получить значение свойства в виде варианта по тексту имени свойства?
Ниже представлен пример кода:
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Code: |
function GetProperty(AControl: TPersistent; AProperty: String): PPropInfo; var i: Integer; props: PPropList; typeData: PTypeData; begin Result := nil; if (AControl = nil) or (AControl.ClassInfo = nil) then Exit; typeData := GetTypeData(AControl.ClassInfo); if (typeData = nil) or (typeData^.PropCount = 0) then Exit; GetMem(props, typeData^.PropCount * SizeOf(Pointer)); try GetPropInfos(AControl.ClassInfo, props); for i := 0to typeData^.PropCount - 1do begin with Props^[i]^ do if (Name = AProperty) then result := Props^[i]; end; finally FreeMem(props); end; end;
procedure TForm1.Button1Click(Sender: TObject); var propInfo: PPropInfo; begin PropInfo := GetProperty(Button1.Font, 'Name'); if PropInfo <> nilthen SetStrProp(Button1.Font, PropInfo, 'Arial'); end; |
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Как получить контекст свойства по его целочисленному значению?
Ниже представлен пример кода:
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Страница 1 из 2