VB6.0でサムネイル表示を行いたい

解決


ちび  2007-03-01 02:11:40  No: 135564

VB6.0でサムネイル表示を実現したいです。
ListViewを使用することはわかったのですが、
それからどのように実現すればいいのかわかりません。
ご教授お願いいたします。


へろ  2007-03-01 17:28:58  No: 135565

ListViewの使い方からわからないということでしょうか?

こちらのサンプルが参考になるやも。
http://www.philly.ne.jp/~hanya/vb/listview.htm
私も初めてヘルプを読んだ時はさっぱりでしたw

またListViewのアイコン表示で表示される画像は、ImageListの中から選ばれます。
ListViewはImageListとセットで使う事を前提に作られています。
ImageListはフォームに置いても実行時に表示されないコントロールで、
複数の画像を配列のように扱える格納庫として機能します。

ListViewの各アイテムに画像を割り当てる際にはImageList内の番号を使いますので、
ListViewのアイテムを表示する前にあらかじめ画像をImageListに格納しておく必要があります。

これらのコントロールを使う際はオブジェクトの扱い方をイメージ出来ると楽になるかと。

概要が理解できればあとはネット検索で乗り越えられると思います。


ちび  2007-03-03 05:45:50  No: 135566

回答ありがとうございます。
やってみたのですが、

>ListViewの各アイテムに画像を割り当てる際にはImageList内の番号を使いますので

この方法がどうにもわかりません。
申し訳ありませんが、教えてください。
よろしくお願いいたします。


大吉末吉  2007-03-03 06:06:37  No: 135567

> >ListViewの各アイテムに画像を割り当てる際にはImageList内の番号を使いますので
> この方法がどうにもわかりません。

どう、分からないのでしょう?

ひょっとして・・・大前提として、
「サムネイル用の画像は貴方が準備しなくてはならない」
のが分かっていないとか・・・

#ListViewには、「サムネイル用の画像を作ってくれる」機能はありません。
#「準備済みの(サムネイル用の)画像をサムネイルっぽく表示する」だけです。


大吉末吉  2007-03-03 06:23:26  No: 135568

ごめんなさい。

> ひょっとして・・・大前提として、
> 「サムネイル用の画像は貴方が準備しなくてはならない」
> のが分かっていないとか・・・

いくらなんでも、これは、さすがに考えすぎでしたね。

#表現も、変ですね・・・誤解を生みそう。申し訳ありませんが、
#できれば上記の投稿は無視してください。

って事で、改めまして、詳細確認です。

ポイントになりそうなのは、
(1)ImageListとListViewの両方をフォームに配置しましたか?
(2)ImageListとListViewを関連付けましたか?
(3)ImageListの画像サイズは調整しましたか?
(4)ImageListに画像を追加しましたか?
(5)ListViewの表示は何にしてますか?
(6)ListViewにアイテムは追加しましたか?
(7)ListViewのアイテムにアイコンの番号を指定しましたか?

コレぐらいだと思いますが、
どこができていて、どこができていない(分からない)のでしょう?


へろ  2007-03-04 08:04:32  No: 135569

ちびさん、Setステートメントが何であるかは、ご存知ですか?
これは「オブジェクトへの参照」を代入する際に必要な書き方です。
もしかしたらここからかも?と思ったので、その分も一緒に。知ってたらごめんなさい。

ListItemは、ListView内の各アイテムひとつ(詳細表示の一行ぶん)に対応するオブジェクトです。
リンク先では、obItemが「ListItem型のオブジェクト変数」として宣言されています。
これにSetで代入されているのは、「ListView1」のプロパティから得られる「ListItems」コレクションオブジェクトが持っているAddメソッド(関数)の戻り値です。ややこしいですねw

ListItemsコレクションオブジェクトとは、ListItemの集合を示すオブジェクト、
ここではListview1の実際のアイテムの集合である「行の全体」を意味します。
行全体にAdd(追加)、ということは1行増やすという意味ですよね。
その新たに増えた一行分、これをあらわすListItemオブジェクトが戻り値として帰ってきます。
戻り値がオブジェクトの場合はobItem=ではエラーになります。
オブジェクトの「参照」とは値ではなく、存在を示すものであるからです。(詳しくは簡単にかけません(汗)
オブジェクトの「参照」を代入するにはSet obItem=と書かないといけません。(オブジェクトの参照カウントを加算するためですが、詳しくは(以下略)

もしこの辺がわからないのであればListViewを扱うのはまだ難しいかも。
先に「オブジェクトとは」を調べる事をお勧めします。
でも習うより慣れろとも言いますし、いじくり倒していれば理解できるかもw

さて。

> >ListViewの各アイテムに画像を割り当てる際にはImageList内の番号を使いますので
> この方法がどうにもわかりません。

開発環境のプロパティウインドウに該当するような項目が無いよ、という意味ではないですか?

デザイン画面でListViewを右クリック、メニュー内の「プロパティ」を選んでください。
「プロパティシート」という画面が起動します。
これの「イメージリスト」タブを選択すると各アイコンに使うImageListを選択する画面が出ます。
デフォルトは「なし」の設定になっています。
なお、まだ画面上へImageListが配置されていない場合は選択できる項目が出て来ないので注意してください。

いわゆるサムネイル表示の画像は、ListViewでは標準アイコンと呼びます。詳細表示時に使われる小さな画像はSmallIconです。
また各列見出しも同じように小さな画像を持つことが出来ます。
これらにImageListを選んで設定してください。すべてに同じImageListを使う事も出来ます。

この設定を行った時点で、コードでiconプロパティに0以外を代入できるようになります。
ImageListの設定をしていないと代入時にエラーが発生するはずです。

この画面のように、通常のプロパティウインドウ以外にもうひとつ
プロパティシートというものを持っているコントロールが存在します。
このListViewもそれに当たります。他にTreeViewやImageListもこれを持っています。
この画面は通常のプロパティウインドウでは表現出来ない項目、
あるいはユーザーに便宜を図るために用意されているものです。
例えば上記のとおりでユーザーが配置したImagelistのオブジェクト名が直接選択項目に出現します。
なお、このプロパティシートと通常のプロパティウインドウで同じ項目がある場合はどちらから指定しても両方に反映されます。

なお、実行時にコード上からImageListを指定する事も出来ます。
    Set ListView1.icons = ImageList1
ですがこれは動的に変更するためにあるようなもので、通常はデザイン時に一度行うだけで事足りると思います。

おまけ:
Addメソッドは省略可能な引数を持っています。
この引数を使えば一気に設定を入力する事が出来たりします。
    Call ListView1.ListItems.Add , , "1行目のデータなり", 1, 1
これは.Textと.Iconと.SmallIconを同時に指定しています。
だだ、ここでSubItemsは指定できません。だからリンク先のサンプルでは戻り値を受ける必要があったのですね。

'PS:さすが大吉末吉さん、私も短く的確に書けるようになりたいっす。


ちび  2007-03-06 05:11:43  No: 135570

皆様ありがとうございます。

>だだ、ここでSubItemsは指定できません。だからリンク先のサンプルでは戻り値を受ける必要があったのですね。

1列目に画像を表示することはできました。
でも2列目以降に画像を表示するには
どのようにすればよいのでしょうか?


大吉末吉  2007-03-06 05:39:24  No: 135571

> 1列目に画像を表示することはできました。

「1列目」??

どういう「サムネイル」表示をイメージしているのか不明ですが・・・

ListViewの表示(Viewプロパティ)の設定は何にしていますか?
「3(lvwReport)」にしているなら、
「0(lvwIcon)」、「1(lvwSmallIcon)」、「2(lvwList)」のどれかに変えてみるとか・・・


ちび  2007-03-06 19:24:09  No: 135572

Viewプロパティの設定は0にしています。

現状

icon
icon
icon
icon

という感じで表示はできるようになったのですが、

icon icon icon icon 
icon icon icon icon 

といった感じで表示したいのです。
どのようにすればよろしいのでしょうか?
教えてください。


大吉末吉  2007-03-06 19:48:42  No: 135573

> icon icon icon icon 
> icon icon icon icon 
> といった感じで表示したいのです。

そういうことですか。

それなら、「Arrange プロパティ 」を「2(lvwAutoTop)」にするとか・・・

#又は、各アイコンの表示位置(ListItemのLeft/Topプロパティ)を
#1つづつ指定するか・・・


ちび  2007-03-09 04:45:06  No: 135574

大吉末吉さんの方法でできました!
#Arrange:2

ありがとうございました。


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




  


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