RTTI и другие трюки с информацией о классах, модулях и т.п.
Delphi — это мощная среда визуальной разработки программ сочетающая в себе весьма простой и эффективный язык программирования, удивительный по быстроте компилятор и подкупающую открытость (в состав Delphi входят исходные тексты стандартных модулей и практически всех компонент библиотеки VCL). Однако, как и на солнце, так и в Delphi существуют пятна (на солнце черные, а в Delphi — белые), пятна недокументированных (или почти не документированных) возможностей. Одно из таких пятен — это информация о типах времени исполнения и методы работы с ней.
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: 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 и другие трюки с информацией о классах, модулях и т.п.
Мне необходима функция, которая возвращала бы имя класса компонента и имя модуля, где определен данный класс.
Например: 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 и другие трюки с информацией о классах, модулях и т.п.
I need to get a list of strings (like a StringList) with the possible values for a TBrushStyle property (bsSolid, bsClear, bsHorizontal, for example). I want to build a ComboBox with this options. How can I set the property Items of my ComboBox directly with all the values from the enumerated type TBrushStyle? My ComboBox will be alike the Property Editor for this type.
You can use runtime type information (RTTI) to do that. Below is an example:
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Как динамически прочитать информацию о классе:
Ниже представлен код:
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Как выполнить метод по его имени?
Ниже представлен пример кода:
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Копирование свойств одного компонента другому
Ниже представлен фрагмент кода:
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Как получить строковое значение перечисляемого типа?
Ниже представлен пример кода:
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Предмет данной статьи - инспектор объектов как средство, доступное конечному пользователю некоторой прикладной программы. Само понятие "инспектор" трактуется в данном случае очень широко: инспектор - это инструмент прикладной программы, с помощью которого пользователь может посмотреть и изменить свойства тех объектов, с которыми он работает. Отметим, что речь идет о любых объектах прикладного уровня, а не только о визуальных компонентах (как в Delphi).
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Code: |
Application.ExeName ParamStr(0) GetModuleFileName() |
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
You may need to know at runtime what properties are available for a particular component at runtime. The list can be obtained by a call to GetPropList. The types, functions and procedures, including GetPropList, that allow access to this property information reside in the VCL source file TYPINFO.PAS.
- Подробности
- Родительская категория: Язык программирования Дельфи
- Категория: RTTI и другие трюки с информацией о классах, модулях и т.п.
Страница 1 из 2