文字列を右寄せや中央揃えで出力
コントロールに文字列を配置する時、右寄せや中央揃えで出力したいってことありませんか? 下記の方法でも可能ですが... ・右寄せ 右寄せになるように文字列の前にスペースを補って出力する。 ・中央揃え 中央揃えになるように文字列の前後にスペースを補って出力する。 これらの方法ではコントロールの幅がスペース文字の文字幅の倍数と一致するときのみ きちんと配置されます。 また、選択しているフォントによっても誤差が生じます。 こんな余計なこと考えずに上手に配置する方法があります。 この方法だとコントロールの幅、フォント、出力文字数に関係なくきちんと配置することが可能です。 *----*----*----*----*----*----*----*----*----* フォームに1つのテキストボックス(オブジェクト:Text1)、3つの コマンドボタン(オブジェクト:Command1、Command2、Command3)、1つの ピクチャーボックス(オブジェクト:Picture1)を配置して下さい。 ピクチャーボックスのサイズは大きめにしておいてください。 下記コードをフォームモジュールに貼り付け実行して下さい。 使用法: テキストボックスに表示したい文字列を入力し それぞれのコマンドボタンをクリックして下さい。 コード: Option Explicit Private Declare Function GetTextAlign Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function SetTextAlign Lib "gdi32" (ByVal hdc As Long, ByVal wFlags As Long) As Long Private Const TA_BASELINE = 24 Private Const TA_BOTTOM = 8 Private Const TA_CENTER = 6 Private Const TA_LEFT = 0 Private Const TA_NOUPDATECP = 0 Private Const TA_RIGHT = 2 Private Const TA_TOP = 0 Private Const TA_UPDATECP = 1 Private Const TA_MASK = (TA_BASELINE + TA_CENTER + TA_UPDATECP) Private Const 文字幅 = "***************" Private m_TAlign As Long Public Sub RestoreDefaultTAlign(ByVal hdc As Long) SetTextAlign hdc, m_TAlign End Sub Public Sub SaveDefaultTAlign(ByVal hdc As Long) m_TAlign = GetTextAlign(hdc) End Sub Public Function GetTextPosition(ByVal hdc As Long, ByVal x As Double, ByVal cx As Double, ByVal sFlag As String) As Double Select Case sFlag Case "左詰め" SetTextAlign hdc, TA_LEFT GetTextPosition = x Case "右詰め" SetTextAlign hdc, TA_RIGHT GetTextPosition = x + cx Case "中央揃え" SetTextAlign hdc, TA_CENTER GetTextPosition = x + cx / 2 End Select End Function Private Sub Command1_Click() Dim p As Double, cx As Double cx = Picture1.TextWidth(文字幅) p = GetTextPosition(Picture1.hdc, 1#, cx, "右詰め") Picture1.CurrentX = p Picture1.CurrentY = 0.25 Picture1.Print Text1.Text End Sub Private Sub Command2_Click() Dim p As Double, cx As Double cx = Picture1.TextWidth(文字幅) p = GetTextPosition(Picture1.hdc, 1#, cx, "左詰め") Picture1.CurrentX = p Picture1.CurrentY = 0.5 Picture1.Print Text1.Text End Sub Private Sub Command3_Click() Dim p As Double, cx As Double cx = Picture1.TextWidth(文字幅) p = GetTextPosition(Picture1.hdc, 1#, cx, "中央揃え") Picture1.CurrentX = p Picture1.CurrentY = 0.75 Picture1.Print Text1.Text End Sub Private Sub Form_Load() Picture1.ScaleMode = vbInches Picture1.FontName = "MS P明朝" SaveDefaultTAlign Picture1.hdc End Sub Private Sub Form_Unload(Cancel As Integer) RestoreDefaultTAlign Picture1.hdc End Sub Private Sub Picture1_Paint() Picture1.DrawStyle = vbDot Picture1.Line (1#, 0.25)-(1# + Picture1.TextWidth(文字幅), 1.25), , B End Sub この例ではターゲットとなるコントロールをピクチャーボックスとしましたが プリンターオブジェクトをターゲットとすることも可能です。 |
動作確認
Windows98 Second Edition + Visual Basic 6このサンプルを使用しての感想や、質問は 掲示板や、 らくがき帳に書きとめて頂けるとうれしいです。