想实现的是:listview 的column的width和这个column的catption的物理长度一样,使得一开始的时候,listview的所有列的名字都能看得清楚

解决方案 »

  1.   

    做个试验
    var 
      a:string;
    begin
       a:='a';
    showmessage(inttostr(length(a)));//一个字符的长度;
    showmessage(inttostr(sizeof(a)));//一个字符所占物理内存的长度;
    end; 
      

  2.   

    var
     a,b:String;
     c,d:WideString;a='s' //一个字节
    b='长'//两个字节
    c='s' //两个字节
    d='长'//两个字节
      

  3.   

    楼主是想动态生成listview 的column的width吗?
      

  4.   

    1.为每个列的最大长度分别设置一个变量
    2.在加载数据的时候,为这个变量赋值。
    3.在Resize事件或者是show事件中设置column的宽度。
    var
      w1, w2: integer;  //全局变量var
      vItem: TListItem;
      i: integer;
    begin
      w1 := 0l; w2 := 0;
      for i := 0 to 数据数量-1 do
      begin
        if Length(数据) > w1 then
          w1 := Length(数据)  //获取最大长度的数据。
        vItem := Listview1.Items.add;   
        ...
      end;    
    end;resize事件
    Listview1.columns[0].width := w1;
      

  5.   

    其实你们都不知道他问的是什么...他问的是字符的 PIXEL ... 大概是17个象素的... 接分
      

  6.   

    一个循环就能搞定的, 写成一个函数SetListViewCaptionWidth, 调用起来方便些:
    procedure SetListViewCaptionWidth(AListView: TListView);
    var
      i : Integer;
    begin
      AListView.Canvas.Font := AListView.Font;
      for i := 0 to AListView.Columns.Count - 1 do
        AListView.Columns[i].Width := AListView.Canvas.TextWidth(AListView.Columns[i].Caption) + 12;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      SetListViewCaptionWidth (ListView1);
    end;
      

  7.   

    可以使用
    Canvas.TextHeight('test')
    Canvas.TextWidth('test')
    这可获得字的宽和高,楼主可以用这个来判断