VB6のListViewコントロールに、ImageListコントロールを使用して16*16アイコンを表示しています。問題は、ImageListのアイコン登録数が約500を超えると、「実行時エラー'7' メモリが不足しています。」が発生します。
最低でも、800個程度のアイコンを保持したいのですが、何か方法ありますか?
宜しくお願いします。
無茶な仕様だと認識して考え直すのが一番だと思いますが。
案1:メモリを増やしてみる
案2:ImageList コントロールを複数にしてみる
案3:ImageList コントロール以外の手法を考えてみる
…当然のことでしょうが。
それにしても
> 最低でも、800個程度のアイコン
はすごぃなぁ。。。
どのような動きをするためのリストビューか知りたい。
いや、本来は必ずしも無理なことではないですよ。
ImageListそのもの(VBのコントロールになっていない素のもの)は、
それぐらい格納してListViewに表示しても特に問題は起きないはず
です。
問題となるのはVB6のImageListコントロールで且つOSが98系のとき、
だったと思います。VB6のImageListはImageListそのもののデータに
加えて、Iconを保持したPictureオブジェクトも格納したから、
ハンドルの数の上限が低い95/98/Meではエラーが発生する、と云う
理由だったと思います。
私の環境(OSがXP)では、試しに1024個格納してみましたが、特に問題
なく動作しました。
理由は深く追求してないのですが
使いまわすインデックス用の変数
Dim i As Integer
・・・・・(略)
ListView1.ListItems.Add Index, Key, Text, i, i
等の整数型は本来3万以上をカウントできるはずなのに
なぜか、ごぼうさんと同じようにエラーがおこった記憶があります。
あてずっぽうな感じですが、もし該当するならLongに変えると
改善するかもしれません。
K.J.K. さん
レスありがとうございます。
> VB6のImageListはImageListそのもののデータに加えて、
> Iconを保持したPictureオブジェクトも格納したから、
> ハンドルの数の上限が低い95/98/Meではエラーが発生する、
> と云う理由だったと思います。
ご推察の通りです。OSはWin Meです。
ImageListコントロール単体でテストしてみました。
アイコンのハンドルのみを登録した場合、10,000個でもエラーは発生しませんでした。納得しました。
Pictureオブジェクトを保持しない方法として、ListViewとImageListの両方をAPIで作成してみようと思います。
> 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
魔界の仮面弁士さん
情報提供ありがとうございます。
参考にさせて戴きます。助かりました。
とりあえず、解決とします。
ツイート | ![]() |