Создание редакторов компонентов по сути своей даже проще, чем создание редакторов свойств, так как редактору компонентов не нужно создавать строковое представление компонента. Вместо этого он получает сам компонент в своем свойстве Component.

В этом разделе мы рассмотрим вопросы создания редактора компонента, в том числе:

• создание класса редактора;
• связывание с компонентом умалчиваемого редактора компонента;

• регистрация редактора компонента.

В заключение рассматривается пример редактора компонента.

11.2.1. Создание класса редактора

Все редакторы компонентов порождены от единственного родительского класса TComponentEditor, определенного в модуле DesignEditors следующим образом:

type TComponentEditor * class(TBaseComponentEditpr, IComponentEditor) private FComponent: TComponent; // Экземпляр компонента FDesigner: IDesigner; // Экземпляр Редактора форм public

constructor Create(AComponent: TComponent;
ADesigner: IDesigner);
override;
procedure Edit;
virtual;
procedure ExecuteVerb(Index: Integer); virtual;
function GetComponent: TComponent;
function GetDesigner: IDesigner;
function GetVerb(Index: Integer): String;
virtual;
function GetVerbCount: Integer;
virtual;
function Islnlnlined: Boolean;
procedure Copy;
virtual;
procedure Prepareltem(Index: Integer;
const Altem: IMenuItem); virtual;
property Component: TComponent read FComponent;
property Designer: IDesigner read GetDesigner;
end;

Класс имеет два свойства и набор методов.

Свойство Component представляет собой экземпляр редактируемого компонента. Хотя это свойство доступно только для чтения, это не мешает редактору изменять любое свойство компонента или выполнять любой его метод. Например:

(Component as TLabel).Height :- 30;

После подобного изменения редактор должен известить среду Delphi, чтобы она смогла нужным образом отрисовать компонент. Роль среды (точнее, Редактора форм) играет свойство Designer. Для уведомления редактора вызывается метод Modified:

Designer.Modified;

Методы GetComponent и GetDesigner возвращают экземпляры компонента и Редактора форм. В отличие от соответствующих свойств, эти экземпляры доступны через интерфейсы IComponentEditor и IDesigner соответственно.

С редактором компонента связано автоматически создаваемое контекстное меню, вызываемое щелчком правой кнопки мыши. Для формирования контекстного меню предназначены методы GetVerbCount и GetVerb. Первый возвращает количество пунктов меню. Второй метод вызывается для каждого пункта. Он определен следующим образом:

function GetVerb(Index: Integer): String;
virtual;

Его целочисленный параметр указывает индекс пункта (индексация начинается с 0) и метод должен вернуть текст для этого пункта меню.

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

При двойном щелчке на компоненте вызывается метод Edit, который по умолчанию выполняет первый пункт меню. Иными словами, вызов Edit эквивалентен обращению

ExecuteVerb(0);

Перекрывайте Edit, чтобы изменить умалчиваемую команду или выполнить иные действия в ответ на двойной щелчок.

11.1.5. Регистрация редакторов свойств || Оглавление || 11.2.2. Связывание с компонентом умалчиваемого редактора


Искусство создания компонентов Delphi



Новости за месяц

  • Июль
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс