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.上記実行結果 |
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 の設定 指定文字数の中で(左・中央・右)揃えに表示する |