Советы по Delphi

         

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


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



Содержание раздела