Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Редактор свойства Color с заданными ограничениями

Delphi , Компоненты и Классы , Свойства и События

Редактор свойства Color с заданными ограничениями

Автор: Ed Jordan

Редактор свойства, пример которого приведен ниже, имеет ограничение на устанавливаемые цвета: только clRed, clWhite или clBlue.


unit ClrComps;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes,
  Graphics, Controls, Forms, Dialogs, DsgnIntf;

type
  TColorComponent = class(TComponent)
  private
    FColor: TColor;
  protected
    procedure SetColor(Value: TColor);
  public
    constructor Create(AnOwner: TComponent); override;
  published
    property Color: TColor read FColor write SetColor;
  end;

  { Это специальный редактор свойства выбора цветов... }
  TMyColorProperty = class(TIntegerProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    function GetValue: string; override;
    procedure GetValues(Proc: TGetStrProc); override;
    procedure SetValue(const Value: string); override;
  end;

procedure Register;

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;
begin
  if IdentToColor(Value, NewValue) and
    ((NewValue = clRed) or
    (NewValue = clWhite) or
    (NewValue = clBlue)) then
    SetOrdValue(NewValue);
end;

{ Образец компонента... }

constructor TColorComponent.Create(AnOwner: TComponent);
begin
  inherited Create(AnOwner);
  FColor := clRed;
end;

procedure TColorComponent.SetColor(Value: TColor);
begin
  if (Value = clRed) or
    (Value = clWhite) or
    (Value = clBlue) then
  begin
    FColor := Value;
  end;
end;

procedure Register;
begin
  RegisterComponents('Samples', [TColorComponent]);
  RegisterPropertyEditor(TypeInfo(TColor), TColorComponent,
    'Color', TMyColorProperty);
end;

end.

Программа на Delphi, которая создает пользовательский редактор свойств для свойства Color компонента. Редактор позволяет только конкретные цвета: clRed, clWhite и clBlue.

Вот разбивка кода:

  1. Класс TColorComponent - это подкласс класса TComponent. Он имеет приватное поле FColor, которое хранит значение цвета, а также защищенный метод SetColor, который устанавливает цвет.
  2. Класс TMyColorProperty - это подкласс класса TIntegerProperty. Он переопределяет несколько методов:
    • GetAttributes: возвращает список атрибутов для этого свойства, включая paMultiSelect и paValueList.
    • GetValue: конвертирует текущее значение (TColor) в строковое представление.
    • GetValues: пополняет список возможных значений цветами clRed, clWhite и clBlue.
    • SetValue: устанавливает значение на основе ввода строки. Он проверяет, является ли ввод одним из разрешенных цветов, и обновляет внутреннее поле цвета соответственно.

Процедура Register регистрирует компонент TColorComponent и его редактор свойств в среде разработки Delphi.

Некоторые предложения по улучшению:

  1. Рассмотрите добавление обработки ошибок в методе SetValue. Например, что происходит, если передается недопустимое значение цвета?
  2. Вам может понравиться добавить больше цветов в список разрешенных. Текущий список ограничен только тремя цветами.
  3. Если вы планируете использовать этот компонент в более крупном приложении, рассмотрите возможность добавления диалога выбора цвета или списка с доступными цветами.

В целом, это хороший пример создания пользовательского редактора свойств на Delphi.

В статье описан пример реализации редактора свойства Color с ограничениями на устанавливаемые цвета, только clRed, clWhite или clBlue.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Свойства и События ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:35:12/0.0020880699157715/0