标签: virtualtreeview

何时在OnNewText事件后重绘VirtualTreeView?

我使用此代码来填充VirtualStringTree并允许重命名项目:

//---------------------------------------------------------------------------
// Structure for the tree
//---------------------------------------------------------------------------
struct TVSTdata
{
UnicodeString Name;
};
//---------------------------------------------------------------------------
// Initialization of the tree
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
VirtualStringTree1->NodeDataSize = sizeof(TVSTdata);
// Fill all nodes with initial data
InitializeTree();
}
//---------------------------------------------------------------------------
// Fill all nodes with data and assign FocusedNode
//---------------------------------------------------------------------------
void TForm1::InitializeTree()
{
TVirtualNode* pNode;
TVirtualNode* pActiveNode;
TVSTdata*     pData;

VirtualStringTree1->BeginUpdate();
VirtualStringTree1->Clear();

pNode = VirtualStringTree1->AddChild(NULL); pData = static_cast<TVSTdata*>(VirtualStringTree1->GetNodeData(pNode)); pData->Name = "This is name 1";
pNode = VirtualStringTree1->AddChild(NULL); pData = static_cast<TVSTdata*>(VirtualStringTree1->GetNodeData(pNode)); pData->Name …
Run Code Online (Sandbox Code Playgroud)

delphi c++builder virtualtreeview tvirtualstringtree

3
推荐指数
1
解决办法
1444
查看次数

虚拟树视图。如何修改子列的宽度?

我的朋友正在使用 VirtualTreeView 在 Delphi 中工作,并且有下一个问题:他有两列,第一列中的每一行都有数据和子项。是否可以不更改第一列宽度来设置最大子列宽度?

任务

传奇:

  • 圆圈是节点
  • 矩形是文本(根节点的黑色矩形是两列)

现在的样子 - 看看孩子的黑色反应角。它必须如何 - 看红色矩形。

delphi virtualtreeview tvirtualstringtree

3
推荐指数
1
解决办法
1274
查看次数

使用UseExplorerThemes的VirtualTreeView

我刚刚发现使用Option toUseExplorerTheme可以为VirtualStringTree生成一个很好的选择矩形.但是,如果设置了选项toGridExtensions并且树中有多个列,则不会为内部单元格绘制选区的垂直边框,并且也会丢失圆角.仅正确绘制左侧和最右侧列的最外边缘和角.看起来好像在最外面的列之间绘制了选择矩形,并且刚刚在选择矩形上绘制了未选择列的背景.

关闭toGridExtensions会产生正确的选择矩形,但我更喜欢将其打开,因为只能通过单击标准模式中的文本来选择单元格(而不是单击文本旁边的空白区域).

Delphi 7和XE2会出现问题,也可能与其他版本一起出现问题.

要重现向表单添加TVirtualStringTree,显示标题,向标题添加多个列,并激活选项toGridExtensions(MiscOptions),toUseExplorerTheme(PaintOptions),toExtendedFocus(SelectionOptions),运行程序并单击任何单元格.

delphi virtualtreeview

3
推荐指数
1
解决办法
576
查看次数

VirtualStringTree锁定列0

是否可以VirtualStringTree像在Excel中一样在水平滚动期间锁定列0(带节点名称)?

delphi virtualtreeview tvirtualstringtree

3
推荐指数
1
解决办法
475
查看次数

如何为下划线或突出显示节点标题的一部分

我想在virtualtreeview中实现一个搜索功能.我想突出显示或强调节点中搜索到的单词.

我怎样才能做到这一点?谢谢

delphi virtualtreeview

3
推荐指数
1
解决办法
1090
查看次数

TVirtualStringTree中的图标绘有异常

这是重现问题的非常小的项目(VirtualStringTree版本6.5):

type
  TForm1 = class(TForm)
    vstTest: TVirtualStringTree;
    Images: TImageList;
    procedure FormCreate(Sender: TObject);
    procedure vstTestGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
      TextType: TVSTTextType; var CellText: string);
    procedure vstTestGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind;
      Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: TImageIndex);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  PTestRec = ^TTestRec;
  TTestRec = record
    Col1: string;
    Col2: string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  Node: PVirtualNode;
  Data: PTestRec;
begin
  vstTest.Header.Columns.Add;
  vstTest.Header.Columns.Add;
  vstTest.Header.Options := …
Run Code Online (Sandbox Code Playgroud)

delphi virtualtreeview tvirtualstringtree delphi-10.1-berlin

3
推荐指数
1
解决办法
570
查看次数

TVirtualTreeview 编辑器如何工作?

我正在 Delphi 中探索 Virtual Treeview 并运行了一个示例程序,其中通过按 F2 来调用编辑器,开始编辑过程使用 Virtualtreeview 中的内置编辑器(无附加编辑组件)。文本发生了变化,但当我单击不同的节点时,它立即变回了原始文本。

这让我探索了 VirtualTrees.pas 中的源代码,以研究编辑过程是如何工作的。一切似乎都归结为TBaseVirtualTree.doedit. 我已经检查了每个步骤,但不确定列中的编辑框究竟是什么操作。

procedure TBaseVirtualTree.DoEdit;

begin
  Application.CancelHint;
  StopTimer(ScrollTimer);
  StopTimer(EditTimer);
  DoStateChange([], [tsEditPending]);
  if Assigned(FFocusedNode) and not (vsDisabled in FFocusedNode.States) and
    not (toReadOnly in FOptions.FMiscOptions) and (FEditLink = nil) then
  begin
    FEditLink := DoCreateEditor(FFocusedNode, FEditColumn);
    if Assigned(FEditLink) then
    begin
      DoStateChange([tsEditing], [tsDrawSelecting, tsDrawSelPending, tsToggleFocusedSelection, tsOLEDragPending,
        tsOLEDragging, tsClearPending, tsDrawSelPending, tsScrollPending, tsScrolling, tsMouseCheckPending]);
      ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions,
        not (toDisableAutoscrollOnEdit in FOptions.AutoOptions));
      if FEditLink.PrepareEdit(Self, FFocusedNode, FEditColumn) then
      begin
        UpdateEditBounds;
        // Node needs repaint …
Run Code Online (Sandbox Code Playgroud)

delphi virtualtreeview

3
推荐指数
1
解决办法
560
查看次数

Delphi5虚拟TreeView想要

有没有人碰巧有与Delphi5兼容的Virtual TreeView的副本?或者有谁知道它可以从哪里下载?

在此先感谢任何回复.

delphi virtualtreeview

2
推荐指数
1
解决办法
744
查看次数

即使树没有聚焦,也要突出显示选择

我在同一个表单上同时使用了几个TVirtualStringTree.

如果树具有选定节点,但焦点当前位于另一个树上,则选择将以浅灰色突出显示.

是否有一种简单的方法可以选择使用通常的选择颜色(我的计算机上的蓝色)突出显示未聚焦的TVirtualStringTree?

谢谢

delphi virtualtreeview

2
推荐指数
1
解决办法
2365
查看次数

树状数据结构(用于VirtualTreeview)

正如Rob Kennedy先生所建议的那样,我已经到了需要停止将数据存储在VCL组件中并具有"基础数据结构"的地步.

首先,这个问题是关于"我如何建立基础数据结构".:)

我的层次结构由2级节点组成.

现在,我通过循环根节点来完成我的东西,其中我循环通过rootnode的子节点,以获得我需要的东西(数据).我希望能够将所有数据存储在所谓的底层数据结构中,以便我可以使用线程轻松修改条目(我想我能够做到这一点?)

但是,当循环遍历我的条目(现在)时,结果取决于节点的Checkstate - 如果我使用的是底层数据结构,我怎么知道我的节点是否被检查,当我的数据结构循环通过时,而不是我的节点?

假设我想使用2个级别.

这将是父母:

TRoot = Record
  RootName : String;
  RootId : Integer;
  Kids : TList; //(of TKid)
End;
Run Code Online (Sandbox Code Playgroud)

那孩子:

TKid = Record
  KidName : String;
  KidId : Integer;
End;
Run Code Online (Sandbox Code Playgroud)

这基本上就是我现在所做的.评论说这不是最好的解决方案,所以我愿意接受建议.:)

我希望你理解我的问题.:)

谢谢!

delphi tree virtualtreeview data-structures

2
推荐指数
1
解决办法
5632
查看次数