zoukankan      html  css  js  c++  java
  • 树形控件数据刷新前,保存及还原展开和选中状态

    void __fastcall TMainFrm::SaveExpandedNodes(TTreeView *ATree,
    std::map<AnsiString, Pointer>& g_TempList)
    {
    TTreeNode *ANode;
    TTreeNode *ANextNode;
    TTreeNodes *ANodes;
    ANodes = ATree->Items;
    g_TempList.clear();
    Cardinal FlagVal = 0;
    bool Expaned1 = false;
    bool Selected1 = false;
    ANode = ANodes->GetFirstNode();
    while (ANode)
    {
    Expaned1 = ANode->Expanded;
    Selected1 = ANode->Selected;
    if (Expaned1 || Selected1)
    {
    FlagVal = Selected1 << 1;
    FlagVal = FlagVal | Expaned1;
    AnsiString S = ANode->Text;
    g_TempList[S] = Pointer(FlagVal);
    }
    ANextNode = ANode->getFirstChild();
    while (ANextNode)
    {
    bool Expaned = ANextNode->Expanded;
    bool Selected = ANextNode->Selected;
    if (Expaned || Selected) {
    FlagVal = Selected << 1;
    FlagVal = FlagVal | Expaned;
    AnsiString S = ANode->Text + ANextNode->Text;
    g_TempList[S] = Pointer(FlagVal);
    }
    ANextNode = ANode->GetNextChild(ANextNode);
    }
    ANode = ANode->getNextSibling();
    }
    }

    void __fastcall TMainFrm::ExpandNodes(TTreeView *ATree, std::map<AnsiString,
    Pointer>& g_TempList)
    {
    TTreeNodes *ANodes = ATree->Items;
    TTreeNode *ANode = ANodes->GetFirstNode();
    TTreeNode *ANextNode;
    AnsiString S;
    Pointer P;
    Cardinal FlagVal;
    bool Expand, Selected;

    while (ANode)
    {
    S = ANode->Text;
    P = g_TempList[S];
    if (P != 0)
    {
    FlagVal = Cardinal(P);
    Expand = FlagVal & 1;
    Selected = (FlagVal >> 1) & 1;

    if (Expand)
    {
    ANode->Expand(true);
    }
    if (Selected)
    {
    ANode->Selected = true;
    }
    }
    ANextNode = ANode->getFirstChild();
    while (ANextNode)
    {
    S = ANextNode->Text;
    P = g_TempList[ANode->Text + S];
    if (P != 0)
    {
    FlagVal = Cardinal(P);
    Expand = FlagVal & 1;
    Selected = (FlagVal >> 1) & 1;
    if (Expand)
    {
    ANextNode->Expand(true);
    }
    if (Selected)
    {
    ANextNode->Selected = true;
    }
    }
    ANextNode = ANode->GetNextChild(ANextNode);
    }
    ANode = ANode->getNextSibling();
    }
    }

  • 相关阅读:
    转载:oracle事务的ACID特性
    oracle对象之存储函数
    转载:散列冲突的解决策略
    [Linux]Redhat7配置本地镜像源
    [Linux]Redhat7配置CentOS7 YUM源
    java120经典面试题
    Dijkstra算法
    树的重构
    第三章垃圾收集器与内存分配策略
    内存区域与内存溢出异常
  • 原文地址:https://www.cnblogs.com/liujicai/p/6903394.html
Copyright © 2011-2022 走看看