当TREEVIEW展开后,如果节点超过显示宽度会自动显示水平滚动条,请问其内部机制是怎样实现的。我想根据展开内容动态调整TREEVIEW的宽度,但不知道怎样判断展开的节点的最右侧是多少
解决方案 »
- 求:如何对文本(.Ini/.Txt)加密及解密?
- 小妹求求各位帮个忙,问题简单!!!!
- 谁有 easytable 控件的最新注册版?万分感谢!!!
- == 如何在listview里显示数据? ==
- 关于在IBConsole里创建数据库表格的问题。急!
- ComboBox.Item选中用什么方法?
- 如何对一个字符串进行SQL语法分析
- dbgrideh在改变列宽时, 显示的内容其列宽不能满足时如何实现自动换行?谢谢!
- ACCESS里对某几个字段不是全部字段插入一条纪录的语句是什么?
- delphi中有没有像VB中那样跳出对话框的函数?
- 请问:我在一个线程中设了个热键,为什么不响应呢?而在主线程是可以响应的
- 用DBGRID输入数据,如何使一列直接取一个EDIT或是LABEL的字符?
HTREEITEM hItem = pmyTreeCtrl->GetFirstVisibleItem();// Toggle the check state of all the visible items.
int nWidth= 0;
for (i=0;i < uCount;i++)
{
CRect r;
pmyTreeCtrl->GetItemRect(hmyItem, &r, FALSE); hItem = pmyTreeCtrl->GetNextVisibleItem(hItem);
nWidth = __max(nWidth, r.Width());
}
function GetWidthOfTreeView(TreeView: TTreeView): Integer;
var
i, W: Integer;
begin
Result := 0;
for i := 0 to TreeView.items.Count - 1 do
if TreeView.Items[i].IsVisible then
begin
W := TreeView.Items[i].DisplayRect(True).Right;
if Result < W then
Result := W;
end;
Inc(Result, 8);
end;procedure TForm1.TreeView1Expanded(Sender: TObject; Node: TTreeNode);
begin
TreeView1.Width := GetWidthOfTreeView(TreeView1);
end;procedure TForm1.TreeView1Collapsed(Sender: TObject; Node: TTreeNode);
begin
TreeView1.Width := GetWidthOfTreeView(TreeView1);
end;
比如可以在树的OnExpanded和OnCollapsed加入如下代码:
var
si: TScrollInfo;
begin
si.cbSize := SizeOf(si);
si.fMask := SIF_ALL;
TreeView1.Width := 1;
if GetScrollInfo(TreeView1.Handle, SB_HORZ, si) then
TreeView1.Width := si.nMax + 10;
end;
不过能否告诉我,treeview内部根据什么来显示或掩藏水平滚动条的,即treeview是怎样判断目前展开的节点的宽度已经超出了本身的宽度,从而显示滚动条的