投稿日 | : 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