本帖最后由 sivee 于 2009-07-24 16:15:11 编辑

解决方案 »

  1.   

    var 
      s1,s2:string;
      i:integer;
    begin
      cmb1.clear;
    with adoquery do 
      adoquery.Close;
      adoquery.SQL.Clear;
      adoquery.SQL.Add('Select * from hstable');
      adoquery.Open;
       for i:=0 to 4 do
       begin
        s1:=adoquery.fieldbyname('ht002').AsString;//
        s2:=adoquery.fieldbyname('ht003').AsString;//
        delete(s2,5,100);
        cmb1.Items.Add(s1+' '+s2+' '+adoquery.fieldbyname('ht004').AsString);
        s1:='';
        s2:='';
        adoquery.Next;
       end;
    end;
      

  2.   

    Format('%4s  %10s  %4s', ['A001', '中化123ABC', 'A500']);
      

  3.   

    谢谢二楼的回答,我试过了,你的没效果,
    我的三个字段的数据是这样的PART_CODE  PART_NAME PART_MODEL
    0101 蛋壳          500g
    0102 旺旺仙贝          500g
    0103 元朗蛋卷王1 454g
    0104 元朗蛋卷王2 908g
    0105 金得利瑞士糖 800g
    0106 瑞士糖(扁盒) 450g
    0107 德芙果仁巧克力 47g
    0108 德芙牛奶巧克力 47g
    0109 品客薯片(原味) 195g
    0110 品客薯片(葱味) 190g
    0201 娃哈哈AD钙奶1 4*200ml
    0202 娃哈哈AD钙奶2 6*100ml
    这是从数据库直接copy过来的内容,要求加入combobox后也是这样的对齐方式
      

  4.   

    Format没用啦,如果不信可以把我上面的数据建立一个表,你加入combobox就可以看到,列是不对齐的
      

  5.   

    不大好弄,因为每个字符的所占的宽度(像素)不一样,这就要计算,用Canvas.TextWidth先得到字符串的宽,然后找这块得想想,找个算法补齐,有点罗嗦,下班了,明天想想吧。
      

  6.   

    加入到combox之前对输入进行格式化
    固定三个字段的长度和位置,赋值时在指定位置填内容即可
      

  7.   

    要对齐的话,combobox要很长的! 要计算最长的字符还要计算倍数可以用的曲线方法:
    配合stringgrid来做,所有数据在stringgrid里,通过判断combobox接收的key来显示和隐藏stringgrid
    还有key的跳转.
      

  8.   

    以下测试通过~~var 
      s1,s2:string; 
      i,l:integer; 
    begin 
      l:=10;//combobox中第二列的长度;
      cmb1.clear; 
      with adoquery do 
      adoquery.Close; 
      adoquery.SQL.Clear; 
      adoquery.SQL.Add('Select * from hstable'); 
      adoquery.Open; 
      for i:=0 to 4 do 
      begin 
        s1:=adoquery.fieldbyname('ht002').AsString;// 第一列
        s2:=adoquery.fieldbyname('ht003').AsString;// 第二列
        if length(s2)<l then//如果小于预定的字段长度
        begin
            repeat
              s2:=s2+' ';
            until length(s2)=l;
        end
        else
        begin
         delete(s2,11,100);
        end;
        cmb1.Items.Add(s1+' '+s2+' '+adoquery.fieldbyname('ht004').AsString); 
        s1:=''; 
        s2:=''; 
        adoquery.Next; 
      end; 
    end;
      

  9.   

    最好用一个三方组件 Adv的 
      

  10.   

    都没有实现我的功能,只有改用dev的控件了