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

Previous  Top  Next

    
 

 

 

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

Code:

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

©Drkb::00039

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

Сборник Kuliba