[リストへもどる]
一括表示

投稿時間:2003/10/02(Thu) 13:47
投稿者名:TOM
Eメール:
URL :
タイトル:
VB6のListViewにAPIのImageList連結
VB6のリストビューコントロールにAPIで作成したイメージリストを連結して
アイテムにイメージを表示する方法を教えて下さい。
APIで作成したイメージリストにイメージを登録するまではできています。
宜しくお願いします。

投稿時間:2003/10/02(Thu) 14:49
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: VB6のListViewにAPIのImageList連結
OCXになっているListViewではなく、API関数でListViewを直接生成して
使いましょう。

投稿時間:2003/10/02(Thu) 18:37
投稿者名:TOM
Eメール:
URL :
タイトル:
Re^2: VB6のListViewにAPIのImageList連結
> OCXになっているListViewではなく、API関数でListViewを直接生成して
> 使いましょう。

回答ありがとうございます。
できれば、OCXのListViewを使いたいのですが無理なんでしょうか?

投稿時間:2003/10/02(Thu) 19:55
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re^3: VB6のListViewにAPIのImageList連結
> できれば、OCXのListViewを使いたいのですが無理なんでしょうか?

内部構造がわからないので、著しく困難でしょう。

投稿時間:2003/10/07(Tue) 22:37
投稿者名:TOM
Eメール:
URL :
タイトル:
Re^4: VB6のListViewにAPIのImageList連結
WEB検索で見つけた以下のサンプルで、ほぼ解決できました。
http://www.mvps.org/btmtz/listview/
SystemImagelist: How to associate the system imagelist with the VB ListView.
Download systemimagelist.zip (11kb)

システムイメージリストやAPIで作成したイメージリストをVBのリストビュー
に連結するには、LVM_SETIMAGELISTメッセージを使用する様です。
この場合、VBのListViewが上記イメージリストの連結を解除してしまうので、
サブクラス化により、LVM_SETIMAGELISTメッセージを握り潰す必要がある様です。
次に、アイテムのイメージ設定は、LVM_SETITEMメッセージを使用する様です。

問題点として、VB6 ListView (MSCOMCTL.OCX) を使用した場合、
EXEで実行すると、選択項目のアイコンが消えてしまいます。
VB5 ListView (COMCTL32.OCX) を使用した場合、この現象は発生しません。
VB6 ListView での回避策が見つからないのが少し残念ですが...
この回避策をご存知でしたら教えて下さい。

蛇足ですが、サブクラス化しない方法を検討してみました。
(1) 初期表示のListView.Viewプロパティの設定
  小アイコンの場合、通常通り lvwReport 等を設定。
  大アイコンの場合、次の様に小アイコン, 大アイコンの順に続けて設定。
  ListView1.View = lvwReport
  ListView1.View = lvwIcon
(2) Viewの変更
  初期表示後のView変更に、Viewプロパティが使えないので、ウィンドウスタイル
    (LVS_ICON, LVS_REPORT, LVS_SMALLICON, LVS_LIST)を変更する。
あとは、サブクラス化する場合と同じです。

以上、遅くなりましたが報告まで。

投稿時間:2003/10/08(Wed) 10:14
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: VB6のListViewにAPIのImageList連結
VB6のListView及びImageList(mscomctl.ocx)は、VB5のそれ(comctl32.ocx)と
異なり、comctl32.dllが提供する同名のものとは関連付けられていません。

ですから、内部構造を調べて、ListViewとImageListがどう通信し合うのか
を理解した上で、コードでそれを偽装する必要があるのでは。

また、VB5のを使うにしても、ある程度までは似た経路をとる必要がある
でしょう。本来はImageList側を偽装して行うべきですよね。