现在用GDI+画图
生成一个bitmap对象 用黑底红字书写 现在遇到字对齐问题
想输出如下内容
航班号 始发站 经停站 起飞时间 变更时间 备注
FF3344 寇寇 他2 09:50:43 10:50:30 延误
3333 1111 222 09:50:43 10:50:30 延误
3333 1111 222 09:50:43 10:50:30 AABB
2222 2222 10:31:56
在debug下查看输出如上面所示 但写到bitmap里发现第二行从第二列开始向后错大概半个字(不是汉字)的位置,到备注就向后面错了一个汉字的位置,第一行的第二个字段和第三个向后错了半个字,但从第四个字段往后都对齐了,其他行没什么问题。
请问是什么原因如何解决?谢谢!
这里无法贴图,我有个图片可以给大家看看 QQ联系:50963795
请高手赐教,谢谢!
代码如下
Dim g As Graphics
Dim align As New StringFormat
Dim aPen As New Pen(Color.Red, 1)
Dim aBrush As SolidBrush
Dim i As Integer
b = New Bitmap(500, 300, PixelFormat.Format32bppRgb)
g = Graphics.FromImage(b)
g.Clear(Color.FromArgb(0, 0, 0))
For i = 0 To 150 Step 10
g.DrawLine(aPen, i, 0, i, 96)
Next
aBrush = New SolidBrush(Color.Red)
align.Alignment = StringAlignment.Near
Dim ft1 As New Font("宋体", 9)
Dim msg As String = "航班号 始发站 经停站 起飞时间 变更时间 备注"
g.DrawString(msg, ft1, Brushes.Red, 5, 12, align)
Debug.WriteLine(msg)
msg = "FF3344 寇寇 他2 09:50:43 10:50:30 延误"
g.DrawString(msg, ft1, Brushes.Red, 5, 24, align)
Debug.WriteLine(msg)
msg = "3333 1111 222 09:50:43 10:50:30 延误"
g.DrawString(msg, ft1, Brushes.Red, 5, 36, align)
Debug.WriteLine(msg)
msg = "3333 1111 222 09:50:43 10:50:30 AABB"
g.DrawString(msg, ft1, Brushes.Red, 5, 48, align)
Debug.WriteLine(msg)
msg += ControlChars.CrLf
Dim size As SizeF = g.MeasureString(msg, ft1)
Dim fontHeight As Integer = size.Height
msg = "2222 2222 10:31:56 "
Debug.WriteLine(msg)
Dim ft2 As New Font("宋体", 9)
size = g.MeasureString(msg, ft2)
g.DrawString(msg, ft2, Brushes.Red, 5, 60, align)
Pict.Image = b
Pict.Invalidate()
宋体不是等宽字体,每个字符的宽度是不定的。所以对不齐是常有的事。建议你不要用"航班号 始发站 经停站 起飞时间 变更时间 备注"这样的方式排版,而是使用绝对坐标定位,或者尝试使用tab符来分隔各个字段。
嗯,正如楼上老大所说,可以使用 TAB定位符或绝对坐标的方法来解决。
基于你的代码,目前有一种十分方便的方法:只须把"宋体"改成"新宋体"
不过要注意的是:Windows98默认情况下没有“新宋体”。还有许多非中文版的操作系统也没有。