我有一个字符串,如果转换成tcolor类型,怎样判断它是不是一个正确的颜色值?
比如,我的字符串是‘clreda’
怎样判断clreda不是个正确的颜色值呢?
另外多问一句,是不是所有的颜色都可以表示成cl+颜色名 的,还是只有少部分?

解决方案 »

  1.   

    不是所有的颜色可以用cl开头
    你看到的cl开头表示的颜色,是D已经定义好的D中好象是用4字节的二进制码来定义颜色的,范围是多少?忘记了!!!! 
    低3位字节(后面六位)代表RGB相应的颜色
    如:$00000000表示黑色(clBlack),$00FFFFFF表示白色(clWhite)你可以试着改变他们的值,在这个范围内都可以表示某个颜色,如:
    label1.Color:=TColor($00123456);
      

  2.   

    try转换一下,失败了,就不是了
      

  3.   

    1、如何判断字符串是不是一个正确的颜色,只有枚举。如下就是Delphi的预定义颜色:
    const
      clSystemColor = $FF000000;  clScrollBar = TColor(clSystemColor or COLOR_SCROLLBAR);
      clBackground = TColor(clSystemColor or COLOR_BACKGROUND);
      clActiveCaption = TColor(clSystemColor or COLOR_ACTIVECAPTION);
      clInactiveCaption = TColor(clSystemColor or COLOR_INACTIVECAPTION);
      clMenu = TColor(clSystemColor or COLOR_MENU);
      clWindow = TColor(clSystemColor or COLOR_WINDOW);
      clWindowFrame = TColor(clSystemColor or COLOR_WINDOWFRAME);
      clMenuText = TColor(clSystemColor or COLOR_MENUTEXT);
      clWindowText = TColor(clSystemColor or COLOR_WINDOWTEXT);
      clCaptionText = TColor(clSystemColor or COLOR_CAPTIONTEXT);
      clActiveBorder = TColor(clSystemColor or COLOR_ACTIVEBORDER);
      clInactiveBorder = TColor(clSystemColor or COLOR_INACTIVEBORDER);
      clAppWorkSpace = TColor(clSystemColor or COLOR_APPWORKSPACE);
      clHighlight = TColor(clSystemColor or COLOR_HIGHLIGHT);
      clHighlightText = TColor(clSystemColor or COLOR_HIGHLIGHTTEXT);
      clBtnFace = TColor(clSystemColor or COLOR_BTNFACE);
      clBtnShadow = TColor(clSystemColor or COLOR_BTNSHADOW);
      clGrayText = TColor(clSystemColor or COLOR_GRAYTEXT);
      clBtnText = TColor(clSystemColor or COLOR_BTNTEXT);
      clInactiveCaptionText = TColor(clSystemColor or COLOR_INACTIVECAPTIONTEXT);
      clBtnHighlight = TColor(clSystemColor or COLOR_BTNHIGHLIGHT);
      cl3DDkShadow = TColor(clSystemColor or COLOR_3DDKSHADOW);
      cl3DLight = TColor(clSystemColor or COLOR_3DLIGHT);
      clInfoText = TColor(clSystemColor or COLOR_INFOTEXT);
      clInfoBk = TColor(clSystemColor or COLOR_INFOBK);
      clHotLight = TColor(clSystemColor or COLOR_HOTLIGHT);
      clGradientActiveCaption = TColor(clSystemColor or COLOR_GRADIENTACTIVECAPTION);
      clGradientInactiveCaption = TColor(clSystemColor or COLOR_GRADIENTINACTIVECAPTION);
      clMenuHighlight = TColor(clSystemColor or COLOR_MENUHILIGHT);
      clMenuBar = TColor(clSystemColor or COLOR_MENUBAR);  clBlack = TColor($000000);
      clMaroon = TColor($000080);
      clGreen = TColor($008000);
      clOlive = TColor($008080);
      clNavy = TColor($800000);
      clPurple = TColor($800080);
      clTeal = TColor($808000);
      clGray = TColor($808080);
      clSilver = TColor($C0C0C0);
      clRed = TColor($0000FF);
      clLime = TColor($00FF00);
      clYellow = TColor($00FFFF);
      clBlue = TColor($FF0000);
      clFuchsia = TColor($FF00FF);
      clAqua = TColor($FFFF00);
      clLtGray = TColor($C0C0C0);
      clDkGray = TColor($808080);
      clWhite = TColor($FFFFFF);
      StandardColorsCount = 16;  clMoneyGreen = TColor($C0DCC0);
      clSkyBlue = TColor($F0CAA6);
      clCream = TColor($F0FBFF);
      clMedGray = TColor($A4A0A0);
      ExtendedColorsCount = 4;  clNone = TColor($1FFFFFFF);
      clDefault = TColor($20000000);
    2、是不是所有的颜色都可以表示成cl+颜色名 的,还是只有少部分?
    答:只少非常少的一部分颜色的是用RGB(即:红、黄、蓝三色原理)来表示的;三色任一个色的取值范围[0..255]占8bit;所有三个色就要用8bit*3=24bit来表示。而Integer占8bit*4=32bit,所以通常用一个整形数来表示。而颜色的范围就$0~$FFFFFF(16进制),你不用知道有多少个颜色了,因为它基本上可以说是无穷的了。因而所有颜色不可能用“cl+颜色名”表示得完的!
      

  4.   

    var
      a: TColor;if IdentToColor('aaaaaaaaa', a) then
      Font.Color := a;
      

  5.   

    其实我也是碰到过跟楼主类似的问题,才从graphics单元里看到的。如果不用判断的话,直接StringToColor也行。
      

  6.   

    我试过了,a的类型改为integer类型的话,如果是像clred的可以做到,但是如果是类似$00FF0080的颜色值怎么判断是不是正确的呢?
      

  7.   

    $00FF0080这个是16进制数,只要落在RGB的范围内,必然正确。