ActiveX в Delphi


Типы времени выполнения (RTTI)



Информация о типе во время выполнения (Runtime Type Information, RTTI) - это способность среды Delphi предоставлять приложению информацию об объектах во время выполнения приложения. Так как все объекты Delphi являются потомками класса TObject, то все они содержат указатель на информацию о типе, а также методы для работы с этой информацией. В приведенной ниже табл. 2.8 приведены некоторые из этих методов.
Таблица 2.8. Методы для работы с RTTI


Название метода

Тип возвращаемого результата

Результат

Classlnfo

Pointer

Указатель на информацию о типе объекта

ClassName

String

Имя класса объекта

ClassParent

Tclass

Тип класса-предка объекта

ClassType

Tclass

Тип объекта

InheritsFrom

Boolean

Является ли объект потомком данного класса

InstanceSize

Word

Размер объекта, как экземпляра класса, в байтах


Для работы с информацией о типе времени исполнения в Delphi имеется два основных оператора: is и as. Первый применяется для сравнения типов, второй - для преобразования типов времени выполнения.
Информация о типе времени выполнения используется в Delphi в основном для определения, с объектом какого типа работает сейчас приложение. Рассмотрим пример использования информации RTTI. Разместим на новой форме несколько различных компонентов. Предположим, что в какой-то момент во время работы приложения нам необходимо отключить все кнопки, расположенные на форме. Для реализации этого можно пройтись по всем компонентам формы, узнать их тип, и если это тип TButton, то задать свойству Enabled данного компонента значение false. Код для этого примера приведен на листинге 2.5.

Листинг 2.5
for i:=0 to ComponentCount-1 do
if Components[i] is TButton then
TButton(Components[i]).Enabled:=false;

В данном примере мы используем оператор is для определения типа компонента. Теперь рассмотрим пример использования оператора as. Код, представленный на листинге 2.6, отключает все компоненты, которые произошли от одного предка TControi.

Листинг 2.6
for i:=0 to ComponentCount-1 do
(Sender as TControi).Enabled:=false;

Глава 5 Содержание Глава 7



Содержание раздела