■ ListViewのアイコン表示

[Visual Basic Q & A 掲示板] [過去ログの一覧]


ごぼう 2006/02/06(月) 13:00:27
VB6のListViewコントロールに、ImageListコントロールを使用して16*16アイコンを表示しています。問題は、ImageListのアイコン登録数が約500を超えると、「実行時エラー'7' メモリが不足しています。」が発生します。
最低でも、800個程度のアイコンを保持したいのですが、何か方法ありますか?
宜しくお願いします。

特攻隊長まるるう 2006/02/06(月) 15:54:24
無茶な仕様だと認識して考え直すのが一番だと思いますが。

案1:メモリを増やしてみる
案2:ImageList コントロールを複数にしてみる
案3:ImageList コントロール以外の手法を考えてみる

…当然のことでしょうが。

dark 2006/02/06(月) 17:46:44
それにしても
> 最低でも、800個程度のアイコン
はすごぃなぁ。。。

どのような動きをするためのリストビューか知りたい。

K.J.K. [E-Mail] 2006/02/07(火) 00:57:47
いや、本来は必ずしも無理なことではないですよ。
ImageListそのもの(VBのコントロールになっていない素のもの)は、
それぐらい格納してListViewに表示しても特に問題は起きないはず
です。

問題となるのはVB6のImageListコントロールで且つOSが98系のとき、
だったと思います。VB6のImageListはImageListそのもののデータに
加えて、Iconを保持したPictureオブジェクトも格納したから、
ハンドルの数の上限が低い95/98/Meではエラーが発生する、と云う
理由だったと思います。

私の環境(OSがXP)では、試しに1024個格納してみましたが、特に問題
なく動作しました。

InteR 2006/02/07(火) 10:01:02
理由は深く追求してないのですが
使いまわすインデックス用の変数

Dim i As Integer
・・・・・(略)
ListView1.ListItems.Add Index, Key, Text, i, i

等の整数型は本来3万以上をカウントできるはずなのに
なぜか、ごぼうさんと同じようにエラーがおこった記憶があります。
あてずっぽうな感じですが、もし該当するならLongに変えると
改善するかもしれません。

ごぼう 2006/02/07(火) 18:50:42
K.J.K. さん
レスありがとうございます。

> VB6のImageListはImageListそのもののデータに加えて、
> Iconを保持したPictureオブジェクトも格納したから、
> ハンドルの数の上限が低い95/98/Meではエラーが発生する、
> と云う理由だったと思います。

ご推察の通りです。OSはWin Meです。
ImageListコントロール単体でテストしてみました。
アイコンのハンドルのみを登録した場合、10,000個でもエラーは発生しませんでした。納得しました。

Pictureオブジェクトを保持しない方法として、ListViewとImageListの両方をAPIで作成してみようと思います。

魔界の仮面弁士 2006/02/07(火) 19:11:29
> ListViewとImageListの両方をAPIで作成してみようと思います。


以下、参考までに。

http://www.mtecb.co.jp/versionup/cgi/yellowpg.cgi?path=home_vb_classlibrary_comctl
http://www.mitene.or.jp/~sugisita/vb6_cmctl.html

ごぼう 2006/02/07(火) 21:35:39
魔界の仮面弁士さん
情報提供ありがとうございます。
参考にさせて戴きます。助かりました。

ごぼう 2006/02/07(火) 21:38:22
[[解決]]

とりあえず、解決とします。

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library