VirtualStringTree - 多行节点和垂直居中文本
如果 VirtualStringTree 中的节点是多行的(与 Node.States 中的 Multiline 相比),那么如何使该节点中所有列(多行列除外)的文本垂直居中?
我尝试使用 OnBeforeCellPaint
(使用 TargetCanvas.TextOut()
),但这根本不绘制文本。默认情况下,多行节点的文本始终绘制在节点的顶部。
(对于非多行节点,文本垂直居中绘制)。
If a node in a VirtualStringTree is multiline (vsMultiline in Node.States) then how can i centre the text vertically for all columns (except the multiline column) in that node?
I have tried using the OnBeforeCellPaint
(using TargetCanvas.TextOut()
) but this does not paint the text at all. By default, the text for a multiline node is always painted at the top of the node.
(For non-multiline nodes the text is painted vertically centred).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试使用 DrawText(..),
您可以在其上添加文本对齐方式,例如左、右、上、中等。
使用 Cellrect 作为矩形。
在你的情况下,我认为它可以在 OnDrawtext 上使用,设置 DefaultText := False;
Try it using DrawText(..)
you can add text alignment on it such as left, right, top, middle etc.
use the Cellrect for the Rect.
in your case i think it workable on OnDrawtext, set the DefaultText := False;
感谢 XBasic3000,我能够想出这个解决方案,它涵盖了几乎所有可能的组合:
EllipseString() 方法与 VirtualTrees.pas 中的 VirtualTrees.ShortenString() 非常相似。
唯一的问题是无法在其他列上绘制多行文本。您必须指定多行列集,因此无法绘制多行和垂直居中。
Thanks to XBasic3000, i was able to come up with this solution, which covers almost every possible combination:
The EllipseString() method is very similar to VirtualTrees.ShortenString() in VirtualTrees.pas.
The only isue is the inability to draw multiline text on other columns. You must specify the multilinecolumns set, so there is no capability to draw multiline and vertically centred.