Delphi2010 リストビュー(ListView)
2010/10/18
前回は[Win32]内の「TreeView」(ツリービュー)について見ましたので、今回は同じく[Win32]内の「ListView」(リストビュー)について見てみます。
リストビューは Delphi6 にもあります。
ツリービューがフォルダ一覧を示すものだとすればリストビューはファイル一覧を示すもの、のような感じです。
ツリービューを配置してみます。1つ目ですので
Name
プロパティは「TreeView1」となります。
リストビューは項目一覧を表示するコンポーネントで、Windowsのエクスプローラのファイル一覧のように、ファイル名+ファイルサイズ+ファイルの種類+日付時刻のような一覧表示やアイコン一覧表示のようなことが出来ます。リストボックスは通常1列表示ですし、文字列グリッドはアイコン一覧のような事は出来ませんので(それらしき事は可能かもしれませんが)、ファイル一覧のような表示をしたい場合には利用できると思われます。
まずはリストビューの一覧の列の設定をしてみます。
配置したリストビューをダブルクリックするか、右クリックメニュー「カラムの設定」をするか、<オブジェクトインスペクタ>の
Columns
プロパティの右端の[…]をクリックします。すると、カラム(Columns)編集画面が表示されます。
↓
左上のアイコン「新規追加」をしてみます。
<オブジェクトインスペクタ>で
Caption
プロパティを「名前」と入力します。
同様に、「種類」「内容」という列も作ってみます。
この編集画面を閉じてもリストビューの変化は見えませんが、<オブジェクトインスペクタ>でリストビューの
ViewStyle
プロパティを「vsReport」にします。すると上記で入力した列名が表示されます(但し、
ShowColumnHeaders
プロパティを「False」(デフォルトは「True」)にすると列名は表示されなくなります)。
ViewStyle
プロパティは以下のようになっています。
vsIcon
大きいアイコン表示
(デフォルト)
LargeImagesプロパティで指定したイメージリスト内のアイコンで表示します。
vsSmallIcon
小さいアイコン表示
SmallImagesプロパティで指定したイメージリスト内のアイコンで表示します。
vsList
一覧表示
小さいアイコンと項目のラベルの一覧を固定の列形式で表示します
vsReport
詳細表示
項目を1行ずつ並べます
取り合えず、テキトウに大きなアイコン(32×32dot)を3つ、それに相当する小さいアイコン(16×16dot)を3つアイコンエディタで作って、それぞれイメージリスト ImageList1、ImageList2 を配置し、登録します。
リストビュー ListView1の
LargeImages
プロパティに ImageList1を、
SmallImages
プロパティに ImageList2 を指定します。
それでは項目を追加してみます。
リストビューを右クリックメニュー「項目の設定」をするか、<オブジェクトインスペクタ>の
Items
プロパティの右端の[…]をクリックします。すると、リストビュー項目の設定画面が表示されます。
↓
[新規作成]ボタンをクリックします。
列「名前」に相当する項目名を入力します。カラムの第1列であり、項目名にもなります。キャプション欄に例として「あいうえお」と入力します。イメージインデックス欄には、アイコン表示の際のイメージリストの番号を入力します。ここでは「0」としておきます。
[サブ項目の作成]ボタンをクリックします。
2段階層になっていて多少違和感があるかもしれませんが、カラムの第2列の内容をキャプション欄に入力します。ここでは「A」と入力しています。「種類」が「A」である、というような意味合いです。
もう一度[サブ項目の作成]ボタンをクリックし、カラムの第3列の内容をキャプション欄に入力します。ここでは「これはテストです」と入力しています。「内容」が「これはテストです」である、というような意味合いです。
同様に、[新規作成]ボタンをクリックして、第2行を作成します。上記は種類「A」でしたがこちらは種類「B」とします。イメージ番号は「1」とします。
同様に、第3行を作成します。種類「C」とし、イメージ番号は「2」とします。
[OK]ボタンをクリックし、<フォームデザイナ>に戻ります。すると、上記で作成した項目一覧が表示されているのが分かります。
ViewStyle
プロパティを「vsIcon」にしてみます。
ViewStyle
プロパティを「vsSmallIcon」にしてみます。
ViewStyle
プロパティを「vsList」にしてみます。
なお、実行時にカラムを追加したい場合には
var
c : TListColumn ;
begin
c := ListView1.Columns.Add ;
c.Caption := '詳細内容' ;
のように行う事が出来ます。また、実行時に項目を追加したい場合には
var
i : TListItem ;
begin
i := ListView1.Items.Add ;
i.Caption := 'たちつてと' ;
i.ImageIndex := 0 ;
i.SubItems.Add('A');
i.SubItems.Add('「たちつてと」です');
のように行う事が出来ます。
それでは<オブジェクトインスペクタ>を見ていきます。
Align
プロパティはこれまで同様、いつもの定番・お約束です。画面の4辺/全てにくっつける、或いは、何もしない(alNone)を指定します。
Checkboxes
プロパティは、Trueにすると(デフォルトは「False」)項目にチェックをつける事が出来るようになります。プログラム実行時、各Items内の
Checked
プロパティでチェックを付けたか付けていないかが分かります。ヘルプには
「ViewStyle が vsList または vsReport の場合にチェックボックスをリスト項目の横に表示できます」
と記載されていますが、アイコン表示の際もチェックは付きます。
ColumnClick
プロパティは、Trueにすると(デフォルトは「True」)、詳細表示の際の列名をクリックした場合に
OnColumnClick
イベントが発生します。Falseにした場合には発生しません。例えば、列名をクリックした際に、その列での並べ替えをしたいような場合には、True にする必要があります。逆に、列名をクリックしても何もさせたくない場合には False にしても良いでしょう。
FlatScrollBars
プロパティは、Trueにすると 表示されるスクロールバーをフラット状態に、Falseにすると(デフォルト)3D状態に、する事が出来るらしいとの事ですが、Windows7(Aero)では、違いはありませんでした(フラット状態には出来ませんでした)。
FullDrag
プロパティは、デフォルトは False となっておりこの場合は、列名をドラッグしようとしても何も出来ませんが、True にすると、列名をドラッグすることが出来るようになります。おそらく、列を入れ替えるような場合に利用されるのだろうと思われます。列名をドラッグすると、
OnColumnDragged
イベントが発生します。
GridLines
プロパティは、Trueにすると(デフォルトは False)詳細表示の際に各行・各列を区分する線が表示されるようになります。
Groups
プロパティは、各項目をグループ化する際に利用します。利用するグループを追加しておき、各項目の
GroupID
プロパティをグループ番号に指定します。そして
GroupViwew
プロパティを True にすると、それが表示されます。
GroupHeaderImages
プロパティにイメージリストを指定してグループ化のアイコンをつける事が出来ます。
GroupID
プロパティにグループ番号を指定していない(-1指定の)項目は、表示されなくなりますので注意が必要かもしれません。ただ、画面がごちゃごちゃする感じがしますので個人的にグループ化は余りしないかも、という感じはします。
HotTrack
プロパティは、ツリービューの項目の上をマウスが通過したときに項目を強調表示するかどうかを指定します、とありますが、Windows7(Aero)だからなのか、仕様なのか、不具合なのかは分かりませんが、False の状態でも、マウスを通過させると強調表示はされていますし、True にすると、マウスを通過させただけで、その項目を選択したことになり、
OnSelectItem
イベントが発生します。
OnSelectItem
イベントは通常、項目(アイコン)を選択した時に発生するイベントです。プロパティの名前と動きが一致していないような感じがしますので要注意かもしれません。なお、
HotTrackStyles
プロパティにて、マウスカーソルを手の形にしたり、項目に下線を表示させたりすることが出来ます。
IconOptions
プロパティはヘルプによると
リストビューに表示されるアイコンの配列方法を決めます。
IconOptions の値になっている TIconOptions オブジェクトのプロパティを設定すると,リストビューに表示されるアイコンの配列方法を指定できます。このオプションがコントロールに効果を持つには,リストビューの ViewStyle は vsIcon または vsSmallIcons でなければなりません。
とありますが、Windows7(Aero)からなのか分かりませんが指定が反映されていないような感じもしますので、デフォルト状態のまま、かも?
MultiSelect
プロパティを「True」にすると(デフォルトは「False」:選択は1項目のみ)、複数の項目を選択する事が出来るようになります。この場合、選択したかどうかは、各項目(
Items
プロパティ)の
Selected
プロパティが「True」か「False」かを調べる事によって、選択されているかされていないかを取得します。
ReadOnly
プロパティは、リストビュー上で項目内容の編集を出来るようにするかどうかを指定します、という風に思ってしまいますが、実際には、この値が False であっても、実行時、リストビューの項目を2回クリックしても、項目内容の編集は出来ません。ですのでこの指定も余り意味が無さそうです。
RowSelect
プロパティは、「False」(デフォルト)の場合、詳細表示での、選択した項目の第1列だけが強調表示されますが、「True」にすると行全体が強調表示されるようになります。
ShowWorkAreas
プロパティは、「True」にすると(デフォルトは「False」)、アイコン表示の際のアイコンを囲む四角形領域(作業領域 WorkArea)の状態を表示させる事が出来るとの事。<オブジェクトインスペクタ>には表示されていませんが、リストビューの実行時プロパティの
WorkAreas
プロパティで作業領域を登録し、各項目の
WorkArea
プロパティでそれを示される状態、というのがあるようです。但しこれはリストビューをかなり使いこなしていないとおそらく利用されないと思います。
StateImages
プロパティは、状態イメージに使用するイメージリストを指定し、上記の項目のアイコンの左側に追加イメージとして表示されます。つまりアイコンを2つ付けることが出来ます。その追加アイコンは各項目の
StateIndex
プロパティで番号を示します。-1値の場合はアイコン無しとなります。
OnSelectItem
イベントは、項目を選択した時、および、選択を解除した時に発生するイベントのようで、第3引数の Selected値が True か False かで判別できるようです。
MultiSelect
プロパティを「True」にしている場合は、その1行毎にイベントが発生します。
こんな感じでしょうか? 他にも様々なプロパティやイベント、各種メソッドもありますが、とりあえずこの辺りにしておきます。
リストビューもツリービューと同様、機能は結構多いですので、リストビューを使いこなすには少し慣れが必要かもしれません。カラムと項目の関係、選択状態など少しややこしいかもしれませんが、最初はシンプルに考えて作りこんでいくのがいいかもしれません。
文字列グリッドは、[Shift]キーでの範囲選択は出来ますが、[Ctrl]キーでの複数選択を行う事はできません。リストビューでの詳細表示での行選択では[Shift]キー、および、[Ctrl]キーでの複数選択も出来ますので、うまく使い分けが出来ると良いのではないかと思います。
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>
Delphi入門編
>
Delphi2010
▲2010/10/17
2010/10/18
▼2010/10/19
シェアウェア
Script!World
データベース
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.