
- •1.Операционные системы, классификация, функциональные
- •2. Подсистема защиты информации
- •3. Многослойность ос, ядро и вспомогательные функции.
- •4. Управление оперативной памятью: основные подходы.
- •2 Способа преобразования виртуального адреса в физический.
- •Организация виртуальной памяти, стратегии вытеснения страниц
- •6. Преобразование виртуального адреса в физический
- •9. Структурная обработка исключений
- •10. Пример работы с ис (конвертирование графических форматов)
- •11. Создание компонентов, иерархия, области видимости
- •12. Создание свойств
- •13. События компонентов
- •14. Пример создания компонента часы
- •15. Пример создания компонента с опубликованным свойством Tstrings.
- •16. Класс Tstrings
- •17. Свойства и методы Tcanvas
- •18. Встроенные графические классы
12. Создание свойств
Простейший вид: property <имя свойства>: <тип свойства> [read <метод чтения свойства>] [write <метод записи свойства>].
Пример:
interface
type
TMyClass=class(TParentClass)
private
FField: integer; //поле
protected
function GetField: string; //метод
procedure SetField (AValue: string); //метод
published
property PField: string read GetField write SetField; //свойство
end;
ver MyObj: TMyClass; //экземпляр
implementation
function TMyClass.GetField:string;
begin
result:=IntToStr(FField)
end;
Procedure TMyClass.SetField(AValue:string);
var x,Code:integer;
begin
Val(AValue,x,Code);
//проверка корректности нового значения
if (x<>FField) and (Code=0) then
begin
FField:=x;
//дополнительные действия, если они необходимы
end;
end;
end.
Свойство может быть векторным:
property Items[Index: integer]: real read GetItems wrte SetItems;
Методы чтения и обновления:
function GetItems (Index: integer):real;
procedure SetItems (Index: integer; NewValue: real);
Некоторые редакторы свойств:
Простой
Перечислимый
Множество
Объект
Базовый класс для редакторов свойств: TpropertyEditor
Каждый компонент имеет конструктор:
constructor Create (AOwner: TComponent); override;
Деструктор: destructor Destroy; override или метод Free, он безопаснее, так как перед вызовом деструктора он проверяет наличие компонента в памяти.
13. События компонентов
Событие компонента — это его свойство процедурного типа, предназначенное для создания реакции компонента на те или иные внешние воздействия. События имеют различное число параметров, обычно: Sender типа Tobject, указывающий на объект — источник события.
Свойство события OnClick: type TNotifyEvent = procedure (Sender: TObject) of object;
Обычный тип и процедурный тип для метода несовместимы, так как метод, кроме описанных параметров, неявно передает параметр Self – указатель на вызвавший его объект. Событию можно присваивать только методы класса, совместимые по числу и типу параметров.
OnMouseMove: type TMouseMoveEvent = procedure(Sender: TObject; Shift:
TShiftState; X, Y: Integer) of object; //Shift – было ли нажатие клавиш.
События нажатия кнопки мыши OnMouseDown/OnMouseUp:
type
TMouseEvent = procedure(Sender: TObject;
Button: TMouseButton; Shift: TShiftState;
X, Y: Integer) of object;
где Button: TMouseButton – идентификатор кнопки,
TMouseButton = (mbLeft, mbRight, mbMiddle).
Нажатие и отпускание клавиш клавиатуры OnKeyDown:
type TKeyEvent = procedure(Sender: TObject;
var Key: Word; Shift: TShiftState) of object;
где Key – виртуальный код Windows нажатой клавиши.
Событие OnKeyPressed возникает при вводе с клавиатуры символа- ASCII. Здесь Key – ASCII-код нажатой клавиши имеет тип
type
TKeyPressEvent = procedure(Sender: TObject;
var Key: Char) of object;
Совместные события можно присваивать во время выполнения программы:
Button1.OnMouseMove:=Button2.OnMouseMove;
В результате один объект будет использовать обработчики совместимого события друго объекта — делегирование.
Итак, события реализуются с помощью указателей на методы. Для каждого события определяются свойства. Это позволяет использовать Инспектор объектов для назначения событиям обработчиков во время проектирования.
type
TControl = class(TComponent)
private
FOnClick : TNotifyEvent;
FOnDblClick : TNotifyEvent
FOnMouseDown : TMouseEvent;
FOnMouseMove : TMouseMiveEvent;
…
protected
procedure Click; dynamic;
property OnClick: TNotifyEvent
read FOnClick write FOnClick;
property OnDblClick : TNotifyEvent
read FOnDblClick write OnDblClick;
property OnMouseDown : TMouseEvent
read FOnMouseDown write FOnMouseDown;
property OnMouseMove : TMouseMoveEvent
read FOnMouseMove write FOnMouseMove;
…
end;