開発環境:Win2000 VB6 SP4
お世話になります。
現在、コンボボックスの高さを調節しようとしてます。
(隣にテキストボックスがあり、高さを同じにする為)
高さを設定するにあたり、SendMessageでCB_SETITEMHEIGHTを指定すればできる
というところまでは調べました。
実際に実行してみると、どうやら指定する高さの値がクライアント領域(?)の高さであるため目的とした高さに合いません。
そこで下記のような関数を作成しました。
'objCombo コンボボックスオブジェクト
'SetHeightPix 変更したい高さ(ピクセル)→テキストボックスのHeightを指定しています
Public Function ComboTextHeight(objCombo As ComboBox, SetHeightPix As Long) As Boolean
Dim lngRet As Long
Dim GetWRect As RECT
Dim GetCRect As RECT
Dim SetH As Long
Call GetWindowRect(objCombo.hWnd, GetWRect) 'ウィンドウ領域取得
Call GetClientRect(objCombo.hWnd, GetCRect) 'クライアント領域取得
SetH = SetHeightPix - ((GetWRect.Bottom - GetWRect.Top) - GetCRect.Bottom) 'ウィンドウ枠の幅を削る
lngRet = SendMessage(objCombo.hWnd, CB_SETITEMHEIGHT, -1&, ByVal SetH)
ComboTextHeight = True
End Function
しかし、(GetWRect.Bottom - GetWRect.Top)とGetCRect.Bottomの値が同じで
結果は変わりませんでした。
コンボボックスにはウィンドウ領域等の概念がないのでしょうか…?
解決策をご存知の方、ご教授願います。
どこの高さを変更したいのかよく解りませんが、テキスト部なら下記で
できますし、リスト部なら表示項目数を変更すればできます。
http://hanatyan.sakura.ne.jp/vbhlp/combhit.htm
ご回答ありがとうございます。
説明不足で申し訳ありません。
「高さ」はテキスト部の高さです。
ご指定頂きましたサイト、拝見いたしました。
こちらの方法を元に関数を作成(最初の書込みで書いたもの)したのですが、
目的とした高さにはなりませんでした…。
「目的とした高さ」はコンボボックスの隣にあるテキストボックスの高さに
合わせることなのですが、
作成した関数の引数:SetHeightPixにテキストボックスのHeightプロパティの
値を入れてもテキストボックスと同じ高さにはなりませんでした。
特定のオブジェクトの高さに合わせてコンボボックスの高さを変更するのは
無理でしょうか…?
元の高さがいくつで、いくつの高さに設定したいとか具体的な数値を
書かないと解りません。
元の高さより低くしたいなら、フォントサイズ等も小さくするなりしないと
低くならないかと思いますし、元のサイズより高くしたいならできるはずですが。
又、指定しているサイズの単位は間違っていませんか?
下記を試してみて下さい。
テキストボックスの高さはピクセル単位に換算した値で指定してください。
通常は 15Twip = 1 ピクセル だから 15 で割り切れる高さを指定の事
Private Sub Form_Load()
Text1.Move 2300, 500, 2000, 450 '高さはピクセル単位で割り切れる値で
Combo1.Move 300, 500, 2000
Dim lngCobHei As Long
Dim lngRet As Long
With Combo1
lngCobHei = CLng((Text1.Height - 90) \ Screen.TwipsPerPixelX)
lngRet = Sendmessage(.hWnd, CB_SETITEMHEIGHT, -1&, ByVal lngCobHei)
End With
Debug.Print Combo1.Height, Text1.Height
End Sub
返答遅くなり申し訳ありません。
ご回答ありがとうございます。
>lngCobHei = CLng((Text1.Height - 90) \ Screen.TwipsPerPixelX)
-90(=6ピクセル?)はコンボボックスの枠部分の高さでしょうか。
この値を算出する為にGetWindowRect等使っていましたが、
やはり固定値でやるのが現実的なようですね。
こちらの値を使って関数作成して上手くいきました。
ありがとうございました。
| ツイート |
|