文字列を右寄せや中央揃えで出力




コントロールに文字列を配置する時、右寄せや中央揃えで出力したいってことありませんか?

下記の方法でも可能ですが...

 ・右寄せ
  右寄せになるように文字列の前にスペースを補って出力する。

 ・中央揃え
  中央揃えになるように文字列の前後にスペースを補って出力する。

 これらの方法ではコントロールの幅がスペース文字の文字幅の倍数と一致するときのみ
 きちんと配置されます。

 また、選択しているフォントによっても誤差が生じます。

こんな余計なこと考えずに上手に配置する方法があります。

この方法だとコントロールの幅、フォント、出力文字数に関係なくきちんと配置することが可能です。

*----*----*----*----*----*----*----*----*----*

フォームに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


このサンプルを使用しての感想や、質問は 掲示板や、 らくがき帳に書きとめて頂けるとうれしいです。


戻る


インデックスに戻る


e[NECir Yahoo yV LINEf[^[z500~`I
z[y[W NWbgJ[h COiq@COsI COze