我想要在Tcombobox里面实现以下功能:
   比如我想在Tcombobox的items增加两
   列,当你下拉的时候以这样的方式显示内容      员工号     姓名 
     0001      张三
  
但两者要有网格线隔开,就象Tstringgrid那样的显示
如果我从数据库取出数据的时候,能够动态响应的增加
网格. 高手我等你的到来!
   

解决方案 »

  1.   

    你为什么一定要用Tcombobox呢,你干脆就用Tstringgrid不就好了
      

  2.   

    combobox1.Items.add(Format('%-20s  %20s',['员工','姓名']))
    combobox1.Items.add(Format('%-20s  %20s',['0001','张三']))
      

  3.   

    combobox1.Items.add(Format('%-20s  %-20s',['员工','姓名']));
    combobox1.Items.add(Format('%-20s  %-20s',['0001','张三']));
      

  4.   

    ownerdraw,然后写重画的代码,别说是网格线就是画一幅画都没问题
      

  5.   

    拜托..有个控件叫InforPower你没有用过..
    有一个WWCOMBOBOX就可以实现你的功能了..
      

  6.   

    koma2003:是的直接用第三方控件确实是前人的劳动的结果! 我们没有理由
    不去用它。但一个人能够自己去实现自己想到的东西,那对自己也是一个认识
    过程,使自己感到有一种成就感。这就是程序对我的一种魅力所在!
      

  7.   

    同意dnazj(基因工厂) 喜欢自己画,挺简单的几行代码就解决了
      

  8.   

    ComboBox的Style设置为:csOwnerDrawFixed;
    uses StrUtils;procedure TForm1.Button1Click(Sender: TObject);
    var i_Loop:Integer;
    begin
        ComboBox1.Clear;
        ComboBox1.Items.Add('员工号@姓名');
        for i_Loop := 1 to 10 do
        begin
            combobox1.Items.Add(RightStr('00' + InttoStr(i_Loop),3) + '@' + '姓名' + InttoStr(i_Loop));
        end;
    end;procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    var str:string;
        i_Pos:Integer;
    begin
        Str:=ComboBox1.Items[Index];
        i_Pos:=Pos('@',Str);    Combobox1.Canvas.TextOut(Rect.Left,Rect.Top + 2,Copy(Str,1,i_Pos - 1));
        Combobox1.Canvas.TextOut(Rect.Right div 2 + 2,Rect.Top + 2,Copy(Str,i_Pos + 1,Length(Str) - i_Pos));    ComboBox1.Canvas.MoveTo(Rect.Left,Rect.Top);
        ComboBox1.Canvas.LineTo(Rect.Right,Rect.Top);    ComboBox1.Canvas.MoveTo(Rect.Right div 2,Rect.Top);
        ComboBox1.Canvas.LineTo(Rect.Right div 2,Rect.Bottom);
    end;
      

  9.   

    RightStr:这个涵数在那个单元的?