|
阅读:2701回复:5
PageLayoutControl中如何设定地图的比例尺??
<P>AO+VB,在PageLayoutControl中如何设定地图的比例尺??就象ArcMap中在打印状态下的地图比例尺一样</P>
<img src="images/post/smile/dvbbs/em12.gif" /> |
|
|
1楼#
发布于:2005-09-15 10:10
感谢感谢!
|
|
|
2楼#
发布于:2005-09-14 17:26
<a href="http://www.gisempire.com/bbs/dispbbs.asp?boardID=62;ID=45564;page=2" target="_blank" >http://www.gisempire.com/bbs/dispbbs.asp?boardID=62;ID=45564;page=2</A>
|
|
|
|
3楼#
发布于:2005-09-14 17:09
<P>老大,那句pUID.Value = "esriCore.ScaleBar"我想改变比例尺的样式,应该怎样,在哪里可以查到它的样式?</P>
<img src="images/post/smile/dvbbs/em12.gif" /> |
|
|
4楼#
发布于:2005-09-06 11:13
<P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71">本例要实现的功能是以鼠标在Page Layout上画的Envelope为范围在PageLayout上添加Scale Text。<p></p></P>
<P 0cm 0cm 0pt 39pt; TEXT-INDENT: -42pt; mso-list: l0 level1 lfo1; tab-stops: 9.0pt 18.0pt list 39.0pt">l 要点<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 18pt; LINE-HEIGHT: 12pt; mso-line-height-rule: exactly">本例中,首先需要在PageLayout上创建一个Scale Text元素,然后再设置该元素的属性。实现此功能,用到了接口IScaleText,该接口是用来控制Scale Text,下面是接口属性的介绍:<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 2.0; mso-line-height-rule: exactly">Symbol:设置Scale Text的Text的属性<p></p></P> <P 0cm 0cm 0pt 63pt; TEXT-INDENT: -42pt; LINE-HEIGHT: 12pt; mso-char-indent-count: -4.0; mso-line-height-rule: exactly; mso-para-margin-left: 2.0gd">Style:设置Scale Text风格。Scale Text有两种风格:esriScaleTextAbsolute(例:1:5000)和esriScaleTextRelative(例:1 inch equals 800 miles)<p></p></P> <P 0cm 0cm 0pt 39pt; TEXT-INDENT: -42pt; mso-list: l0 level1 lfo1; tab-stops: 9.0pt 18.0pt list 39.0pt">l 程序说明<p></p></P> <P 0cm 0cm 0pt; tab-stops: 9.0pt 18.0pt"> 函数CreateScaleText根据传入的pExtent参数在PageLayout上添加一个Scale Text元素。<p></p></P> <P 0cm 0cm 0pt 39pt; TEXT-INDENT: -42pt; mso-list: l0 level1 lfo1; tab-stops: 9.0pt 18.0pt list 39.0pt">l 代码<p></p></P> <TABLE #cccccc; MARGIN: auto auto auto 9.05pt; BORDER-COLLAPSE: collapse; mso-padding-alt: 0cm 4.95pt 0cm 4.95pt" cellSpacing=0 cellPadding=0 border=0> <TR yes"> <TD #ece9d8; PADDING-RIGHT: 4.95pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 4.95pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 354.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=473> <P 0cm 0cm 0pt 147.3pt; TEXT-INDENT: -147.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -18.41; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly">Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, _ ByVal y As Long)<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pMxDocument As IMxDocument<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pActiveView As IActiveView<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pEnvelope As IEnvelope<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pRubberBand As IRubberBand<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> On Error GoTo ErrorHandler<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pMxDocument = ThisDocument<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> '确保AcrMap在Layout模式下<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> If Not pMxDocument.ActiveView Is pMxDocument.PageLayout Then<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Exit Sub<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> End If<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> '初始设定<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pActiveView = pMxDocument.PageLayout<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pRubberBand = New RubberEnvelope<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pEnvelope = pRubberBand.TrackNew(pMxDocument.ActiveView.ScreenDisplay, Nothing)<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> CreateScaleText pEnvelope, pActiveView<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> <p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pActiveView.Refresh<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Exit Sub<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly">ErrorHandler:<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> MsgBox Err.Description<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly">End Sub<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly">Public Sub CreateScaleText(pExtent As IEnvelope, pActiveView As IActiveView)<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pMapFrame As IMapFrame<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pMapSurroundF As IMapSurroundFrame<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pMapSurround As IMapSurround<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pElement As IElement<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pScaleText As IScaleText<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pTextSymbol As ITextSymbol<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pUID As New UID<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt -3.15pt; TEXT-INDENT: 16pt; LINE-HEIGHT: 10pt; mso-char-indent-count: 2.0; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly; mso-para-margin-left: -.3gd">On Error GoTo ErrorHandler<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> If Not TypeOf pActiveView Is IPageLayout Then Exit Sub<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pMapFrame = pActiveView.GraphicsContainer.FindFrame(pActiveView.FocusMap)<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pUID.Value = "esriCore.ScaleText"<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> '根据UID创建Scale Text<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pMapSurroundF = pMapFrame.CreateSurroundFrame(pUID, Nothing)<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pElement = pMapSurroundF<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pElement.Geometry = pExtent<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> <p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pMapSurround = pMapSurroundF.MapSurround<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pScaleText = pMapSurround<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pTextSymbol = New esriCore.TextSymbol<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pTextSymbol.Size = 20<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> '设置Scale Text的Symbol属性<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pScaleText.Symbol = pTextSymbol<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> '设置Scale Text的Style<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pScaleText.Style = esriScaleTextRelative<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pActiveView.GraphicsContainer.AddElement pElement, 0<p></p></P> <P 0cm 0cm 0pt 7.35pt; TEXT-INDENT: 8pt; LINE-HEIGHT: 10pt; mso-char-indent-count: 1.0; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly; mso-para-margin-left: .7gd">Exit Sub<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly">ErrorHandler:<p></p></P> <P 0cm 0cm 0pt 7.3pt; TEXT-INDENT: -7.3pt; LINE-HEIGHT: 10pt; mso-char-indent-count: -.91; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> MsgBox Err.Description<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly">End Sub<p></p></P></TD></TR></TABLE> |
|
|
|
5楼#
发布于:2005-09-06 11:12
<P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71">本例要实现的功能是以鼠标在Page Layout上画的Envelope为范围在PageLayout上添加Scale Bar。<p></p></P>
<P 0cm 0cm 0pt 39pt; TEXT-INDENT: -42pt; mso-list: l0 level1 lfo1; tab-stops: 9.0pt 18.0pt list 39.0pt">l 要点<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 18pt; LINE-HEIGHT: 12pt; mso-line-height-rule: exactly">首先需要在PageLayout上创建一个Scale Bar元素,然后再设置该元素的属性。要实现此功能,用到了接口IScaleBar,用来控制ScaleBar。以下是该接口的属性介绍:<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 18pt; LINE-HEIGHT: 12pt; mso-line-height-rule: exactly">Division:设置比例尺的分割单位;<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 18pt; LINE-HEIGHT: 12pt; mso-line-height-rule: exactly">DivisionsBeforeZero:设置比例尺原点左侧显示的段数;<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 1.71; mso-line-height-rule: exactly">Divisions:设置比例尺的总段数(包括原点左侧的段数);<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 1.71; mso-line-height-rule: exactly">Subdivisions:设置主比例尺分为几个子段;<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 1.71; mso-line-height-rule: exactly">Units:设置比例尺的单位;<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 1.71; mso-line-height-rule: exactly">UnitLabel:String型,设置单位标签上的内容;<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 1.71; mso-line-height-rule: exactly">UnitLabelPosition:设置单位标签显示的位置;<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 1.71; mso-line-height-rule: exactly">LabelPosition:比例尺数字标签的显示位置;<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; LINE-HEIGHT: 12pt; mso-char-indent-count: 1.71; mso-line-height-rule: exactly">LabelFrequency:比例尺数字标签的风格。<p></p></P> <P 0cm 0cm 0pt 39pt; TEXT-INDENT: -42pt; mso-list: l0 level1 lfo1; tab-stops: 9.0pt 18.0pt list 39.0pt">l 程序说明<p></p></P> <P 0cm 0cm 0pt; tab-stops: 9.0pt 18.0pt"> 函数CreateScaleBar根据传入的pExtent参数在PageLayout上添加一个ScaleBar元素。<p></p></P> <P 0cm 0cm 0pt 39pt; TEXT-INDENT: -42pt; mso-list: l0 level1 lfo1; tab-stops: 9.0pt 18.0pt list 39.0pt">l 代码<p></p></P> <TABLE #cccccc; MARGIN: auto auto auto 9.05pt; BORDER-COLLAPSE: collapse; mso-padding-alt: 0cm 4.95pt 0cm 4.95pt" cellSpacing=0 cellPadding=0 border=0> <TR yes"> <TD #ece9d8; PADDING-RIGHT: 4.95pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 4.95pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 354.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" vAlign=top width=473> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly">Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long,_<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> ByVal y As Long)<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> Dim pMxDocument As IMxDocument<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> Dim pActiveView As IActiveView<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> Dim pEnvelope As IEnvelope<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> Dim pRubberBand As IRubberBand<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> On Error GoTo ErrorHandler<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> Set pMxDocument = ThisDocument<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> '确保AcrMap在Layout模式下<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> If Not pMxDocument.ActiveView Is pMxDocument.PageLayout Then<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> Exit Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> End If<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> '初始设定<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> Set pActiveView = pMxDocument.PageLayout<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> Set pRubberBand = New RubberEnvelope<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> Set pEnvelope = pRubberBand.TrackNew(pMxDocument.ActiveView.ScreenDisplay, Nothing)<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> CreateScaleBar pEnvelope, pActiveView<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> <p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> pActiveView.Refresh<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> Exit Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly">ErrorHandler:<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 9.0pt 18.0pt; mso-line-height-rule: exactly"> MsgBox Err.Description<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">End Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly">Public Sub CreateScaleBar(pExtent As IEnvelope, pActiveView As IActiveView)<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pMapFrame As IMapFrame<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pMapSurroundF As IMapSurroundFrame<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pMapSurround As IMapSurround<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pElement As IElement<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pFillSymbol As IFillSymbol<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pLineSymbol As ILineSymbol<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pColor As IColor<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pSymbolBackground As ISymbolBackground<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pScaleBar As IScaleBar<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Dim pUID As New UID<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> On Error GoTo ErrorHandler<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> If Not TypeOf pActiveView Is IPageLayout Then<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Exit Sub<p></p></P> <P 0cm 0cm 0pt -3.1pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> End If<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 16pt; LINE-HEIGHT: 10pt; mso-char-indent-count: 2.0; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly">Set pMapFrame = pActiveView.GraphicsContainer.FindFrame(pActiveView.FocusMap)<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pUID.Value = "esriCore.ScaleBar"<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> '根据UID创建Scale Bar<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pMapSurroundF = pMapFrame.CreateSurroundFrame(pUID, Nothing)<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> <p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pSymbolBackground = New esriCore.SymbolBackground<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pFillSymbol = New esriCore.SimpleFillSymbol<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pLineSymbol = New esriCore.SimpleLineSymbol<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pColor = New esriCore.RgbColor<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pColor.RGB = RGB(255, 255, 255)<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pLineSymbol.Color = pColor<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pFillSymbol.Color = pColor<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pFillSymbol.Outline = pLineSymbol<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pSymbolBackground.FillSymbol = pFillSymbol<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pMapSurroundF.Background = pSymbolBackground<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> <p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pElement = pMapSurroundF<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pElement.Geometry = pExtent<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> <p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pMapSurround = pMapSurroundF.MapSurround<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> '创建一个single alternating scale bar<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pScaleBar = New esriCore.AlternatingScaleBar<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pMapSurround = pScaleBar<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> '设置Scale Bar的属性,如分割单位、数字显示的位置、label和label显示位置等<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> With pScaleBar<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> .Division = 100<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> .DivisionsBeforeZero = 0<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> .Divisions = 2<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> .Subdivisions = 4<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> .Units = esriMeters<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> .UnitLabel = "m"<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> .UnitLabelPosition = esriScaleBarAfterBar<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> .LabelPosition = esriAbove<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> .LabelFrequency = esriScaleBarDivisionsAndFirstMidpoint<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> End With<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pMapSurroundF.MapSurround = pMapSurround<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Set pElement = pMapSurroundF<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> pActiveView.GraphicsContainer.AddElement pElement, 0<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> Exit Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly">ErrorHandler:<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly"> MsgBox Err.Description<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; tab-stops: 1.25pt 18.0pt; mso-line-height-rule: exactly">End Sub<p></p></P></TD></TR></TABLE> |
|
|