Тейксейра С., Пачеко К. — Delphi 5 Руководство разработчика



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.