Delphi ArcEngine 创建比例尺

//本函数 是在 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;
posted on 2009-03-19 11:10  知真道  阅读(1020)  评论(0编辑  收藏  举报