文字列を(左・中央・右)揃え表示する
                                                        玄関へお回り下さい。
文字列(半角・全角混在)を(左・中央・右)揃えで表示する (108)
   まず、前準備としてANSI(旧Basic)流文字列長を得るを参考に関数 fLenA を作成下さい。
フォームにコマンドボタンを貼り付けておいて下さい
ボタンの横幅は30文字分で設定

Option Explicit   'SampleNo=108 WindowsXP VB6.0(SP5) 2002.05.21

Private Function fLenA(ByVal ss As String) As Integer
  fLenA = LenB(StrConv(ss, vbFromUnicode))
End Function


Private Function fStrAlignment(ByRef Mystr As String, _
    ByVal LenN As Integer, Optional ByVal Mode As Integer = 0) As String
'*=================================================================
'* Mystr 対象文字列
'* LenN 表示範囲(半角文字換算)
'* Mode 1=右揃え  2=中央揃え その他=左揃え
'*=================================================================
  Dim strWkstr As String
  Dim intSpcN As Integer
  strWkstr = Trim$(Mystr)   '文字列の前後の空白を削除
  '文字列が0又は表示範囲より長い文字列は終了
  If LenN < 1 Or LenN <= fLenA(strWkstr) Then
    fStrAlignment = strWkstr
    Exit Function
  End If
  intSpcN = LenN - fLenA(strWkstr)  '表示範囲−文字列の長さ
  If Mode = 1 Then   '右揃え
    Mystr = String$(intSpcN, " ") & strWkstr
  ElseIf Mode = 2 Then '中央揃え
    Mystr = String$(intSpcN \ 2, " ") & strWkstr & _
    String$(intSpcN - (intSpcN \ 2), " ")
  Else         '左揃え
    Mystr = strWkstr & String$(intSpcN, " ")  '文字列の右に空白
  End If
  fStrAlignment = Mystr
End Function


Private Sub Command1_Click()
'Alignment の設定
  Dim strMyString As String
  strMyString = "VisualBasic花ちゃん"
  Command2.Caption = fStrAlignment(strMyString, 30)   '左
  Command3.Caption = fStrAlignment(strMyString, 30, 1) '右
  Command4.Caption = fStrAlignment(strMyString, 30, 2) '中央
End Sub


       結 果
      

※ サンプルでは表示範囲より長い文字列は処理を終了していますが実際使われる場合は必要により文字数カットの処理を追加して下さい。

上記同様でAPIを使った方法でコマンドボタンアライメントを設定しています。  (118)
       Option Explicit   'SampleNo=118 WindowsXP VB6.0(SP5) 2002.05.22
'ウィンドウに関するデータを取得する(P59)
Private Declare Function GetWindowLong Lib "user32" _
  Alias "GetWindowLongA" (ByVal hwnd As Long, _
  ByVal nIndex As Long) As Long
'ウィンドウに関する属性を変更する(P60)
Private Declare Function SetWindowLong Lib "user32" _
  Alias "SetWindowLongA" (ByVal hwnd As Long, _
  ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)  'ウィンドウスタイル
Private Const BS_LEFT = &H100&   '左揃え
Private Const BS_RIGHT = &H200&  '右揃え
Private Const BS_CENTER = &H300&  '中央揃え


'*************************************************
'* MyCmdButton = CommandButton名
'* Alignment=0  左揃え
'* Alignment=1  右揃え
'* Alignment=2  中央揃え
'*************************************************
Private Sub sCmdAlignment(MyCmdButton As CommandButton, Alignment As Integer)
  Dim lngResult As Long
  With MyCmdButton
    lngResult = GetWindowLong(.hwnd, GWL_STYLE)
    Select Case Alignment
      Case 0   '左揃え
        lngResult = lngResult Or BS_LEFT
      Case 1   '右揃え
        lngResult = lngResult Or BS_RIGHT
      Case Else '中央揃え
        lngResult = lngResult Or BS_CENTER
    End Select
    lngResult = SetWindowLong(.hwnd, GWL_STYLE, lngResult)
    .Refresh
  End With
End Sub


Private Sub Command1_Click()
'左揃え
  Call sCmdAlignment(Command1, 0)
End Sub


Private Sub Command2_Click()
'右揃え
  Call sCmdAlignment(Command2, 1)
End Sub


Private Sub Command3_Click()
'中央揃え
  Call sCmdAlignment(Command3, 2)
End Sub


Private Sub Form_Load()
  Call sCmdAlignment(Command3, 0)
End Sub




2002/05/21