如题。急,请大家帮忙,给个源代码。感激不尽......

解决方案 »

  1.   

    var
      i,j:integer;
      iMax:array of integer;
    begin
      SetLength(iMax,lvwm.Columns.Count);
      for i:=0 to lvwm.Columns.Count-1 do
      begin
        iMax[i]:=0;
      end;  for i:=0 to lvwm.Items.Count-1 do
      begin
        if iMax[0]<lvwm.Canvas.TextWidth(lvwm.Items.Item[i].Caption) then
          iMax[0]:=lvwm.Canvas.TextWidth(lvwm.Items.Item[i].Caption);
        for j:=1 to lvwm.Columns.Count-1 do
        begin
          if iMax[j]<lvwm.Canvas.TextWidth(lvwm.Items.Item[i].SubItems.Strings[j-1]) then
            iMax[j]:=lvwm.Canvas.TextWidth(lvwm.Items.Item[i].SubItems.Strings[j-1]);
        end;
      end;  for i:=0 to lvwm.Columns.Count-1 do
      begin
        lvwm.Columns.Items[i].Width:=iMax[i];
      end;
    end;
    刚下去写了写,代码没有优化,在计算宽度上有点问题,子条目为空时也有问题,懒得再敲了(手累^_^),你自己改进吧。
      

  2.   

    我觉得你每取一条记录出来的时候,再对每一字段值计算其最大值,取到最大值以后就要重新画LISTVIEW的TextWidth,我觉得虽然可能可以实现,不过我认为不值得,要画太多次了!