(*******************************************************************************************
** 我实现的一个将地图中的图层名,图元名作为树视图显示的代码,在Delphi6,MapX4.5中调试通过. **
** E-Mail: jucozhang@126.com QQ:214620166 **
** 或可到mapinfo论坛中的MapX版块中给我建议. **
*******************************************************************************************)
//------------------------★☆★☆★☆-----------------------------------------------声明部分格式
procedure AddNodeFromMpMain(Sender:TObject;RNode:TTreeNode;trvTmp:TTreeView);
.
.
.
//------------------------★☆★☆★☆-----------------------------------------------定义变量部分
trvAtt:TTreeView; //---------------------------TreeView控件名称
RootNode:TTreeNode;
//----------------------------定义一个图层用于暂存
searchLayer :CMapXLayer;
.
.
.
//------------------------★☆★☆★☆-----------------------------------------------主程序部分调用AddNodeFromMpMain函数前的设置及初始化
searchlayer:=mpMain.Layers.AnimationLayer; //---------------------------------------mpMain为MapX控件名
//---------------------------------------设置根结点为地图名称
RootNode:=trvAtt.Items.AddFirst(trvAtt.Selected,'地图'+mpMain.TitleText+'中的图层和图元');
AddNodeFromMpMain(self,RootNode,trvAtt);
.
.
.
//-----------------------★☆★☆★☆------------------------------------------------AddNodeFromMpMain函数的实现代码
procedure TfrmCMap.AddNodeFromMpMain(Sender:TObject;RNode:TTreeNode;trvTmp:TTreeView); //TfrmMap为承载MapX控件的窗体类
var
tempNode,TipsNode:TTreeNode; //--------------------tempNode为临时节点,TipsNode为显示的子节点
i,j:Integer; //--------------------循环计数用
srcFeatures:CMapXFeatures; //--------------------用于搜索选中图层的图元集合
begin
tempNode:=RNode;
trvTmp.Selected:=tempNode;
trvTmp.Items.BeginUpdate;
for i:=1 to mpMain.Layers.Count do //-------------◆◇---------第一层循环,用于增加以图层名为名称的子节点
begin
tempNode:=trvTmp.Items.AddChild(RNode,mpMain.Layers.Item(i).Name+'图层');
searchLayer:=mpMain.Layers.Item(i); //选中当前图层,并赋予searchLayer使用
searchLayer.Selection.SelectAll(miSelectionNew); //选中当前图层中的所有图元
srcFeatures:=searchLayer.Selection.Clone; //将选中的所有图元复制到srcFeatures中
TipsNode:=tempNode;
trvTmp.Selected:=TipsNode;
//ShowMessage(searchLayer.Name+';Find Features Count:'+IntToStr(srcFeatures.Count));//调试时用于显示搜索到的图元数
for j:=1 to srcFeatures.Count do //-------------◆◇---------第二层循环,用于在图层节点下将该图层中的所有图元作为子节点加入
begin
TipsNode:=trvTmp.Items.AddChild(tempNode,srcFeatures.Item(j).Name);
trvTmp.Update;
end;
searchLayer.Selection.ClearSelection; //清除选中图层的标记
end;
trvTmp.Items.EndUpdate;
end;
//请您提出建议或意见,在MapX开发的道路上,互相学习,共同进步!