标签: virtualtreeview

Firemonkey版本的VirtualTreeView

有没有人碰巧知道是否有正在准备的流行VirtualTreeView的Firemonkey版本?此外,是否有人收集了一些将自定义控件移植到Firemonkey的经验,并且可以估算将虚拟树视图移植到Firemonkey的工作量?我们需要这个控件,如果我们可以让这个控件工作,切换到Firemonkey只是一个选项.

谢谢!

delphi virtualtreeview delphi-xe2 firemonkey

19
推荐指数
1
解决办法
5089
查看次数

是否可以更改虚拟字符串树中行的颜色?

我想更改虚拟字符串树的特定行中的文本颜色.可能吗?

delphi virtualtreeview

13
推荐指数
2
解决办法
5602
查看次数

VirtualTreeView:正确处理选择更改

对于那些自己没有遇到问题的人来说,这个问题似乎是显而易见的.

我需要处理VTV中的选择变化.我有一个平面的节点列表.我需要随时处理所有当前选定的节点

  1. 用户点击一个节点;
  2. 用户Shift/Ctrl-单击一个节点;
  3. 用户使用箭头键导航列表;
  4. 用户通过拖动鼠标来创建选择
  5. 用户通过单击空白区域或按住Ctrl键单击唯一选定的节点来删除选择

这是最常见和预期的行为,就像Windows资源管理器一样:当您使用鼠标和/或键盘选择文件时,信息面板会显示其属性.我只需要那个.这就是我陷入困境的地方.

我的一些研究如下.


起初我使用OnChange.它似乎工作得很好,但我注意到一些奇怪的闪烁,我发现在最常见的情况下(选择一个节点,用户点击另一个节点)OnChange被触发两次:

  1. 取消选择旧节点时.此时选择为空.我刷新我的GUI以显示"没有选中"标签代替所有属性.
  2. 选择新节点时.我再次刷新我的GUI以显示新节点的属性.因此闪烁.

这个问题是可谷歌的,所以我发现人们使用OnFocusChange和OnFocusChanging而不是OnChange.但这种方式仅适用于单一选择.通过多个选择,拖动选择和导航键,这不起作用.在某些情况下,Focus事件甚至根本不会触发(例如,通过单击空白区域删除选择).

我做了一些调试输出研究,以了解这些处理程序如何在不同的场景中被解雇.我发现的是一团糟,没有任何明显的感觉或模式.

C   OnChange
FC  OnFocusChange
FCg OnFocusChanging
-   nil parameter
*   non-nil parameter
!   valid selection


Nodes     User action                   Handlers fired (in order)
selected                
0     Click node                    FCg-*   C*!     
1     Click same                    FCg**           
1     Click another                 C-  FCg**   C*! FC*
1     Ctlr + Click  same            FCg**   C*!     
1     Ctrl + Click another          FCg**   C*! FC* 
1     Shift + Click same            FCg**   C*!     
1     Shift + Click another …
Run Code Online (Sandbox Code Playgroud)

delphi user-interface virtualtreeview

11
推荐指数
1
解决办法
3417
查看次数

如何在TVirtualStringTree中填写滚动条上方的区域?

我需要填写(黑色)我在下面的图片中突出显示的小白方块.

我试过添加额外的列.我试过扩展PaintInfo.PaintRectangle.我已经尝试了我能想到的Amount列上的每个设置.我没有想法.

任何人对如何做到这一点都有任何想法?

以下是执行自定义标题绘制的代码.(原谅with声明,不是我原来的代码....)

procedure TWinPOSReceiptPluginForm.ReceiptDisplayTreeAdvancedHeaderDraw(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo;
  const Elements: THeaderPaintElements);
var
    TempText: string;
begin
    with PaintInfo do
    begin
      // First check the column member. If it is NoColumn then it's about the header background.

        if (hpeBackground in Elements) and (Column <> nil) then begin
          TempText := Column.Text;
          TargetCanvas.Brush.Color := $444444;
          TargetCanvas.FillRect(PaintRectangle);
          TargetCanvas.Font.Color := clWhite;
          TargetCanvas.Font.Style := [];
          TargetCanvas.TextOut (PaintRectangle.Left + 3, PaintRectangle.Top + 3, TempText);
          end;
    end;
end;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

delphi virtualtreeview tvirtualstringtree

10
推荐指数
1
解决办法
385
查看次数

什么时候应该使用VirtualTree的BeginSynch vs BeginUpdate?

从1年开始,我们就开始在Delphi7中使用VirtualTreeView v5.5.3,非常喜欢!

我们想充分利用该组件的潜力,但是BeginSynch帮助文件中只有很少的关于该方法的信息。

什么时候应该BeginSynch + EndSynch使用BeginUpdate + EndUpdate

哪一个应嵌套在另一个中?

在这种情况下可以使用哪些方法?(SortScrollIntoViewMoveToNodeHeightisVisible[],...),以组画的操作,以加快应用程序之前?

delphi virtualtreeview

10
推荐指数
1
解决办法
189
查看次数

如何安装Virtual Treeview?

Mike Lischke的虚拟树视图在网络上和第三方组件中都很受欢迎.我刚刚在我的机器上下载了4.8.7版本.

我有两个分区的Delphi 2010和Delphi 7.0.

Aftter单击虚拟树视图的安装程序,提示日志文件,说已成功安装.

我检查Delphi 2010,是的,它是在显示3个控件的组件面板上.

但是当我启动Delphi 7.0时,IDE会提示"无法加载VirtualtreesD7.bpl ...".我忽略它,发现虚拟树视图设计时包在列表中,但是UNCHECKED.如果我尝试检查它,它再次承诺"无法加载virtualtreesD7 ......".

我搜索整个磁盘并找到VirtualTreesD7D.bpl,并在设计时包列表中手动添加它.它是带有3个控件的调色板.

我快速测试并退出Delphi 7.0.但是,当我重新启动Delphi 7.0时,它再次提示"无法加载VirtualtreesD7.bpl ...",它再次不在palatte而不是在设计时包列表中检查.

这是一个非常简单的问题.你能告诉我怎么解决吗?非常感谢你提前.

编辑:

感谢您的评论.

我测试了你的评论,但没有成功.

新问题:

如果我通过单击unins000.exe卸载虚拟树视图并仅在Delphi 7.0中重新安装它,安装程序会在最后一个屏幕提示''... completed .."并且没有错误提示.当我启动Delphi 7时,虚拟树视图设计时间包不在包列表中.这比上次更糟糕(上次它在包列表中但未检查).

我仔细检查该日志文件的一行一行,它说:

...
...
VirtualTreesD7.dpk(39) 
VirtualTreesD7.dpk(39) 
VirtualTreesD7.dpk(41) 
VirtualTreesD7.dpk(43) 

**VirtualTreesD7D.dpk(32) Fatal: Required package 'VirtualTreesD7' not found**
Run Code Online (Sandbox Code Playgroud)

为什么?为什么它没有成功安装,也没有在上次安装屏幕中提示安装错误.

如何解决这个"致命......未找到"的问题.

谢谢大家的帮助.

新编辑:(这是答案吗?)

首先感谢您的帮助和建议.

我需要2个小时来测试并找到可能的解决方案.它适用于我的机器,可以安装在Delphi 7.0中.

脚步:

1. uninstall virtual treeview by clicking unins000.exe from Delphi 7.0 ( you can separately install virtual treeview in Delphi 2010)

2. clicking newly downloaded VirtualTreeview setup 4.8.7.exe, install it in Delphi …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7 virtualtreeview

9
推荐指数
1
解决办法
2981
查看次数

如何在virtualtreeview中对大面积的单元格进行选择?

我使用TVirtualTreeView作为旧TStringgrid的绝佳替代品.

在我遗漏的一个特征上,是可以选择任何单元格区域(除了单个列,行或整个区域).

我找不到任何解决方案,有人有建议吗?

delphi virtualtreeview

9
推荐指数
1
解决办法
471
查看次数

迭代节点及其子节点并修改数据

我正在为delphi 2009使用虚拟树列表.我创建了一个包含以下数据的树:

type
  PTreeData = ^TTreeData;
  TTreeData = record
    FCaption: String;
    FPath: String;
  end;
Run Code Online (Sandbox Code Playgroud)

我想按特定顺序迭代所有元素.我需要获取第一个顶级节点,然后遍历其所有子节点并修改FPath字段.当我完成它的孩子时,我想获得另一个顶级节点,依此类推.

首先,我不知道如何在顶级节点上进行迭代.

提前感谢您对此提出的任何建议

delphi virtualtreeview

9
推荐指数
1
解决办法
3937
查看次数

VirtualTreeView - 同一节点中不同颜色的文本

我正在尝试创建一个TVirtualStringTree类似于以下内容的视图:

用不同的字体颜色的文件夹视图

在上面的例子中,我展示了一些我想要达到的可能场景.FolderA具有粗体文本,之后在同一节点中位于其后面的红色非压缩文本.我正在寻找制作这种输出的方法.

但是,如果创建太难或太难,我会对FolderBFolderC类型的输出感到满意- 这可能是由2列组成的,一列包含文件夹名称,另一列包含内部文件的数量.

FolderD在这里仅作为没有文件的文件夹的示例和该文件夹的输出(文本是非文本的,没有数字).

我正在寻找任何方向如何产生这种效果,因为似乎VirtualTreeView每个节点只能有单色或粗体设置.任何提示或建议如何向FolderAFolderBFolderC的方向移动高度赞赏,所以我有一个起点.Delphi或C++ Builder示例都是受欢迎的(最终代码将在C++ Builder中).

delphi c++builder virtualtreeview tvirtualstringtree

8
推荐指数
1
解决办法
3594
查看次数

Delphi:从虚拟字符串树中删除节点后更改焦点

我有一个类型的组件TVirtualStringTree(让我们称之为VST).它具有列表形式的节点,即所有节点处于同一级别.我想在删除节点后使用该DeleteNode方法更改焦点并使用OnFreeNode事件:

procedure TMyForm.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
  NewFocus: PVirtualNode;
begin
  NewFocus := VST.GetNext(Node);
  if not Assigned(newFocus) then
    NewFocus := VST.GetPrevious(Node);
  if Assigned(NewFocus) then
  begin
    VST.FocusedNode := NewFocus;
    VST.Selected[NewFocus] := True
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我还希望更改引起一些反应,例如设置Enabled按钮的属性:

procedure TMyForm.VSTFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex);
begin
  btn1.Enabled := Assigned(Node);
end;
Run Code Online (Sandbox Code Playgroud)

但是解决方案存在一些问题.例如,当我使用"取消"按钮关闭表单(表单是使用ShowModal方法打开)时,节点被释放,VSTFocusChanged被触发,并且由于nil按钮,后者会抛出异常.当然,我可以检查按钮是否已分配,但在删除节点后是否有更优雅的解决方案更改焦点而没有这种不良影响(并且没有其他不良影响)?

delphi focus virtualtreeview tvirtualstringtree

8
推荐指数
1
解决办法
754
查看次数