在虚拟树状视图垂直滚动的像素,不像方式的标准的Delphi网格,TListViewTTreeView(或大多数,我知道的其他这样的控制的)涡旋件由线,并保持完整的线可见在的顶部控制在任何时候。当我使用光标键来浏览,则根据方向的第一或最后一行是完全可见。当使用鼠标的滚动,没有任何对准

此行为可以例如观察到在2007年Delphi和2009 Structure窗口。

有什么办法来设置许多属性有标准Windows控件的行为?或者是有一组补丁的地方来实现这一目标?

有帮助吗?

解决方案

您可以拦截TBaseVirtualTree.OnScroll事件并使用的textHeight虚拟树视图的画布的返回值(“M”)作为量来改变TBaseVirtualTree.offsety为了递增(向上滚动)或递减(向下滚动)。也可以测试,以确保预滚动位置模量textHeight不同(“M”)是零(由适量避免滚动从错误的位置)。

可替换地,上虚拟树状视图此帖子论坛建议另一种方法:隐藏与VCL滚动条虚拟TreeView的本土滚动条,然后做自己的滚动(捕捉VCL滚动事件和编程滚动虚拟树视图)。

其他提示

这是我想出了Argalatyr的帮助下,看起来像它做什么,我希望它:

procedure TForm1.FormCreate(Sender: TObject);
begin
  VirtualStringTree1.ScrollBarOptions.VerticalIncrement :=
    VirtualStringTree1.DefaultNodeHeight;
end;

procedure TForm1.VirtualStringTree1Resize(Sender: TObject);
var
  DY: integer;
begin
  with VirtualStringTree1 do begin
    DY := VirtualStringTree1.DefaultNodeHeight;
    BottomSpace := ClientHeight mod DY;
    VirtualStringTree1.OffsetY := Round(VirtualStringTree1.OffsetY / DY) * DY;
  end;
end;

procedure TForm1.VirtualStringTree1Scroll(Sender: TBaseVirtualTree; DeltaX,
  DeltaY: Integer);
var
  DY: integer;
begin
  if DeltaY <> 0 then begin
    DY := VirtualStringTree1.DefaultNodeHeight;
    VirtualStringTree1.OffsetY := Round(VirtualStringTree1.OffsetY / DY) * DY;
  end;
end;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top