Редактор свойства, пример которого приведен ниже, имеет ограничение на
устанавливаемые цвета: только clRed, clWhite или clBlue.
unit ClrComps;
interfaceuses
SysUtils, WinTypes, WinProcs, Messages, Classes,
Graphics, Controls, Forms, Dialogs, DsgnIntf;
type
TColorComponent = class(TComponent)
private
FColor: TColor;
protectedprocedure SetColor(Value: TColor);
publicconstructor Create(AnOwner: TComponent); override;
publishedproperty Color: TColor read FColor write SetColor;
end;
{ Это специальный редактор свойства выбора цветов... }
TMyColorProperty = class(TIntegerProperty)
publicfunction GetAttributes: TPropertyAttributes; override;
function GetValue: string; override;
procedure GetValues(Proc: TGetStrProc); override;
procedure SetValue(const Value: string); override;
end;
procedureRegister;
implementation{ TMyColorProperty }function TMyColorProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paMultiSelect, paValueList];
end;
function TMyColorProperty.GetValue: string;
begin
Result := ColorToString(TColor(GetOrdValue));
end;
procedure TMyColorProperty.GetValues(Proc: TGetStrProc);
begin
Proc('clRed');
Proc('clWhite');
Proc('clBlue');
end;
procedure TMyColorProperty.SetValue(const Value: string);
var
NewValue: Longint;
beginif IdentToColor(Value, NewValue) and
((NewValue = clRed) or
(NewValue = clWhite) or
(NewValue = clBlue)) then
SetOrdValue(NewValue);
end;
{ Образец компонента... }constructor TColorComponent.Create(AnOwner: TComponent);
begininherited Create(AnOwner);
FColor := clRed;
end;
procedure TColorComponent.SetColor(Value: TColor);
beginif (Value = clRed) or
(Value = clWhite) or
(Value = clBlue) thenbegin
FColor := Value;
end;
end;
procedureRegister;
begin
RegisterComponents('Samples', [TColorComponent]);
RegisterPropertyEditor(TypeInfo(TColor), TColorComponent,
'Color', TMyColorProperty);
end;
end.
Программа на Delphi, которая создает пользовательский редактор свойств для свойства Color компонента. Редактор позволяет только конкретные цвета: clRed, clWhite и clBlue.
Вот разбивка кода:
Класс TColorComponent - это подкласс класса TComponent. Он имеет приватное поле FColor, которое хранит значение цвета, а также защищенный метод SetColor, который устанавливает цвет.
Класс TMyColorProperty - это подкласс класса TIntegerProperty. Он переопределяет несколько методов:
GetAttributes: возвращает список атрибутов для этого свойства, включая paMultiSelect и paValueList.
GetValue: конвертирует текущее значение (TColor) в строковое представление.
GetValues: пополняет список возможных значений цветами clRed, clWhite и clBlue.
SetValue: устанавливает значение на основе ввода строки. Он проверяет, является ли ввод одним из разрешенных цветов, и обновляет внутреннее поле цвета соответственно.
Процедура Register регистрирует компонент TColorComponent и его редактор свойств в среде разработки Delphi.
Некоторые предложения по улучшению:
Рассмотрите добавление обработки ошибок в методе SetValue. Например, что происходит, если передается недопустимое значение цвета?
Вам может понравиться добавить больше цветов в список разрешенных. Текущий список ограничен только тремя цветами.
Если вы планируете использовать этот компонент в более крупном приложении, рассмотрите возможность добавления диалога выбора цвета или списка с доступными цветами.
В целом, это хороший пример создания пользовательского редактора свойств на Delphi.
В статье описан пример реализации редактора свойства Color с ограничениями на устанавливаемые цвета, только clRed, clWhite или clBlue.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.