Класс TPropertyEditor

Прежде, чем писать свой собственный Редактор Свойств, нужно разобраться в базовом классе TPropertyEditor:

TPropertyEditor = class

private

FDesigner: TFormDesigner;

FPropList: PInstPropList;

FPropCount: Integer;

constructor Create(ADesigner: TFormDesigner; APropCount: Integer);

function GetPrivateDirectory: string;

procedure SetPropEntry(Index: Integer; AInstance: TComponent;

APropInfo: PPropInfo);

protected

function GetPropInfo: PPropInfo;

function GetFloatValue: Extended;

function GetFloatValueAt(Index: Integer): Extended;

function GetMethodValue: TMethod;

function GetMethodValueAt(Index: Integer): TMethod;

function GetOrdValue: Longint;

function GetOrdValueAt(Index: Integer): Longint;

function GetStrValue: string;

function GetStrValueAt(Index: Integer): string;

procedure Modified;

procedure SetFloatValue(Value: Extended);

procedure SetMethodValue(const Value: TMethod);

procedure SetOrdValue(Value: Longint);

procedure SetStrValue(const Value: string);

public

destructor Destroy; override;

procedure Activate; virtual;

function AllEqual: Boolean; virtual;

procedure Edit; virtual;

function GetAttributes: TPropertyAttributes; virtual;

function GetComponent(Index: Integer): TComponent;

function GetEditLimit: Integer; virtual;

function GetName: string; virtual;

procedure GetProperties(Proc: TGetPropEditProc);virtual;

function GetPropType: PTypeInfo;

function GetValue: string; virtual;

procedure GetValues(Proc: TGetStrProc); virtual;

procedure Initialize; virtual;

procedure SetValue(const Value: string); virtual;

property Designer: TFormDesigner read FDesigner;

property PrivateDirectory: string read GetPrivateDirectory;

property PropCount: Integer read FPropCount;

property Value: string read GetValue write SetValue;

end;

Методы, приведенные ниже, можно переопределять (override) для изменения поведения Редактора свойств. (SetXxxValue используется для представления одного из методов SetFloatValue, SetMethodValue, SetOrdValue или SetStrValue. GetXxxValue обозначает GetFloatValue, GetMethodValue, GetOrdValue или GetStrValue)

· Activate - вызывается, когда свойство выбирают в инспекторе объектов. Может быть полезно, позволяя некоторым атрибутам свойства определяться в каждый момент выбора этого свойства.

· AllEqual - вызывается всякий раз, когда на форме выбирается более чем один объект. Если этот метод возвращает True, то вызывается GetValue, иначе в Инспекторе Объектов показывается пустая строка. AllEqual вызывается при условии, что GetAttributes возвращает paMultiSelect.

· Edit - вызывается при нажатии кнопки «. ..» или по двойному щелчку мыши на свойстве. Этот метод может, к примеру, показать какое-нибудь диалоговое окно для редактирования свойства (пример - свойство Font).

· GetAttributes - возвращает необходимую Инспектору Объектов информацию для того, чтобы тот смог отобразить свойство в подходящей манере. GetAttributes возвращает множество (set) значений типа TPropertyAttributes:

paValueList: Редактор Свойств может возвращать список значений для этого свойства. Если этот атрибут установлен, то нужно определить GetValues. В Инспекторе объектов справа от свойства появится кнопка для выпадающего списка.

paSortList: Инспектор объектов будет сортировать список, полученный от GetValues.

paSubProperties: свойство имеет подсвойства, которые будут показываться ниже в виде иерархии (outline). Если GetProperties будет генерировать объекты-свойства, то этот атрибут должен быть установлен.

paDialog: показывает, что метод Edit будет вызывать диалог. Если данный атрибут установлен, то появится кнопка «. ..» справа от свойства в Инспекторе Объектов.

paMultiSelect: позволяет свойству оставаться в Инспекторе Объектов, когда на форме выбрано сразу несколько объектов. Некоторые свойства не годятся для множественного выбора, например, Name.

paAutoUpdate: Если этот атрибут установлен, то метод SetValue будет вызываться при каждом изменении, произведенном в редакторе, а не после завершения редактирования (пример - свойство Caption).

paReadOnly: значение менять нельзя.

· GetComponent - возвращает компонент под номером Index в случае множественного выбора объектов (multiselect). GetAttributes должен возвращать paMultiSelect.

· GetEditLimit - возвращает число символов, которые пользователь может ввести при редактировании свойства. По умолчанию 255 символов.

· GetName - возвращает имя свойства. По умолчанию это имя получается из информации о типе, все подчеркивания замещаются пробелами. Данный метод Вам нужно переопределять только в том случае, если имя свойства отличается от того, которое нужно отображать в Инспекторе Объектов.

· GetProperties - должен быть переопределен для вызова PropertyProc для каждого подсвойства (или вложенного свойства) редактируемого свойства и передачи нового TPropertyEdtior для каждого подсвойства. По умолчанию, PropertyProc не вызывается и подсвойства не ожидаются. TClassProperty будет передавать новый редактор свойств для каждого свойства, объявленного published в классе. TSetProperty передает новый редактор для каждого элемента множества.

· GetPropType - возвращает указатель на информацию о типе редактируемого свойства.

· GetValue - возвращает значение свойства в виде строки. По умолчанию возвращает '(unknown)'. Этот метод нужно переопределять с тем, чтобы возвращать правильное значение.

· GetValues - вызывается, если GetAttributes возвращает paValueList. Должно вызвать Proc для каждого значения, которое приемлемо для данного свойства.

· Initialize - вызывается при создании Редактора свойств.

· SetValue(Value) - вызывается для того, чтобы установить значение свойства. Редактор свойств должен уметь разобрать строку (Value) и вызвать метод SetXxxValue. Если строка имеет некорректный формат или неверное значение, то редактор Свойств должен сгенерировать исключительную ситуацию (exception), описывающую данную проблему. SetValue может вообще проигнорировать все изменения и оставить всю обработку изменений методу Edit (как в свойстве Picture).

Свойства и методы полезные при создании нового класса Редактора свойств:

· PrivateDirectory (свойство)
Это директория, в которой находится.EXE, либо рабочая директория, указанная в DELPHI.INI. Если редактор должен сохранить какую-то информацию (установки), то лучше в этой директории.

· Value (свойство)
Текущее значение свойства, то же самое возвращает GetValue.

· Modified (метод)
Вызывается для того, чтобы показать, что значение свойства изменилось. Методы SetXxxValue вызывают Modified автоматически.

· GetXxxValue (метод)
Возвращает значение первого из редактируемых свойств.

· SetXxxValue (метод)
Устанавливает значения свойства для всех выбранных объектов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: