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

       

Принцип работы Инспектора


Инспектор отображается в виде формы, на которую помещены список редактируемых элементов, кнопки переключения страниц свойств, методов и событий и собственно поле Инспектора, разделённое на две части (названия особенностей и их значения).

Описание Инспектора (показаны только основные поля, свойства и методы):

TInspector = class private FForm: TInspForm; FullParticuls: TParticulList; CurrParticuls: TParticulList; ActiveIndex: Integer; ActiveEditor: TParticulEditor; procedure ChangeIndex(NewIndex: Integer); procedure Paint; procedure ToolButtonClick(Sender: TObject); public property Visible: Boolean read GetVisible write SetVisible; constructor Create; destructor Destroy; override; procedure Change; procedure Make; end; где

  • FForm - форма Инспектора;
  • FullParticuls - все особенности редактируемого элемента управления (или группы элементов);
  • CurrParticuls - текущий список особенностей (для реализации отдельных страниц для свойств, методов или событий), отображается в настоящий момент именно он;
  • ActiveIndex - индекс редактируемой в настоящий момент особенности в списке CurrParticuls;
  • ActiveEditor - редактор текущей особенности (отображается только он один);
  • ChangeIndex - смена текущего индекса (при щелчке мышью на поле Инспектора);
  • Paint - отрисовка Инспектора;
  • ToolButtonClick - общая процедура для обработки клика по кнопкам "Свойство", "Метод", "Событие";
  • Visible - показывает/скрывает форму Инспектора;
  • Change - заново перерисовывает Инспектор при изменении списка активных элементов управления Actives;
  • Make - обновление Инспектора при изменении особенности редактируемого объекта (или группы объектов).
Инспектор создаётся в одном экземпляре (и это естественно!) автоматически при включении в проект файла Insp.pas. Его экземпляр - переменная Inspector типа TInspector. В рабочей области Инспектора названия запрещённых особенностей отображаются светло-серым цветом, особенности только для чтения выделяются курсивом. Имя редактируемой в настоящее время особенности выделяется полужирным шрифтом.
Алгоритм работы Инспектора при щелчке мышью на элементе управления следующий. При щелчке мышью на элементе управления этот элемент добавляется в список Actives (с очисткой его или без в зависимости от состояния клавиши Shift), затем метод MouseDown элемента вызывает метод Change Инспектора. Метод Change производит очистку Инспектора и его полей, устанавливает имена и типы редактируемых элементов в список (верхний в форме Инспектора), формирует полный список особенностей всех элементов из списка Actives (так же как в Delphi, если у разных элементов есть одинаковые особенности и их значения равны, то они отображаются, иначе - нет). Полный список образуется специальным слиянием списков особенностей всех редактируемых элементов (метод класса TParticulList.Comparing). Далее метод Change вызывает метод ToolButtonClick Инспектора, который формирует текущий список CurrParticuls в зависимости от нажатой кнопки "Свойства", "Методы" или "События".
Алгоритм работы Инспектора при щелчке мышью в его рабочем поле (поле отображения особенностей) таков. Метод PaintBoxMouseDown определяет, на какой особенности был сделан щелчок и вызывает метод ChangeIndex с индексом этой особенности. Метод ChangeIndex удаляет старый редактор (оставшийся от прошлого щелчка на рабочей области), в списке CurrParticuls получает особенность, для которой должен быть сформирован новый редактор. Затем с помощью процедур Reference и Executor отыскивает соответственно редактор и обработчик для типа данных TParticul.Data, зарегистрированного ранее, создаёт по этим данным новый редактор и вставляет его в рабочую область Инспектора. В свойство Particul редактора устанавливается найденная особенность.
Алгоритм работы Инспектора при изменении особенности следующий. Редактор, изменивший особенность, записывает его в своё свойство Particul и вызывает метод Инспектора Make. Метод Make вызывает метод SetParticul для редактируемого элемента (если их несколько, то для каждого), в качестве параметра передаёт изменённую особенность из свойства редактора Particul. После этого метод Make заново считывает все особенности редактируемого элемента (или группы) и отрисовывает их в рабочей области Инспектора.



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