Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Визуальное программирование / Визуальное_программирование_лекция_19.doc
Скачиваний:
37
Добавлен:
07.06.2015
Размер:
165.89 Кб
Скачать
  1. Создание перечислимого свойства и свойства-множества

Перечислимые свойства принадлежат перечислимому или логическому типам и позволяют выбрать одно значение из предлагаемого списка. Например, Align или Visible. Свойства, принадлежащие к множественному типу, позволяют задать любую комбинацию из предлагаемого набора. Например, BorderStyle или Anchors.

Добавление перечислимого (логический тип рассматривается как перечислимый) или множественного свойства осуществляется аналогично добавлению простого свойства.

Пример. Создание перечислимого свойства и свойства-множества.

type

TWeekDay=(wdMonday, wdTuesday, wdWednesday, wdThursday,wdFriday,

wdSaturday, wdSunday);

TArrow=Set of (arTop, arBottom, arLeft, arRight);

TMyButton = class(TButton)

private

{ Private declarations }

FMyInteger: integer;

FMyChar: Char;

FMyString: string;

FWeekday: TWeekDay;

FArrow: TArrow;

FMyCursor: TCursor;

FMyAnchors: TAnchors;

protected

{ Protected declarations }

public

{ Public declarations }

property MyInteger: integer read FMyInteger write FMyInteger;

property MyChar: char read FMyChar write FMyChar;

property MyString: char read FMyString write FMyString;

property MyAnchors: char read FMyAnchors write FMyAnchors;

published

{ Published declarations }

property Weekday: TWeekday read FWeekday write FWeekday;

property MyCursor: TCursor read FMyCursor write FMyCursor;

property Arrow: TArrow read FArrow write FArrow;

end;

Множественное свойство Anchor (якорь)

Перечислимое свойство Weekday.

Перечислимое свойство MyCursor.

Все свойства доступны для чтения и записи. Программно доступны только свойства Weekday и MyCursor, описанные в разделе общедоступных описаний (Published).

  1. Создание свойства-объект

Свойства-объекты содержат другие свойства. Например, свойством-объектом является свойство Font. Значение этих свойств можно изменять с помощью Инспектора объектов, возможно и создание специального редактора.

Свойство-объект можно создать на основе типа какого-либо объекта. Описание типа объекта представляет собой описание класса, предком которого является класс TPersistent и его потомки.

Перед использованием нового объекта он должен быть предварительно создан, а после использования удален.

Добавим в компонент свойство-объект MyObject.

TMyObject = class(TPersistent)

private

{ Private declarations }

FObjectNumber: integer;

FObjectAttrib: boolean;

FObjectName: string;

protected

{ Protected declarations }

public

{ Public declarations }

published

property ObjectNumber: integer read FObjectNumber write FObjectNumber;

property ObjectAttrib: boolean read FObjectAttrib write FObjectAttrib;

property ObjectName: string write FObjectName;

end;

TMyButton = class(TButton)

private

{ Private declarations }

FMyObject: TMyObject;

FCode2: integer;

function GetCode2 : integer;

procedure SetCode2 (pCode2: integer);

protected

{ Protected declarations }

public

{ Public declarations }

constructor Create (AOwner: TComponent); override; { override – отвергать}

destructor Destroy; override;

published

{ Published declarations }

property MyObject: TMyObject read FMyObject write FMyObject;

property Code2: integer read GetCode2 write SetCode2;

end;

procedure Register;

implementation

constructor TMyButton.Create (AOwner : TComponent);

Begin

inherited; {Inherited – Используется для вызова родительского класса конструктора или метода деструктора}

FMyObject:= TMyObject.Create

End;

destructor TMyButton.Destroy;

Begin

FreeAndNil(FMyObject);

inherited;

End;

function TBtnSound1.GetCode2 : integer;

begin

If FCode2>0 Then Result:=FCode2 else Result:=0;

end;

procedure TBtnSound1.SetCode2 (pCode2: integer);

begin

If FCode2<>pCode2 then FCode2:=pCode2;

end;

В конструкторе класса TMyButton после создания объекта этого класса создается объект TMyObject, а в деструкторе класса TMyButton перед удалением объекта этого класса удаляется объект TMyObject.

Свойства-массивы содержат индексированную совокупность однотипных значений. Например, свойство Lines. Значения этих свойств можно изменять только с помощью специального редактора.

unit Week; interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type

TWeek = class(TComponent)

private

{ Private declarations }

function GetMonthName (const AIndex: Integer): String;

function GetMonthNumber (const AMonthName: String): Integer;

protected

{ Protected declarations }

public

{ Public declarations }

property MonthName[const AIndex: Integer]: String read GetMonthName; default;

property MonthNumber[const AMonthName: String]: Integer read GetMonthNumber;

published

{ Published declarations }

end;

procedure Register;

implementation

const

MonthNames: array[1..12] of String[8]= ('Январь','Февраль','Март','Апрель','Май', 'Июнь','Июль','Август','Сентябрь', 'Октябрь', 'Ноябрь','Декабрь');

function TWeek.GetMonthName(const AIndex: Integer): String;

begin

if (AIndex<=0) or (AIndex>12) then

raise Exception.Create('Номер месяца должен быть от 1 до 12')

else Result:= MonthNames[AIndex];

end;

function TWeek.GetMonthNumber(const AMonthName: String): Integer;

var i:integer;

begin

Result:=0;

for i:=1 to 12 do begin

if Uppercase(AMonthName)=UpperCase(MonthNames[i]) then

Result:=1;

end;

end;

procedure Register;

begin

RegisterComponents('Samples', [TWeek]);

end;

end.

Пример использования

procedure TForm1.Button1Click(Sender: TObject);

begin

Label1.Caption:=Week1.MonthName[MonthOf(Date)]

end;