掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ComboBoxの高さを変えるには (ID:36933)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
やや脱線しますが、コンボボックスでは本来、リストの動作を指定するスタイルとオーナー描画を指定するスタイルは独立しています。 ・リストの動作: CBS_SIMPLE, CBS_DROPDOWN, CBS_DROPDOWNLIST ・オーナー描画: なし、CBS_OWNERDRAWFIXED, CBS_OWNERDRAWVARIABLE 本来なら3×3=9通りの組み合わせがあるはずなのですが、VCLではこれを一つのStyleに押し込めて5通りに制限してしまっています。 なので、リストの動作はcsSimpleまたはcsDropDownと同等で、かつオーナードローを有効にするということができないんですね。 そこで、ウィンドウスタイルを勝手にいじって、csDropDownの動作とオーナー描画を両立できないか試してみました。 カスタムコンポーネントを作ることになってしまいますけれど、まあ参考までに… type TMyComboBox = class(TComboBox) public procedure CreateParams(var Params: TCreateParams); override; end; procedure TMyComboBox.CreateParams(var Params: TCreateParams); begin inherited; // デフォルトではCBS_DROPDOWNが設定されているはずなので // これにオーナー描画スタイルを追加する Params.Style := Params.Style or CBS_OWNERDRAWFIXED; end; procedure TForm1.FormCreate(Sender: TObject); begin ComboBox1 := TMyComboBox.Create(Self); ComboBox1.Parent := Self; ComboBox1.ItemHeight := 適当な高さ; end; 高さを変えるだけなら、特にOnMeasureItemやOnDrawItemを実装しなくてもこれだけで動いてくれるようです。 ちなみに、こちらの方法だと文字列がボックスの上に張り付いたイメージになりますが、 先ほど提案したTComboBoxExだと逆に下に張り付いたようになりますね。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.