另外,如果不仅仅是Column,还有受控件本身的宽度限制时,如何判断?

解决方案 »

  1.   

    利用TListView.Canvas.TextWidth配合列宽等宽度进行判断。
      

  2.   

    这种计算宽度的方法可以计算文字是否大于列宽,但是我想知道有更好的方法吗?因为还有多种情况,例如TTreeView前面有缩进,计算更复杂;还有就是列宽足够,但是控件本身的宽度小于列宽,造成文字没有显示完整的情况。
      

  3.   

    procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      vListItem: TListItem;
      vWidth: Integer;
    begin
      vListItem := ListView1.GetItemAt(X, Y);
      if not Assigned(vListItem) then Exit;
      vWidth := vListItem.DisplayRect(drLabel).Right -
        vListItem.DisplayRect(drLabel).Left;
      if ListView1.Canvas.TextWidth(vListItem.Caption) > vWidth then
        Caption := Format('%s,%.6f', [vListItem.Caption, Now])
      else Caption := '';
    end;