关于 TreeView ,这样的效果如何实现!(100分)

  • 主题发起人 question
  • 开始时间
Q

question

Unregistered / Unconfirmed
GUEST, unregistred user!
<body bgcolor="#FFFFFF">
<table width="67%" border="0">
<tr>
<td width="44%"><img src="http://lanny.iszero.com/A01.gif" width="257" height="145"></td>
<td width="56%"><img src="http://lanny.iszero.com/A02.gif" width="257" height="145"></td>
</tr>
<tr>
<td width="44%" height="17">
<div align="center"><b>(图一)</b></div>
</td>
<td width="56%" height="17">
<div align="center"><b>(图二)</b></div>
</td>
</tr>
</table>
<p>使用TreeView的 AdvancedCustomDrawItem 方法,</p>
<p>procedure TfrmMain.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages,
DefaultDraw: Boolean); <br>
var NodeRect: TRect; <br>
begin <br>
if Stage = cdPostPaint then begin <br>
if Node.HasChildren then begin <br>
NodeRect := Node.DisplayRect(True); <br>
TreeView1.Canvas.Font.Assign(TreeView1.Font); <br>
TreeView1.Canvas.Font.Color := clBlue; <br>
TreeView1.Canvas.Brush.Style := bsClear; <br>
TreeView1.Canvas.TextOut(NodeRect.Right, NodeRect.Top + 2, '('+InttoStr(Node.Count)+')');
<br>
end; <br>
end; <br>
end; </p>
<p>可以得到图一的效果,可我想统计所有父类包含的所有子列的个数,及得到图二的结果,</p>
<p>不知道如何做!</p>
<p>谢谢!</p>
</body>
 
可以用递归求所有子列个数。
图二不就是多条红线吗?自己画上去不就行了。
 
需要具体的实现代码,红线是表示醒目,不需要在程序中实现,仅仅是我为了标识和
图一的区别。
谢写!
 
请问图片是怎么贴上去的?
 
你的程序已经完成了大部分,只用改一改求子节点个数的那一段就行了。
你原来直接取 Node.Count ,所以是图 1 的效果。
TreeView1.Canvas.TextOut(NodeRect.Right, NodeRect.Top + 2, '('+InttoStr(Node.Count)+')');
象下面这样做就行了:
var C: Integer;
NextNode: TTreeNode;
...
NextNode := Node.GetNextSibling;
C := NextNode.AbsoluteIndex - Node.AbsoluteIndex;
TreeView1.Canvas.TextOut(NodeRect.Right, NodeRect.Top + 2, '('+InttoStr(C)+')');

原理就是寻找该节点的下一个兄弟,找到了则取它们的 AbsolutedIndex 之差。
上面的程序写得匆忙,还不完善,比如 Node.GetNextSibling=nil 的情况就没有考虑,
不过我想你应该可以从中得到启发。
 
我的IE5.0为什么看不到你的图?
 
看不到你的图!!!
 
接受答案了.
 
顶部