VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 文字列操作関係のメニュー
1.アラビア数字を漢数字に変換
2.VB6.0 からの文字列関数の使用例
3.半角カタカナだけを全角カタカナに変換
4.検索・置換をする
5. NullChar(Chr(0))文字以降を消去する
6.文字列を指定の幅にカット(漢字分断回避)
7.半角・全角文字の判定をする
8.文字列を(左・中央・右)揃え表示する
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.その他、当サイト内に掲載の文字列操作に関するサンプル


8.文字列を(左・中央・右)揃え表示する
1.文字列(半角・全角混在)を(左・中央・右)揃えで表示する
2.Win32 API を使ってコマンドボタンのアライメントを設定
3.
4. 
5. 
6. 

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:
使用 API:
GetWindowLong / SetWindowLong
その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。
    :
このページのトップへ移動します。 1.文字列(半角・全角混在)を(左・中央・右)揃えで表示する

Option Explicit   'SampleNo=108  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
  '-1 分は、クリックした時のフォーカス枠分
  intSpcN = (LenN - fLenA(strWkstr)) - 1 '表示範囲-文字列の長さ
  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.Width - 115(余白))/120(1文字のサイズ)
  'MS ゴシック 12 ポイント = 120 twip
  Debug.Print (Command2.Width - 115) / 120  '3715-115/120 = 30
  Command2.Caption = fStrAlignment(strMyString, 30)   '左
  Command3.Caption = fStrAlignment(strMyString, 30, 1) '右
  Command4.Caption = fStrAlignment(strMyString, 30, 2) '中央
End Sub

  図1.上記実行結果
 Aliment.gif

このページのトップへ移動します。 2.Win32 API を使ってコマンドボタンのアライメントを設定

Option Explicit   'SampleNo=118  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

このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
Command2.Caption 等に左揃え・右揃えで文字を表示  Alignment のない箇所で Alignment の設定  指定文字数の中で(左・中央・右)揃えに表示する




このページのトップへ移動します。