Пример кода: действительно ли вы хорошо знаете Delphi?
PROcedure StepEditor(strgrid: TStringGrid; Step: TStep);
вар
sValue, sField: строка;
Класс редактора: TStepEditorClass;
Редактор: TStepEditor;
начинать
sField := strgrid.Cells[0, strgrid.Selection.Top];
sValue := strgrid.Cells[1, strgrid.Selection.Top];
EditorClass := EditorClassList.Editors[ sField ];
Редактор: = EditorClass.Create;
Editor.Field := sField;
Editor.Step := Шаг;
Редактор.Edit(sValue);
Редактор.Бесплатно;
strgrid.Cells[ 1, strgrid.Selection.Top ] := sValue;
конец;
EditorClass — это Class of Class, то есть класс классов
например
TFormClass = Класс TForm;
Но это отличается от: TFormClass = Class(TForm); Это две концепции!
EditorClassList хранит список классов;
Редактор: = EditorClass.Create;
Create — это метод класса, а не метод объекта, поэтому экземпляр EditorClass можно создать из EditorClass.
Пополнить:
TStepEditor = Класс( TObject )
...
Конец;
TStepEditorClass = Класс TStepEditor;
Почему Инспектор объектов предоставляет удобную среду редактирования?
Почему разные поля имеют разные значения для выбора, разные способы проверки и всплывающие поля редактирования?
нет то же самое? Потому что разные редакторы свойств зарегистрированы в соответствии с разными типами полей;
Упрощение функции регистрации редактора свойств, предоставляемого Delphi, можно описать следующим образом:
RegisteryPropertyEditor(PropertyFieldType, EditorClass);
^Здесь указано имя типа, например Bool, Integer и т. д.
^ Здесь указано имя класса соответствующего редактора. Обратите внимание, что это не символьное описание имени класса.
При фактическом запуске, когда пользователь щелкает поле в Инспекторе объектов,
Delphi внутренне ищет класс редактора, соответствующий типу поля, затем создает экземпляр класса из найденного класса;
Выполнить сопутствующие операции (решить, есть ли раскрывающийся список, есть ли кнопка и т. д.)
Еще статьи