Rxcolors.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:3k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {*******************************************************}
  2. {                                                       }
  3. {         Delphi VCL Extensions (RX)                    }
  4. {                                                       }
  5. {         Copyright (c) 1997 Master-Bank                }
  6. {                                                       }
  7. {*******************************************************}
  8. unit RXColors;
  9. {$C PRELOAD}
  10. {$I RX.INC}
  11. interface
  12. uses Classes, Controls, Graphics, Forms, VCLUtils;
  13. function RxColorToString(Color: TColor): string;
  14. function RxStringToColor(S: string): TColor;
  15. procedure RxGetColorValues(Proc: TGetStrProc);
  16. procedure RegisterRxColors;
  17. implementation
  18. uses SysUtils, RTLConsts, DesignIntf, DesignEditors, VCLEditors;
  19. type
  20.   TColorEntry = record
  21.     Value: TColor;
  22.     Name: PChar;
  23.   end;
  24. const
  25. {$IFDEF WIN32}
  26.   clInfoBk16 = TColor($02E1FFFF);
  27.   clNone16 = TColor($02FFFFFF);
  28.   ColorCount = 3;
  29. {$ELSE}
  30.   ColorCount = 5;
  31. {$ENDIF}
  32.   Colors: array[0..ColorCount - 1] of TColorEntry = (
  33. {$IFNDEF WIN32}
  34.     (Value: clInfoBk;      Name: 'clInfoBk'),
  35.     (Value: clNone;        Name: 'clNone'),
  36. {$ENDIF}
  37.     (Value: clCream;       Name: 'clCream'),
  38.     (Value: clMoneyGreen;  Name: 'clMoneyGreen'),
  39.     (Value: clSkyBlue;     Name: 'clSkyBlue'));
  40. function RxColorToString(Color: TColor): string;
  41. var
  42.   I: Integer;
  43. begin
  44.   if not ColorToIdent(Color, Result) then begin
  45.     for I := Low(Colors) to High(Colors) do
  46.       if Colors[I].Value = Color then
  47.       begin
  48.         Result := StrPas(Colors[I].Name);
  49.         Exit;
  50.       end;
  51.     FmtStr(Result, '$%.8x', [Color]);
  52.   end;
  53. end;
  54. function RxStringToColor(S: string): TColor;
  55. var
  56.   I: Integer;
  57.   Text: array[0..63] of Char;
  58. begin
  59.   StrPLCopy(Text, S, SizeOf(Text) - 1);
  60.   for I := Low(Colors) to High(Colors) do
  61.     if StrIComp(Colors[I].Name, Text) = 0 then
  62.     begin
  63.       Result := Colors[I].Value;
  64.       Exit;
  65.     end;
  66.   Result := StringToColor(S);
  67. end;
  68. procedure RxGetColorValues(Proc: TGetStrProc);
  69. var
  70.   I: Integer;
  71. begin
  72.   GetColorValues(Proc);
  73.   for I := Low(Colors) to High(Colors) do Proc(StrPas(Colors[I].Name));
  74. end;
  75. { TRxColorProperty }
  76. type
  77.   TRxColorProperty = class(TColorProperty)
  78.   public
  79.     function GetValue: string; override;
  80.     procedure GetValues(Proc: TGetStrProc); override;
  81.     procedure SetValue(const Value: string); override;
  82.   end;
  83. function TRxColorProperty.GetValue: string;
  84. var
  85.   Color: TColor;
  86. begin
  87.   Color := TColor(GetOrdValue);
  88. {$IFDEF WIN32}
  89.   if Color = clNone16 then Color := clNone
  90.   else if Color = clInfoBk16 then Color := clInfoBk;
  91. {$ENDIF}
  92.   Result := RxColorToString(Color);
  93. end;
  94. procedure TRxColorProperty.GetValues(Proc: TGetStrProc);
  95. begin
  96.   RxGetColorValues(Proc);
  97. end;
  98. procedure TRxColorProperty.SetValue(const Value: string);
  99. begin
  100.   SetOrdValue(RxStringToColor(Value));
  101. end;
  102. procedure RegisterRxColors;
  103. begin
  104.   RegisterPropertyEditor(TypeInfo(TColor), TPersistent, '', TRxColorProperty);
  105. end;
  106. end.