Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СППО.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
738.3 Кб
Скачать

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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]