好象不能这样控制,不过你可以通过代码控制选择结果,如果不是红、绿、黄、黑四种颜色,就提示拥护重新选择

解决方案 »

  1.   


    procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);  function ColorToBorderColor(AColor: TColor): TColor;
      type
        TColorQuad = record
          Red,
          Green,
          Blue,
          Alpha: Byte;
        end;
      begin
        if (TColorQuad(AColor).Red > 192) or
           (TColorQuad(AColor).Green > 192) or
           (TColorQuad(AColor).Blue > 192) then
          Result := clBlack
        else if odSelected in State then
          Result := clWhite
        else
          Result := AColor;
      end;var
      LRect: TRect;
      LBackground: TColor;
      vColor: TColor;
    begin
      with TComboBox(Control).Canvas do begin
        FillRect(Rect);
        LBackground := Brush.Color;
        LRect := Rect;
        LRect.Right := LRect.Bottom - LRect.Top + LRect.Left;
        InflateRect(LRect, -1, -1);
        IdentToColor(TComboBox(Control).Items[Index], Integer(vColor));
        Brush.Color := vColor;
        FillRect(LRect);
        Brush.Color := ColorToBorderColor(ColorToRGB(Brush.Color));
        FrameRect(LRect);
        Brush.Color := LBackground;
        Rect.Left := LRect.Right + 5;
        TextRect(Rect, Rect.Left,
          Rect.Top + (Rect.Bottom - Rect.Top - TextHeight(TComboBox(Control).Items[Index])) div 2,
          TComboBox(Control).Items[Index]);
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      ComboBox1.Style := csOwnerDrawFixed;
      ComboBox1.Items.Text := //红、绿、黄、黑
    'clRed'#13#10 +
    'clGreen'#13#10 +
    'clYellow'#13#10 +
    'clBlack'#13#10;
    end;