标签: virtualtreeview

如何进行虚拟Treeview控制以始终按行滚动?

虚拟树视图垂直滚动的像素,不同的方式,标准德尔福网格,TListViewTTreeView(或大部分我所知道的其他此类管制的)滚动一行,并保持全线可见在任何时候控制的顶部.当我使用光标键进行导航时,根据方向,第一行或最后一行是完全可见的.使用鼠标滚动时无论如何都没有对齐.

例如,使用Delphi 2007和2009中的Structure窗口可以观察到此行为.

有没有办法设置许多属性以具有标准Windows控件的行为?或者是否有一组补丁来实现这一目标?

delphi virtualtreeview

4
推荐指数
2
解决办法
2648
查看次数

Delphi - ListView或类似的所有者绘制按钮

如何使用每行上的按钮创建列表视图(或类似文件)?按钮需要能够根据需要在每行上具有不同的文本/颜色.

我确信Virtual Treeview对此非常完美,但我有点迷失它.

谢谢

-Brad

delphi virtualtreeview

4
推荐指数
1
解决办法
3959
查看次数

从其他线程访问VT数据是否安全?

从辅助线程更改VirtualTreeView数据是否安全?如果是,我应该使用关键部分(甚至是Synchronize方法)吗?

我担心当我从另一个线程写入VT的数据记录时,主线程同时调用它的重绘,这个刷新将导致同时读取相同的记录.我补充说我在应用程序中只使用了2个线程.

就像是 ...

type
  PSomeRecord = ^TSomeRecord;
  TSomeRecord = record
    SomeString: string;
    SomeInteger: integer;
    SomeBoolean: boolean;
end;

...
var FCriticalSection: TRTLCriticalSection; // global for both classes
...

procedure TMyCreatedThread.WriteTheTreeData;
var CurrentData: PSomeRecord;
begin
  EnterCriticalSection(FCriticalSection); // I want to protect only the record

  CurrentData := MainForm.VST.GetNodeData(MainForm.VST.TopNode);

  with CurrentData^ do // I know, the ^ is not necessary but I like it :)
    begin
      SomeString := 'Is this safe ? What if VT will want this data too ?';
      SomeInteger := …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading synchronization critical-section virtualtreeview

4
推荐指数
1
解决办法
613
查看次数

VirtualStringTree正确/推荐使用

我一直在使用virtualstringtree一段时间了.我将它用于两个不同的东西,首先是作为选择的普通树,显示数据,其次是作为显示SQL语句输出的网格.

加载到树中的所有数据都来自数据库.对于树示例,我有一个parentId字段来区分层次结构,对于网格示例,我只使用带有每个树的自定义记录的SQL语句(这是唯一的).

我的问题与填充树的首选/最佳方式有关.我从VST文档中读到,您应该使用onInitNode事件和rootnodecount.但是我发现使用AddChild()方法非常相似,即使不鼓励它.

让我展示一些(简化的)示例:

Heirarchy

type PData = ^rData;
    rData = packed record
      ID : Integer;
      ParentID : Integer;
      Text : WideString;
    end;

procedure Loadtree;
 var Node : PVirtualNode;
Data : PData;
 begin
    Q1 := TQuery.Create(Self);
            try
                Q1.SQL.Add('SELECT * FROM Table');
            Q1.Open;
            Q1.Filter := 'ParentID = -1'; //to get the root nodes
            Q1.Filtered := True;
            while not Q1.Eof do
            begin
                    Node := VST.AddChild(nil);
                    Data := VST.GetNodeData(Node);
                    Data.ID := Q1.Fields[fldID].AsInteger;
                    Data.ParentID := Q1.Fields[fldParentID].AsInteger;
                    Data.Text := Q1.Fields[fldText].AsString;
                    //now filter the query again …
Run Code Online (Sandbox Code Playgroud)

delphi performance virtualtreeview tvirtualstringtree

4
推荐指数
1
解决办法
2926
查看次数

XE2的VirtualTreeView组件

我在哪里可以获得Delphi XE2的VirtualTreeView组件?
我可以在这里看到VirtualTreeView的下载链接:http://www.soft-gems.net/index.php? option = com_content&task = view&id = 30& Itemid = 35

但是没有Delphi XE2的软件包,安装程序也不支持XE2.
仅源代码包仅支持Delphi 2007(前Unicode).

delphi virtualtreeview delphi-xe2

4
推荐指数
1
解决办法
3527
查看次数

在TVirtualStringTree中错误地绘制了主题复选框

启用toThemeAware时,VirtualTrees.pas 5.0.0版中的复选框处理显示已损坏.csUncheckedNormal的节点被绘制为checked + hot.

要使用DrawElement正确绘制未经检查的主题复选框,Details记录必须为:Element = teButton,Part = 3,State = 5.但是,当节点设置为csUncheckedNormal时,VirtualTrees.pas最终调用DrawElement,State = 1 .

似乎在VirtualTrees中声明了大量的间接和额外的常量,所以我不确定如何最好地解决这个问题.想法欢迎......

(甚至在屏幕上获取TVirtualStringTree并填充一些数据的最小代码在这里发布也有点冗长.除了基础知识之外,重现这一点所需要的只是在TreeOptions.MiscOptions中启用toCheckSupport,并设置Node.CheckType: = InitNode回调中的ctTriStateCheckBox.)

delphi virtualtreeview delphi-xe2 tvirtualstringtree vcl-styles

4
推荐指数
1
解决办法
1519
查看次数

如何在 Virtual TreeView 列标题中启用复选框?

我在 Delphi XE2 中使用 Virtual TreeView V5.0.1(2012 年 9 月 6 日)。设置CheckBox := True在标题栏属性不启用复选框,所以这里的问题,我该如何启用列标题复选框?

在此处输入图片说明

delphi virtualtreeview

4
推荐指数
1
解决办法
4249
查看次数

在VirtualTreeView中更改拖动光标

默认情况下使用VirtualTreeView拖动操作时[doCopy,doMove].移动操作由带有小方框的箭头指针指示,复制操作由相同的指针图标指示,但旁边添加了[+].

默认情况下,VT使用复制操作,如果按下修改键(SHIFT键),则会修改操作以移动,从而从指针中删除[+].

这就是我需要的:

  • 反转操作(默认是移动,按下修改键 - 复制),因此反向指针箭头
  • 替换修饰键 - CTRL而不是SHIFT
  • 读取两个操作中的哪个操作发生并开始复制或移动操作

任何指向正确方向的指标都值得赞赏.

delphi c++builder virtualtreeview

4
推荐指数
1
解决办法
912
查看次数

VitrtualStringTree.如何Drag'n'Drop到ROOT水平?

有一棵树:ROOT - VirtualStringTree(你看不到它,TVirtualStringTree.RootNode)

  • 我的根节点1
  • 我的根节点2
    • 第二节点1
    • 第二节点2
    • 第二节点3
  • 我的根节点3

我可以Drag'n'Drop"我的根节点3"到任何可见节点,但我不能将它返回到defaut位置,到树的根级别.

我试着这样:

//Part of code from OnDragDrop Event of VirtualStringTree
    if (Sender.DropTargetNode = Sender.RootNode) then
    begin
      for i := 0 to high(Nodes) do
      begin
        LinksTree.MoveTo(Nodes[i], Sender.DropTargetNode, Attachmode, False);
      end;
    end;
Run Code Online (Sandbox Code Playgroud)

我把鼠标放到了无处,但没有任何反应.在DragOver中,如果DropTarget是VST.RootNode,则接受drop to root.

谁知道,如果我将鼠标拖动到组件的空白区域,如何将节点删除到VST.RootNode?

delphi virtualtreeview delphi-xe tvirtualstringtree delphi-xe4

4
推荐指数
1
解决办法
485
查看次数

使用隐藏节点着色VirtualStringTree行

我目前在我的树的OnBeforeCellPaint事件中使用此代码:

if Node.Index mod 2 = 0 then
begin
  TargetCanvas.Brush.Color := clBlack;
  TargetCanvas.FillRect(CellRect);
end
else
begin
  TargetCanvas.Brush.Color := clPurple;
  TargetCanvas.FillRect(CellRect);
end;
Run Code Online (Sandbox Code Playgroud)

为我的节点着色.但是对于隐藏节点,这不起作用,因为索引保持不变.是否有可见的索引或简单的解决方法?

提前致谢.

delphi virtualtreeview delphi-xe2 tvirtualstringtree

4
推荐指数
1
解决办法
349
查看次数