Статьи Королевства Дельфи

         

Элементы управления TParticulControl обрабатываются только


Элементы управления TParticulControl обрабатываются только одним способом - щелчок мышью (с нажатой клавишей Shift или без неё). При щелчке без нажатия Shift элемент добавляется в список активных элементов (т. е. тех, которые обрабатываются в настоящий момент Инспектором) Actives: TList, который предварительно очищается. При щелчке при нажатой Shift элемент также добавляется в Actives, но без предварительной его очистки.

Для того чтобы особенности отображались в Инспекторе, они должны быть предварительно зарегистрированы процедурой: RegisterData(Data: Word; AEditor: TParticulEditorClass; AExecutor: TExecutor); где
  • Data - уникальный номер для регистрируемого типа;
  • AEditor - ссылка (указатель на класс) на класс редактора (см. ниже);
  • AExecutor - обрабатывающая процедура (см. ниже).
Если будет сделана попытка зарегистрировать особенности под уже имеющимся номером, возникнет исключительная ситуация ERegister.
К каждой особенности, благодаря регистрации, привязывается редактор определённого класса и процедура обработки следующего типа: TExecutor = function(Code, Info: string; var Changed: Boolean; ReadMode: Boolean = False): string; где
  • Code - кодированные данные из TParticul.Code;
  • Info - дополнительные кодированные данные из TParticul.Info;
  • Changed - булева переменная, показывающая, были ли сделаны изменения (True) или нет (False);
  • ReadMode - запрещение изменения Code (по умолчанию - False).


Применение этой процедуры будет показано ниже.

Редактор особенностей представляет собой наследника от класса TParticulEditor, описание которого дано ниже: TParticulEditor = class protected FOldCode: string; FParticul: TParticul; FExecutor: TExecutor; procedure Init(AControl: TWinControlClass); procedure SetParticul(Value: TParticul); virtual; public Control: TWinControl; property Executor: TExecutor read FExecutor write FExecutor; property Particul: TParticul read FParticul write SetParticul; constructor Create; virtual; destructor Destroy; override; procedure Make; end; TParticulEditorClass = class of TParticulEditor; где
  • Init - процедура, создающая редактор класса AControl, строго обязательна в конструкторе;
  • Control - то, что будет отображено в Инспекторе (собственно редактор);
  • Partucul - редактируемое свойство;
  • Executor - процедура-обработчик типа TExecutor;
  • Make - обновление Инспектора.
Немного остановлюсь на методе SetParticul, который изменяет внешний вид Control при различных значениях полей TParticul (Code, Info, Enabled, ReadMode). Так, например, во всех редакторах Enabled присваивается элементу управления (Control.Enabled := Value.Enabled); ReadMode в TEditEditor'е присваивается TEdit'у ((Control as TEdit).ReadMode := Value.ReadMode); а через Info в ComboBox передаются все элементы, из которых необходимо сделать выбор.




Содержание  Назад  Вперед