combobox中怎样实现不同颜色的选项,10分,不多,但是我的所有!!(10分)

  • 主题发起人 主题发起人 套牢1
  • 开始时间 开始时间
给你一个简单的例子——
把ComboBox1的Style属性设为csOwnerDrawFixed,然后在OnDrawItem事件里——

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with ComboBox1, ComboBox1.Canvas do begin
Font.Color := clWindowText;
Brush.Color := clWindow;
if odSelected in State then begin
Font.Color := clWhite;
Brush.Color := clBlue;
end else begin
if Index mod 2 = 0 then begin
Font.Color := clYellow;
Brush.Color := clRed;
end else begin
Font.Color := clLime;
Brush.Color := clBlack;
end;
end;
FillRect(Rect);
TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Items[Index]);
end;
end;
 
我是想在把来源于两个地方的内容放入一个combobox中,同时用不同颜色对他们进行区别.
放入的语法为 combobox1.items.add(str);
这时如何只定义本条item的颜色,而不改变其它已有item的颜色?
 
作法是一样的啊,只是对Index的判断不同。
你可以在加入的时候记录一下已有的Item的个数,
然后在OnDrawItem里判断Index是不是大于这个数,
是的话就换一种颜色就行了。
 
把ComboBox1的Style属性设为csOwnerDrawFixed,可以实现不同颜色的item.
但这时无法对ComboBox1的text属性进行赋值,怎么办.
 
直接改相应的Item的值,Text属性在这种情况下是只读的。
var
n: Integer;
begin
n := ComboBox1.ItemIndex;
if n <> -1 then begin
ComboBox1.Items[n] := '变了';
ComboBox1.ItemIndex := n;
end;
end;
 
没办法,我只有在用的时候修改属性了,虽然看起来有点停顿,问题总算解决了
thank you
 
后退
顶部