В Инспекторе Объектов я пытаюсь получить раскрывающийся список для моего перечислимого типа...
Для этого вам необходимо создать собственный редактор свойства. Ниже приведен его простой пример:
type
TBaudRateProperty = class(TStringProperty)
publicfunction GetAttributes: TPropertyAttributes; override;
procedure GetValues(Proc: TGetStrProc); override;
function GetValue: string; override;
procedure SetValue(const Value: string); override;
end;
...
type
TBaudRate = (br110, br300, br600, br1200, br2400, br4800, br9600, br14400,
br19200, br38400, br56000, br128000, br256000);
const
BaudList: array[TBaudRate] ofstring[7] =
('110', '300', '600', '1200', '2400', '4800', '9600', '14400', '19200',
'38400', '56000', '128000', '256000');
{TBaudRateProperty}function TBaudRateProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paValueList];
end;
procedure TBaudRateProperty.GetValues(Proc: TGetStrProc);
var
i: TBaudRate;
beginfor i := Low(TBaudRate) to High(TBaudRate) do
Proc(BaudList[i]);
end;
function TBaudRateProperty.GetValue: string;
begin
Result := BaudList[TBaudRate(GetOrdValue)];
end;
procedure TBaudRateProperty.SetValue(const Value: string);
var
i: TBaudRate;
beginfor i := Low(TBaudRate) to High(TBaudRate) doif BaudList[i] = Value thenbegin
SetOrdValue(integer(i));
EXIT;
end;
inherited SetValue(Value);
end;
Этот код-снippet демонстрирует использование пользовательского редактора свойств для отображения списка значений перечисленных типов в Object Inspector Delphi.
Класс TBaudRateProperty наследуется от TStringProperty и переопределяет несколько методов, чтобы обеспечить необходимую функциональность для этого пользовательского свойства:
GetAttributes: Возвращает массив TPropertyAttributes, который указывает, имеет ли свойство список значений, в этом случае - paValueList.
GetValues: Пополняет процедуру обратного вызова всеми значениями из перечисленного типа TBaudRate.
GetValue: Возвращает строковое представление текущего значения на основе массива BaudList.
SetValue: Обновляет значение свойства, найдя соответствие в массиве BaudList и установив его как новое значение.
Константа BaudList - это массив, который maps каждый перечисленный тип TBaudRate к его строковому представлению. Это позволяет пользовательскому редактору свойств отображать эти значения для пользователя.
Вот несколько предложений по улучшению:
Метод SetValue мог быть оптимизирован с помощью хэш-таблицы или словаря вместо итерации над всеми возможными значениями в массиве.
Если вы планируете использовать это свойство редактора с другими типами, рассмотрите возможность сделать его более общим, введя параметры типа и используя более абстрактные методы, такие как GetValuesProc, вместо жесткого кодирования типа.
Код не обрабатывает недопустимые входные данные (например, пустую строку). Вам может потребоваться добавить проверки для этого в методе SetValue.
Приведенный пример - это базовая реализация, но она должна дать вам хороший старт для создания своих пользовательских редакторов свойств.
Использование перечислимых констант в Delphi для создания раскрывающихся списков свойств, демонстрируя пример реализации свойства с использованием перечислимого типа и массива строк.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.