高拍仪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