• 高拍仪BUG修正之一


    BUG1:

    故障现象:

    选择对象的填充效果,并修改之

    确定后,出现异常

    确定N次后,程序退出

    原因:

        FBrushData->GdiBrushStyle = (TBrushStyle)ComboBox_BrushStyle->ItemIndex;

    此处ItemIndex = -1,导致不合法的GdiBrushStyle

    而在窗口中,ComboBox_BrushStyle下拉列表项为空

    再继续找,发现居然是屏蔽了代码

            // string        THelper::GetResourceStrings(comboBox->Items, NULL, "BrushStyles", 8, comboBox);

    恢复之,结果还是不行。

    跟踪发现是资源XML未找到,原来是把lang目录移到了res目录下。修改语言包设置函数:

    void __fastcall TMainForm::SetLanguage(UnicodeString language) {

        // 系统模块SystemModule:设置语言

         QA_LOG_FUNCTION(THelper::FormatString

         ("TMainForm::SetLanguage(language: %s)", language.w_str()));

         FLanguage = language.Trim();

         GlobalQAUtilObject->RootPath = THelper::GetApplicationPath() + "res\lang\" + FLanguage + "\";

         THelper::ReloadResourceXML();

         TGraphApp::HelpFileName = "QianProjection.chm";

     

         GlobalQAUtilObject->RefreshResourceForControl(BarManager, "MainForm.cfg");

         GlobalQAUtilObject->RefreshResourceForControl(dxDockingController(),

         "MainForm.cfg");

         GlobalQAUtilObject->RefreshResourceForControl(this, "MainForm.cfg");

    }

    结果:首先是下拉列表正常了。

    再进行填充效果设置,也正常了

     

    BUG2:

    故障现象:进入程序后,切换到图文识别界面,出现非期望的对象:

    原因是上次保存的识别分区被保存下来了。

    强制使得读入文件时,当前层为0即可:

    void __fastcall TMainForm::ReadLayerInfo(CbwXmlNode * destNode) {

        QA_LOG_FUNCTION("TMainForm::ReadLayerInfo");

        CbwXmlNode * layerNode = destNode->NodeByName("Layers");

        if (!layerNode)

            return;

        if (layerNode->ElementNumber != 1)

            return;

        UnicodeString current = layerNode->AttributeValueByName("current");

        TreeView_Layer->Items->Clear(); // allLayers -> 所有图层

        TTreeNode * currentNode = TreeView_Layer->Items->AddChild(NULL, "所有图层");

     

        // ************* 非常奇怪,只加了一个节点,但经过调试发现,到此将存在三个节点 **********************

        // ************* 所以,为确保只有一个节点,加入以下代码,这是肿么回事?没想明白 ********************

        TTreeNode * node = THelper::GetTopestTreeNode(TreeView_Layer);

        while (node != currentNode) {

            TTreeNode * deleteNode = node;

            node = node->getNextSibling();

            delete deleteNode;

        }

        // ************* 这样做就好了,好了归好了,但还是没想明白,有空的时候再来调试一下 ********************

     

        FLayerDescriptions.clear();

        FVisibleLayers.clear();

        FCurrentLayer = 0;

        ReadTreeNodeAsLayerInfo(TreeView_Layer, THelper::GetTopestTreeNode(TreeView_Layer), layerNode->Elements(0));

        for (int i = 1; i < TreeView_Layer->Items->Count; ++i) {

            TTreeNode * treeNode = TreeView_Layer->Items->Item[i];

            FLayerDescriptions[treeNode->ImageIndex] = treeNode->Text;

            if (THelper::GetTreeNodeChecked(treeNode)) {

                FVisibleLayers[treeNode->ImageIndex] = true;

                if (FCurrentLayer == 0)

                    FCurrentLayer = treeNode->ImageIndex;

            }

        }

        destNode->Delete(destNode->IndexOf(layerNode));

        if (current.Length()) {

            int currentTag = current.ToInt();

            FCurrentLayer = currentTag;

            FVisibleLayers[FCurrentLayer] = 1;

        }

        TTreeNode * firstNode = THelper::GetTopestTreeNode(TreeView_Layer);

        if (firstNode)

            firstNode->Expand(true);

     

        FCurrentLayer = 0;

    }

    当然,最简单的办法是,在图文识别页面下,全选这些对象,删除之。在交流演示页面中,保存当前文件即可。

  • 相关阅读:
    人生中最重要的三位老师
    自我介绍
    秋季学习总结
    第五周学习总结
    第四周总结
    第三周基础作业
    判断上三角矩阵
    第二周作业及编程总结
    求最大值及其下标
    查找整数
  • 原文地址:https://www.cnblogs.com/drgraph/p/3155694.html
Copyright © 2020-2023  润新知