Checkbox VirtualTreeView n状态复选框 我必须在C++ Builder(RAD StudioXE5)中使用ValueStrutRead组件。 我需要提供一种可能,对我的树的元素进行否定检查 例如,让我们看看没有子节点。 我希望能够使用“V”符号(通常)和“X”符号检查此节点。当然,这个节点必须能够被取消选中。 “X”可以通过第二次单击节点或右键单击来设置

Checkbox VirtualTreeView n状态复选框 我必须在C++ Builder(RAD StudioXE5)中使用ValueStrutRead组件。 我需要提供一种可能,对我的树的元素进行否定检查 例如,让我们看看没有子节点。 我希望能够使用“V”符号(通常)和“X”符号检查此节点。当然,这个节点必须能够被取消选中。 “X”可以通过第二次单击节点或右键单击来设置,checkbox,c++builder,virtualtreeview,Checkbox,C++builder,Virtualtreeview,如何实施 不幸的是,内置的三态复选框只为节点提供了额外的状态,这些节点同时具有选中和未选中的子节点。我发现了这种方法 在节点的记录结构中,必须添加显示其检查状态的附加字段(例如,它可以具有char类型) 然后选择节点的CheckType=ctButton。在这种情况下,单击此小按钮会触发OnChecked事件。每次单击都必须增加环中节点的检查状态(0->1->2->3->0->1…) 通过实验发现偏移:) if(checkState < 3) ++checkState; else

如何实施

不幸的是,内置的三态复选框只为节点提供了额外的状态,这些节点同时具有选中和未选中的子节点。

我发现了这种方法

  • 在节点的记录结构中,必须添加显示其检查状态的附加字段(例如,它可以具有char类型)

  • 然后选择节点的CheckType=ctButton。在这种情况下,单击此小按钮会触发OnChecked事件。每次单击都必须增加环中节点的检查状态(0->1->2->3->0->1…)

    通过实验发现偏移:)

  • if(checkState < 3)
        ++checkState;
    else
        checkState = 0;
    
    void __fastcall TSomeForm::TreeAfterCellPaint(TBaseVirtualTree *Sender,
      TCanvas *TargetCanvas, PVirtualNode Node, TColumnIndex Column,
      TRect &CellRect)
    {
        Record* record = (Record*)Tree->GetNodeData(Node);
        int offset = 22 + 18 * Tree->GetNodeLevel(Node);
        CheckBoxesImageList->Draw(TargetCanvas, CellRect.Left + offset, CellRect.Top + 1, record->CheckState);
    }