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