コンボボックスの高さを変更するには?

解決


TCT  2007-08-02 11:09:37  No: 99269

開発環境: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の値が同じで
結果は変わりませんでした。
コンボボックスにはウィンドウ領域等の概念がないのでしょうか…?

解決策をご存知の方、ご教授願います。


VBレスキュー(花ちゃん)  2007-08-02 15:40:27  No: 99270

どこの高さを変更したいのかよく解りませんが、テキスト部なら下記で
できますし、リスト部なら表示項目数を変更すればできます。
http://hanatyan.sakura.ne.jp/vbhlp/combhit.htm


TCT  2007-08-02 16:28:51  No: 99271

ご回答ありがとうございます。
説明不足で申し訳ありません。
「高さ」はテキスト部の高さです。

ご指定頂きましたサイト、拝見いたしました。
こちらの方法を元に関数を作成(最初の書込みで書いたもの)したのですが、
目的とした高さにはなりませんでした…。

「目的とした高さ」はコンボボックスの隣にあるテキストボックスの高さに
合わせることなのですが、
作成した関数の引数:SetHeightPixにテキストボックスのHeightプロパティの
値を入れてもテキストボックスと同じ高さにはなりませんでした。

特定のオブジェクトの高さに合わせてコンボボックスの高さを変更するのは
無理でしょうか…?


VBレスキュー(花ちゃん)  2007-08-02 18:34:06  No: 99272

元の高さがいくつで、いくつの高さに設定したいとか具体的な数値を
書かないと解りません。
元の高さより低くしたいなら、フォントサイズ等も小さくするなりしないと
低くならないかと思いますし、元のサイズより高くしたいならできるはずですが。
又、指定しているサイズの単位は間違っていませんか?


VBレスキュー(花ちゃん)  2007-08-02 19:21:13  No: 99273

下記を試してみて下さい。
テキストボックスの高さはピクセル単位に換算した値で指定してください。
通常は 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


TCT  2007-08-07 13:56:49  No: 99274

返答遅くなり申し訳ありません。
ご回答ありがとうございます。

>lngCobHei = CLng((Text1.Height - 90) \ Screen.TwipsPerPixelX)
  -90(=6ピクセル?)はコンボボックスの枠部分の高さでしょうか。
  この値を算出する為にGetWindowRect等使っていましたが、
  やはり固定値でやるのが現実的なようですね。

こちらの値を使って関数作成して上手くいきました。
ありがとうございました。


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加