代码名称:我实现的一个将地图中的图层名,图元名作为树视图显示的代码,在Delphi6,MapX4.5中调试通过

作者/收集者:jucozhang

开发环境:Delphi + MapX

代码:

 

(*******************************************************************************************
 ** 我实现的一个将地图中的图层名,图元名作为树视图显示的代码,在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开发的道路上,互相学习,共同进步!