ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Delphi ArcEngine 创建比例尺

2021-12-04 21:34:14  阅读:123  来源: 互联网

标签:pActiveMap Delphi IScaleBar pScaleBar aePageLayoutControl 比例尺 Create ArcEngine


 Delphi ArcEngine 创建比例尺,https://www.cnblogs.com/chinacodegear/archive/2009/03/19/1416410.html

//本函数 是在 PageControl上拉选一个区域内 创建一个比例尺,比例尺的样式,我自己定义一个 枚举类型 如下

type  
   ScaleType = (stAlternating, stDoubleAlternating, stHollow, stScaleLine, stSingleDivision, stSetpped);

function InsertScaler(aePageLayoutControl: TPageLayoutControl; stType: ScaleType; sTitle: string): Boolean;
var
   pPageLayout: IPageLayout;
   pScaleBar: IScaleBar;
   pMapFrame: IMapFrame;
   pMapSurroundFrame: IMapSurroundFrame;
   pMapSurround: IMapSurround;
   pElement : IElement;
   pElementPro: IElementProperties;

   pUID     : UID;
   pGraphicsContainer: IGraphicsContainer;
   pActiveMap: IActiveView;
   pMap     : IMap;
   pEnvelope: IEnvelope;

begin
   //产生一个 UID 对象,使用它产生不同的 MapSurround 对象
   pUID := CoUID.Create as UID;
   pUID.Value := 'esriCarto.scalebar';

   pPageLayout := aePageLayoutControl.PageLayout;

   pActiveMap := pPageLayout as IActiveView;

 
   aePageLayoutControl.TrackCancel.Reset;
   pEnvelope := aePageLayoutControl.TrackRectangle;

   if (pEnvelope.IsEmpty) or (pActiveMap = nil) then
      Exit(False);

   pGraphicsContainer := pPageLayout as IGraphicsContainer;
   pActiveMap := pGraphicsContainer as IActiveView;
   pMap := pActiveMap.FocusMap;

   //获得与地图相关的 mapFrame
   pMapFrame := pGraphicsContainer.FindFrame(pMap) as IMapFrame;

   //产生MapSurroundFrame
   pMapSurroundFrame := pMapFrame.CreateSurroundFrame(pUID, nil);

   case stType of //比例尺样式选择
      stAlternating: pScaleBar := CoAlternatingScaleBar.Create as IScaleBar;
      stDoubleAlternating: pScaleBar := CoDoubleAlternatingScaleBar.Create as IScaleBar;
      stHollow: pScaleBar := CoHollowScaleBar.Create as IScaleBar;
      stScaleLine: pScaleBar := CoScaleLine.Create as IScaleBar;
      stSingleDivision: pScaleBar := CoSingleDivisionScaleBar.Create as IScaleBar;
      stSetpped: pScaleBar := CoSteppedScaleLine.Create as IScaleBar;
   end;
   //设置比例尺的属性
   pScaleBar.Division := 3;
   pScaleBar.Divisions := 3;
   pScaleBar.LabelGap := 4;
   pScaleBar.LabelPosition := esriAbove;//比例尺标签的 位置
   pScaleBar.Map := pMap;
   pScaleBar.Name := sTitle;
   pScaleBar.Subdivisions := 2;

   pScaleBar.Units := esriKilometers;
   pScaleBar.UnitLabelPosition := esriScaleBarAfterLabels;
   pScaleBar.UnitLabelGap := 4;
   pScaleBar.UnitLabel := '千米';

   pMapSurround := pScaleBar as IMapSurround;
   pMapSurroundFrame.MapSurround := pMapSurround;
   pElementPro := pMapSurroundFrame as IElementProperties;
   pElementPro.Name := '我的比例尺';

   //将mapsurroundframe添加到控件
   if not pEnvelope.IsEmpty then
   begin
      aePageLayoutControl.AddElement(pMapSurroundFrame as IElement, pEnvelope, EmptyParam, EmptyParam, 0);
      pActiveMap.PartialRefresh(esriViewGraphics, nil, nil);
      Result := True;
   end
   else
   begin     
      Result := False;
   end;

end; 

 

标签:pActiveMap,Delphi,IScaleBar,pScaleBar,aePageLayoutControl,比例尺,Create,ArcEngine
来源: https://www.cnblogs.com/gisoracle/p/15643267.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有