我下载了适用于Borland C ++ Builder 6.0的VirtualTreeView组件,我正在尝试学习如何使用它。不幸的是,我找不到用于此编译器的任何代码作为示例,并且我基于所提供的Delphi代码。
我用一个仅包含一个TVirtualStringTree的表单创建了一个项目。我正在使用此代码来尝试了解其工作原理。
在CPP中:
void __fastcall TForm1 :: FormCreate (TObject * Sender)
{
AnsiString cLiteral;
PTrecBase pRecData;
PVirtualNode Node;
VST-> BeginUpdate ();
VST-> Clear ();
VST-> NodeDataSize = sizeof (TRecBase);
for (int nItem = 0; nItem <10; nItem ++)
{
cLiteral = "Node" + IntToStr (nItem);
Node = VST-> AddChild (NULL);
pRecData = (PTrecBase) VST-> GetNodeData (Node);
pRecData-> Literal = cLiteral;
for (int nSub = 0; nSub <5; nSub ++)
{
Node = getNodeDondeInsert (cLiteral);
Node = VST-> AddChild (Node);
pRecData = (PTrecBase) VST-> GetNodeData (Node);
pRecData-> Literal = cLiteral + "Sub" + IntToStr (nSub);
}
}
VST-> EndUpdate ();
}
在H:
class TForm1: public TForm
{
__published: // IDE-managed Components
TVirtualStringTree * VST;
void __fastcall FormCreate (TObject * Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1 (TComponent * Owner);
};
struct TRecBase
{
AnsiString Literal;
};
typedef TRecBase * PTrecBase;
我不知道我在做什么错,这样您就看不到我正在定义的字面量。有人有可以指导我的C ++ Builder代码吗?谢谢。
答案 0 :(得分:1)
您正在存储每个节点的字符串数据,但是没有为TreeView分配事件处理程序,尤其是OnGetText
,以便在呈现TreeView时将这些字符串提供给TreeView。这是一个虚拟控件,当它要求您提供数据时,您必须为其提供数据。
VirtualTreeView的GitHub存储库上有一个C++Builder demo
答案 1 :(得分:-1)
感谢您的答复。
您向我指示的代码我已经尝试过了,但我无法理解,因为我找不到需要在节点的哪一部分中指示节点文字的信息。所附的图片是我通过该示例代码得到的结果。
正如您所看到的,结果实际上与我昨天上升的图像相同。最令我遗憾的是,即使我进行了搜索,也没有找到适用于Borland C ++的该组件的任何示例代码。
更重要的是:如果我使用调试器运行该示例,则与代码相同的事情也会发生。
在我的代码中,当我执行 pRecData-> Literal = cLiteral; 时,我在调试器中看到它具有计算出的值(节点0 ,节点1 等),在示例中,当执行该节点时( Text = Data-> Caption; ),我可以看到Text和Data-> Caption都包含值,例如 Level 0,Index 5 ,但此文字不会显示在TVirtualStringTree中。