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;
}
当然,最简单的办法是,在图文识别页面下,全选这些对象,删除之。在交流演示页面中,保存当前文件即可。