请问TTreeView控件中某些item的文字需要分段显示成不同字体(涉及到多种字体的补字),要如何实现?(100分)

  • 主题发起人 主题发起人 billycool
  • 开始时间 开始时间
B

billycool

Unregistered / Unconfirmed
GUEST, unregistred user!
还请各位大侠帮忙!
程序需要处理大量古体字,应用了多种字体补字,在系统中注册了补字文件,内容中的补字字体都有标记。现在的问题是,目录需要显示在TTreeView中,而某些节点的文字中可能包含补字字体,需要变换字体正常显示这些补字。
尝试过OnCustomDraw方法,可是用OnCustomDraw方法在画布上输出的文字不能当作树节点被点选,而且画布上的内容会被树节点本来的文字内容覆盖。
不知道是否可以通过重载TTreeView的节点文字输出方法,在方法中按照补字标记分段输出节点文字?如果要重载的话需要修改哪些类的哪些方法呢?

btw:查了一下,TTreeView好像是继承的TCustomTreeView类,而节点文字的最后输出是利用的TCanvas类。可是不太清楚要改哪些方法。
 
顶一下,在线等
 
有人知道吗?
 
怎么没有人回答呢?难道没人做过这方面的应用吗?
 
这个好想不支持富文本字体吧。找找其他控件看
 
CustomDrawItem事件试过没?
 
CustomDrawItem事件试过,可是用OnCustomDrawItem方法在画布上输出的文字不能当作树节点被点选,而且画布上的内容会被树节点本来的文字内容覆盖
所以我想重写一下Item的draw系列方法,将文本按照补字标记分段以相应字体显示出来,就是不知道要写哪些类的哪些方法
 
procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Node.AbsoluteIndex = 0 then
TreeView1.Canvas.Font.Name := '宋体'
else
TreeView1.Canvas.Font.Name := '隶书';
end;
 
hxy2002,首先谢谢你的帮助。
不过这样做的问题是只能控制到一个节点的文字字体,我需要实现的是一个节点的文字某几个字用某种字体,另外几个字用另外一种字体。所以我想只是控制到CustomDrawItem方法这一层还不足以解决这个问题,会要修改单个节点文字的输出方法,让它遇到字体标记时就换字体输出,但是不知道要动哪些方法?
 
提一下,有没有谁做过这方面的应用的?
 
后退
顶部