You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TVirtualStringTree自定义绘制与toAutoSpanColumns功能的问题

TVirtualStringTree跨列场景下RTF文本渲染的宽度计算优化方案

在Delphi 10.4使用8.1.1版本的TVirtualStringTree时,启用toAutoSpanColumns选项后,OnMeasureItem事件中无法通过常规方式获取跨列后的实际可用宽度,导致预渲染RTF文本的位图宽度不符合需求。你当前采用遍历剩余列累加宽度的临时方案可行,但可以改用VST原生API实现更规范的宽度计算。

原生解决方案:使用GetCellDisplayRect获取跨列宽度

TVirtualStringTree提供了GetCellDisplayRect方法,通过指定IncludeAutoSpan参数为True,可以直接获取考虑跨列后的单元格完整矩形,从中提取宽度即可:

var
  CellRect: TRect;
begin
  // 获取包含跨列的单元格显示矩形
  CellRect := Sender.GetCellDisplayRect(Node, Index, True);
  // CellRect.Width 即为当前列跨列后的实际可用宽度
end;

方案优势

  • 直接复用VST内部的auto span逻辑,无需自行判断列内容是否为空,避免遗漏列可见性、固定列等边界场景的处理;
  • 代码更简洁,符合VST的原生使用规范,后续版本兼容性更好。

注意事项

确保TreeOptions.MiscOptions中已启用toAutoSpanColumns选项,否则IncludeAutoSpan参数不会生效。

内容的提问来源于stack exchange,提问作者Mario Werner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 06:32:39