Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

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

01.01.2007

Редактор свойства, пример которого приведен ниже, имеет ограничение на устанавливаемые цвета: только 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.

- Ed Jordan

Взято из Советов по Delphi от Валентина Озерова

Сборник Kuliba