
No.1ベストアンサー
- 回答日時:
これは「オーナードロー」というテクニックになります。
例えばListBoxの描画をVBでは意識する必要がありませんが(マウスで選択するとハイライトしたり、ウインドウを再表示した時に再描画してくれたり等)、これはOSが勝手にやってくれるからなのです。
「オーナードロー」とは、このOSがやってくれる作業を自分で行う、ということになります。
自分で行えば背景色の変更も、前景色の変更も可能になります。
背景にビットマップを描画することも可能です。
>サブクラス化というやつをすればできるのでしょうか?
オーナードローをVB6で実現するには、サブクラス化が必須になります。
オーナードローのコントロールからWM_DRAWITEMというメッセージが送られてくるので、それを処理しなければいけないからです。
ただ、VB6標準のListBoxには「オーナードローを許可する」ListBoxというのがありません。
具体的に言うと
LBS_OWNERDRAWFIXED:(デフォルト)普通のListBox
LBS_OWNERDRAWVARIABLE:オーナードローが有効なListBox
という2つのウインドウスタイルがありますが、VB6標準のListBoxはLBS_OWNERDRAWFIXED固定になっています。
これを変える事は難しいので、CreateWindowEx()API関数を使って「一から(LBS_OWNERDRAWVARIABLEを有効にした)ListBoxを作成する」という作業が必要になります。
そのうえで、サブクラス化を行い、ウインドウプロシージャでWM_DRAWITEMを捕まえて、描画を行います。
しかも、描画にしてもVC++などでウインドウ描画(ブラシなど)の知識があればその辺は何とかなると思いますが、やったことが無いとかなり大変です。
なにせ、OSがやってくれたことを全部(に近い状態で)行わなくてはいけないのですから。
もしサブクラス化の知識もおありでないようでしたら、潔くListBoxを使うのはあきらめたほうがいいかもしれませんね(^^;
一応、参考になりそうなサイトを挙げておきます。
<<ボタンのオーナードロー>>
http://www5.ocn.ne.jp/~minute/article/vb/a2.html
このケースではCommandButtonですが、考え方は一緒です。
<<サブクラス化>>
http://www.galliver.co.jp/writing/susume_vb/tre9 …
ListBoxそのものではありませんが(MS提供のユーザーコントロールを使う)、参考になるサンプルとその情報があります。
いちばん簡単なのは、多少運用は面倒ですがListBoxの代わりにTreeViewなどを使う方法ですね。
時間があればListBoxでチャレンジしても構いませんが、サブクラス化一つとってもそれなりの知識が必要ですので、段階を踏んで知識を積み上げていくことをオススメします。
道標を立ててくださりありがとうございます。
VBのスキルレベルは、まだコントロールをきったりはったりのレベルですが、少しずつ上昇させていきたいと思います。
とりあえず参考リンクから、やっていきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
リストボックスの特定行の背景色
Visual Basic(VBA)
-
EXCEL VBA リストボックスの列を指定してForeColorを変更する方法について
Excel(エクセル)
-
vba ListViewの選択色について教えてください
Excel(エクセル)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
特定行の背景色を変えたいのですが
Visual Basic(VBA)
-
6
ACCESS リストボックスの字の色を変えたい
その他(データベース)
-
7
Excel VBA ListViewサブアイテムの文字色
その他(プログラミング・Web制作)
-
8
ListBoxで改行したい
Visual Basic(VBA)
-
9
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
-
10
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
11
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
エクセルのリストボックスの値によって背景色の変更をしたい
Excel(エクセル)
-
14
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
15
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
16
ユーザーフォームのSetFocusが働かない?
その他(プログラミング・Web制作)
-
17
Listviewのデータを上から順番に取得 VBA
Visual Basic(VBA)
-
18
【VBA】ユーザーフォーム リストボックスのヘッダー設定方法
Visual Basic(VBA)
-
19
リストビューをスクロールさせるには
Visual Basic(VBA)
-
20
条件に応じてコンボボックスの背景色を変えたいです
Excel(エクセル)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TextBoxに文字を書いても表示さ...
-
[VB.net] DataGridViewの列ヘッ...
-
Minecraft 統合版(PC)の描画距...
-
google Colabでmatplotlibの描...
-
GDI+について
-
C# ラバーバンドの描画を快適に...
-
VB6のform Load
-
ClistBoxでオーナードローがよ...
-
フォトショップの3Dトランス...
-
GDI+で高速な描画
-
Form1 Load で実行されない。
-
word
-
InvalidateRectの使い方について
-
GetGlyphOutline() ご利用経験...
-
MFCのタイマーのつかい方を教え...
-
デュアルディスプレイ下におい...
-
WM_SIZEとWM_SIZINGの違い (Win...
-
最前面に無理やりフォームを持...
-
画面全体を再描画させたい
-
Windowのちらつき防止
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
[VB.net] DataGridViewの列ヘッ...
-
word
-
TextBoxに文字を書いても表示さ...
-
panelのスクロール表示について
-
google Colabでmatplotlibの描...
-
MFCでOnPaintのタイミング
-
CStaticコントロールの静的イメ...
-
VBAにGDI+を参照させる方法
-
Form1 Load で実行されない。
-
InvalidateRectの使い方について
-
CScrollViewの使用方法について
-
VC++プログラムをつかったBMP画...
-
ウインドウサイズを変更しても...
-
VB6,リストボックスの特定行の...
-
タブをオーナードローすると、...
-
GDI+について
-
ビットマップを表示させる(MFC)
-
UpdateData( FALSE); による文...
-
OneNote 2010 文字と描画がずれる
おすすめ情報