当我用TTreeView打开表单时,我用一些数据填充并选择了一些节点。但是我需要使选定的节点在控件的中心可见(当然,可能的话)。我找不到使用标准TTreeView组件的方法。
有任何想法吗 ?
最佳答案
我可以找到的滚动TreeView的唯一方法是向它发送一个值为WM_VSCROLL
/ SB_LINEDOWN
的SB_LINEUP
。由于某种原因,控件似乎不响应SB_THUMBPOSITION
的滚动值,例如富编辑。因此,下面的尝试通过向控件发送一堆行滚动消息来使节点或多或少地居中。尝试看看自己是否适合您的需求。
var
DR, CR: TRect;
ScrollPx, ScrollLines, i: Integer;
begin
if Assigned(TreeView1.Selected) then begin
// calculate how many *pixels* should we scroll
DR := TreeView1.Selected.DisplayRect(False);
CR := TreeView1.ClientRect;
ScrollPx := - Round((CR.Bottom / 2) - DR.Top - ((DR.Bottom - DR.Top) / 2));
// how many lines does it correspond to
ScrollLines := ScrollPx div TreeView_GetItemHeight(TreeView1.Handle);
// scroll that many lines
if ScrollLines > 0 then
for i := 1 to ScrollLines do
TreeView1.Perform(WM_VSCROLL, MakeWParam(SB_LINEDOWN, 0), 0)
else if ScrollLines < 0 then
for i := ScrollLines to -1 do
TreeView1.Perform(WM_VSCROLL, MakeWParam(SB_LINEUP, 0), 0);
end;
关于delphi - 如何将特定TreeView节点的位置居中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18490960/