詳細表示形式のリストビューで、サブアイテムとして表示する文字の一部分を色変えすることはできるでしょうか?
編集 削除Yahooあたりで
オーナードロー リストビュー
で検索すれば資料がみつかるでしょう。
猫でもわかるプログラミング がお勧めですが、 C & SDK です。
情報ありがとうございます。
調べてみたのですが、リストビューのカスタムドローのサンプルは見つけることができました。
サブアイテム毎に文字色を変更するという処理はカスタムドローのサンプルでも行っているようです。
今回やりたいことは、例えばサブアイテムに「あいうえお」という文字を表示し、この中の「いう」のみを色変えするというような処理です。
このような処理を行うには、カスタムドローではなくオーナードローで行う必要があるのでしょうか?
カスタムドロー、オーナードローについてまだ理解できていないのですが、カスタムドローよりオーナードローの方がより複雑な処理が行えるということですよね。
あくまで技術資料からの考察ですから
間違っているかもしれませんが・・・。
Object Browser で調べればわかるように、
SubItemsというのはただの文字列の配列です。
文字情報以外持ちませんから、
SubItemsの要素(あるいはそれ以下)の単位で
フォントや文字色、背景色などを変更することはできません。
ListViewの最小Object単位はListItemですから、
カスタムドローするにしても「行単位で」行うことになります。
では、どうすれば文字単位で色をつけられるか、というと
ListItemのhDCは取得できますから、システムの描画を横取りして、
CreateFontやTextOutなどを駆使してオーナードローすれば
いいことになります。
ただし、コントロールによっては内部で独自の処理を
やっていることもありますので、オーナードローで
本当にできるかどうかはやってみないとわかりません。
(VBで使用可能な一部のコントロールは、
VB内部でオーナードローしてたりしますので、
もしそういうコントロールをサブクラス化して
オーナードローしようとしたらどうなるか・・・
神のみぞ知るです。)
技術的には面白いのですが、実現できても
効果が苦労に見合うか?というと特大の疑問符がつきますので、
RichTextBox,FlexGrid,市販のオーナードローリストビューなどで
代用できるならそのほうが好ましいでしょうし、
「納品先の要望」であるなら、撤回させるのが良いSEというものでしょう。
それでもやってみたいなら、オーナードロー、カスタムドローの
VBサンプルは みーくんパパの仕事部屋
http://www.mitene.or.jp/~sugisita/family/papa/vb/
にありますので、それを参考に奮闘してください。
ありがとうございます。
簡単には実現できそうにないですね。。。
これから代替案を検討する予定です。
時間があれば、オーナードローで実現することになるかもしれません。
とりあえず、今回は解決とさせていただきます。
Sayさんどうもありがとうございました。