List 7-143 FormPrintPreviewフォームの修正したDrawBoxプロシージャ(修正個所は赤色で示した)
1: Private Function DrawBox(ByRef objDoc As Object, _
ByVal Text As String, _
ByVal ColumnWidth As Long, _
ByVal Alignment As Long, _
ByVal drawFlag As Boolean) As Long
2: ' 指定された幅に収まるように折り返して,テキストを描画する
3: ' 【引数】
4: ' objDoc = 描画対象となるオブジェクト
5: ' ピクチャボックスかPrinterオブジェクトのいずれか
6: ' Text = 描画する文字列
7: ' ColumnWidth = 描画幅
8: ' Alignment = 文字揃え
9: ' dbgGeneral(標準。文字ならば左揃え,数値ならば右揃え)
10: ' dbgLeft(左揃え)
11: ' dbgRight(右揃え)
12: ' dbgCenter(中央揃え)
13: ' のいずれか
14: ' drawFlag = 実際に描画するかどうかのフラグ。
15: ' 描画するときはTrue,
16: ' 描画せずカレント位置を変更するだけのときにはFalse
17: ' 【戻り値】
18: ' 描画したテキストの高さを返す
19:
20: Const OffsetX = 56 ' 表示オフセットはここでは約1mmとする
21: Const OffsetY = 56 ' 表示オフセットはここでは約1mmとする
22:
23: Dim txHeight As Long
24: Dim i As Long
25: Dim putText As String
26: Dim X As Long, Y As Long
27: Dim orgX As Long, orgY As Long
28:
29: i = 1
30: txHeight = 0
31: orgX = objDoc.CurrentX
32: orgY = objDoc.CurrentY
33: X = orgX + OffsetX
34: objDoc.CurrentX = X
35:
36: ColumnWidth = ColumnWidth - OffsetX
37: Y = orgY + OffsetY
38: objDoc.CurrentY = Y
39:
40: If ColumnWidth <= 0 Then
41: ' 幅が0の場合には,表示しない
42: DrawBox = 0
43: Exit Function
44: End If
45:
46:
47: ' 揃えがデフォルトのとき
48: If Alignment = dbgGeneral Then
49: ' デフォルト
50: ' テキストならば左揃え,数値ならば右揃え
51: If IsNumeric(Text) Then
52: ' 数値なので右揃え
53: Alignment = dbgRight
54: Else
55: ' 文字なので左揃え
56: Alignment = dbgLeft
57: End If
58: End If
59:
60: ' 横幅からはみ出さない部分だけ折り返して表示するループ処理
61: Do
62: ' 横幅からはみ出さない部分だけをputText変数に格納する
63: putText = ""
64: Do While (objDoc.TextWidth(putText) < ColumnWidth) And (i <= Len(Text))
65: If Mid(Text, i, 2) = vbCrLf Then
66: ' CrLfのときにはそれを飛ばして改行する
67: i = i + 2
68: Exit Do
69: End If
70: putText = putText & Mid(Text, i, 1)
71: i = i + 1
72: Loop
73:
74: If (objDoc.TextWidth(putText) > ColumnWidth)AND (Len(putText) > 1) Then
75: putText = Left(putText, Len(putText) - 1)
76: i = i - 1
77: End If
78:
79: ' 揃えごとの処理
80: Select Case Alignment
81: Case dbgRight
82: ' 右揃え
83: objDoc.CurrentX = X + ColumnWidth - objDoc.TextWidth(putText)
84: Case dbgCenter
85: ' 中央揃え
86: objDoc.CurrentX = X + (ColumnWidth - objDoc.TextWidth(putText)) / 2
87: Case Else
88: ' 左揃え
89: objDoc.CurrentX = X
90: End Select
91: ' 文字を描画する
92: myPrint objDoc, putText, drawFlag
93: objDoc.CurrentX = X
94: txHeight = txHeight + objDoc.TextHeight(putText)
95: Loop While i <= Len(Text)
96:
97: objDoc.CurrentX = orgX
98: objDoc.CurrentY = orgY
99:
100: DrawBox = txHeight + OffsetY * 2
101: End Function