Справочное руководство по Delphi

       

Класс 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 (метод)


                                    • Устанавливает значения свойства для всех выбранных объектов.









                                          1. Содержание раздела