RTTI
– информация о типах времени выполнения.
4 базовых типах компонентов:
·
стандартные
·
пользовательские
·
графические элементы управления
·
невизуальные компоненты
Компоненты всегда происходят от класса TComponent.
TCustomControl = class(TWinControl) private FMaxLength: Integer; protected procedure SetMaxLength(Value: Integer); … published property MaxLength: Integer read FMaxLength write SeteMaxLength default 0; end; procedure SetMaxLength(Value: Integer); begin if FMaxLength <> Value then begin FMaxLength := Value; if HandleAllocated then SendMessage(Handle, EM_LIMITTEXT, Value, 0); end; end;
Типы свойств:
·
Простой
·
Перечислимый
·
Множество
·
Объект
·
Массив
События возникают в результате выполнения каких-либо
действий. События это указатели на методы.
TForm1 = class(TForm) Button1: TButton; … private MyOnClickEvent(Sender: TObject); end; … procedure TForm1.MyOnClickEvent(Sender: TObject); begin end; procedure TForm1.FormCreate(Sender: TObject); begin Button1.OnClick := MyOnClickEvent; end; Button1.OnClick := nil; TControl = class(TComponent) private FOnMouseDown: TMouseEvent; protected property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown; public end;
Владелец компонента определяется его свойством Owner.
MyButton := TButton.Create(self); //форма становится владельцем создаваемого компонента MyTable := TTable.Create(nil) //ничейный компонент try {Обработка MyTable по своему усмотрению} finally MyTable.Free; end;
Свойство Components представляет собой массив компонентов
принадлежащих компоненту-владельцу.
Лишь при создании классов, не являющихся компонентами, их
имеет смысл делать потомками TObject.
·
Create()
·
Destroy()
Используйте метод TObject.Free()
вместо метода TObject.Destroy() т.к. он вызывает метод
Destroy() но перед этим
проверяет не имеет ли указатель объекта значение nil.