[リストへもどる]
一括表示

投稿時間:2002/09/04(Wed) 09:07
投稿者名:まーちゃん
Eメール:
URL :
タイトル:
コンボリスト表示
コンボリストをクリックした時表示されるリストの幅がコンボリストと同じ幅になるのを
調整したいのですがどうすればいいでしょうか?
具体的には、コンボリストよりクリックしたときに表示されるリストの方が長くしたいのですが。

投稿時間:2002/09/04(Wed) 09:20
投稿者名:あき☆彡
Eメール:
URL :
タイトル:
Re: コンボリスト表示
> コンボリストをクリックした時表示されるリストの幅がコンボリストと同じ幅になるのを
> 調整したいのですがどうすればいいでしょうか?
> 具体的には、コンボリストよりクリックしたときに表示されるリストの方が長くしたいのですが。
APIのSendMessageを使います。

Google等で
VB SendMessage CB_SETDROPPEDWIDTH
をキーワードに検索してみてください。

投稿時間:2002/09/04(Wed) 09:49
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: コンボリスト表示
サンプルを作ってはいたのですが、UPしていなかったので。

Option Explicit     'SampleNo=167 WindowsXP VB6.0(SP5) 2002.07.15
'指定のウインドウにメッセージを送る(P750)
Private Declare Function Sendmessage Lib "user32" _
    Alias "SendMessageA" (ByVal hWnd As Long, _
    ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const CB_SETDROPPEDWIDTH = &H160
Private StrHei As Long      'テキストの高さ
Private StrWid As Long      'テキストの幅

Private Sub Form_Load()
    Dim i            As Integer
    Dim j            As Integer
    Dim strLen       As Integer
    Dim n1           As Integer
    Dim myStr        As String
    Dim myData       As String
    Dim lngRet       As Long
    Dim MyString     As String
    myData = "12345ABCDEabcdeあいうえおアイウエオ子牛寅卯竜"
    Combo1.Clear
    For i = 1 To 10
        Randomize
        'ランダムな長さのランダムな文字列を作成
        strLen = CInt(20 * Rnd + 10)  '5 〜30 文字
        myStr = ""
        For j = 1 To strLen
            myStr = myStr & Mid$(myData, CInt(30 * Rnd + 1), 1)
        Next j
        Combo1.AddItem myStr
        '一番長い文字列を取得
        If n1 < LenB(StrConv(myStr, vbFromUnicode)) Then
            n1 = LenB(StrConv(myStr, vbFromUnicode))
            MyString = myStr
        End If
    Next i
    '一番長い文字列の幅を取得
    Call sMyTextSize(Combo1, MyString)
    'その幅をピクセル単位に変換し、スクロールバー分をプラス
    StrWid = (StrWid \ Screen.TwipsPerPixelX) + 30
    'リスト部の幅を文字列の長さに合せて設定
    lngRet = Sendmessage(Combo1.hWnd, CB_SETDROPPEDWIDTH, StrWid, ByVal 0&)
End Sub
Private Sub sMyTextSize(MyControl As Control, MyText As String)
'文字列の幅を取得
    Dim MeFoName As String
    Dim MeFoSize As Integer
    Dim MeFoBold As Boolean
    'フォームのフォント設定値を取得
    With Me
        MeFoName = Me.FontName
        MeFoSize = Me.FontSize
        MeFoBold = Me.FontBold
    End With
    'コントロールのフォント設定値をフォームに設定
    With Me
        .FontName = MyControl.FontName
        .FontSize = MyControl.FontSize
        .FontBold = MyControl.FontBold
        StrHei = .TextHeight(MyText)    '文字高さを取得
        StrWid = .TextWidth(MyText)     '文字列幅を取得
    End With
    'フォームのフォント設定値を元に戻す
    With Me
        Me.FontName = MeFoName
        Me.FontSize = MeFoSize
        Me.FontBold = MeFoBold
    End With
End Sub

投稿時間:2002/09/04(Wed) 09:57
投稿者名:まーちゃん
Eメール:
URL :
タイトル:
(お礼) コンボリスト表示
大変参考になりました。
ありがとうございました。