让文字随形状同步缩放

不管是设计窗口还是显示窗口,当我们用鼠标滚轮缩放流程图的时候,所有形状都会一起缩放,但形状的文字却不会同步缩放。

如果要文字也同步缩放,在两个窗口的Map控件的
OwerDrawMark事件代码的最后面,找到绘制文字的代码:

If dr.IsNull("文本") = False Then
   
Dim fnt As New Font("微软雅黑", 12)
   
Dim fmt As New StringFormat()
    fmt.Alignment = StringAlignment.Center
    fmt.LineAlignment = StringAlignment.Center
   
If dr.IsNull("字体颜色") = False Then
        brush =
New solidBrush(color.FromArgb(dr("字体颜色")))
   
Else
        brush =
New solidbrush(color.Black)
   
End If
   
If dr.IsNull("字体") = False Then
       
Dim converter As New FontConverter()
        fnt = converter.ConvertFromString(dr(
"字体"))
   
End If
    e.Graphics.DrawString(dr(
"文本"), fnt, brush, rect, fmt)
End
If


假定初始缩放指数为12(只是碰巧和默认字号12相同,别多想),如果你希望文字也能同步缩放,可将这段代码改为:

Dim fnt As New Font("微软雅黑", 12)
Dim
fmt As New StringFormat()
fmt.Alignment = StringAlignment.Center
fmt.LineAlignment = StringAlignment.Center

If
dr.IsNull("字体颜色") = False Then
    brush =
New solidBrush(color.FromArgb(dr("字体颜色")))
Else

    brush =
New solidbrush(color.Black)
End
If
If
dr.IsNull("字体") = False Then
   
Dim converter As New FontConverter()
    fnt = converter.ConvertFromString(dr(
"字体"))
End
If
Dim
defaultZoom As Double = 12 '这个值要和AfterLoad事件中设置的Zoom值相同
Dim
currentZoom As Double = e.Form.Controls("Map1").GeoMap.Zoom
Dim
fntSize As Single = fnt.Size * 2 ^ currentZoom / 2 ^ defaultZoom
If
fntSize <> fnt.Size Then
    fnt =
New Font(fnt.Name, fntsize, fnt.Style)
End
If
e.Graphics.DrawString(dr(
"文本"), fnt, brush, rect, fmt)

提示:

上述代码能实现形状文字的自动缩放,但是纯文字对象还是不会自动缩放的。

如果你希望纯文字对象也能自动缩放,可以删除该文字对象,然后插入一个矩形,将矩形的背景颜色设置为透明,并去掉矩形的边框,最后双击矩形设置文字即可。


本页地址:http://www.foxtable.com/webhelp/topics/6188.htm