ListViewのアイコン表示

解決


ごぼう  2006-02-06 22:00:27  No: 94007

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


特攻隊長まるるう  2006-02-07 00:54:24  No: 94008

無茶な仕様だと認識して考え直すのが一番だと思いますが。

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

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


dark  2006-02-07 02:46:44  No: 94009

それにしても
> 最低でも、800個程度のアイコン
はすごぃなぁ。。。

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


K.J.K.  2006-02-07 09:57:47  No: 94010

いや、本来は必ずしも無理なことではないですよ。
ImageListそのもの(VBのコントロールになっていない素のもの)は、
それぐらい格納してListViewに表示しても特に問題は起きないはず
です。

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

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


InteR  2006-02-07 19:01:02  No: 94011

理由は深く追求してないのですが
使いまわすインデックス用の変数

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

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


ごぼう  2006-02-08 03:50:42  No: 94012

K.J.K. さん
レスありがとうございます。

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

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

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


魔界の仮面弁士  2006-02-08 04:11:29  No: 94013

> 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-08 06:35:39  No: 94014

魔界の仮面弁士さん
情報提供ありがとうございます。
参考にさせて戴きます。助かりました。


ごぼう  2006-02-08 06:38:22  No: 94015

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加