VCL TControlListコントロールの使用

提供: Support
移動先: 案内検索

新しいTControlListコントロール

10.4.2では、新しい柔軟で仮想化されたリストコントロールが導入されています。このコントロールの背景にあるアイデアは、非常に長いリストを処理するため高パフォーマンスなコントロールとして設計されており、カスタム UI 設定オプションを備えた最新のルックアンドフィールを提供します。このリストは単一の選択リストを表し、すべての項目は視覚的に同じ高さと幅を持っています。

Thumb03000257ujpn.png

この新しいコントロールは、開発者がグラフィカルコントロール(つまりTGraphicControlの子孫)を使ってリストの要素の1つをデザインすることでコンテンツを定義し、個々の要素を表示するためのデータをコントロールに提供することを可能にします。完全に仮想化されているため、リストは数千から数百万もの項目を処理でき、非常に高速なスクロールを提供します。外面に合う項目のみを計算および表示するだけでなく、リストはインメモリ ビットマップを使用して、項目のコンテンツをキャッシュします。


新しいコントロールは、従来のTDBCtrlGridコントロールに似ています。コントロール用のパネルがあり、そこにコントロールを配置し、実行時に仮想的なアイテムを作成します。TDBCtrlGridとは異なり、TGraphicControlから派生したコントロールのみを配置でき、すべてのアイテムは仮想的に作成されます。下の図は、設計時(1つのアイテムの表面が編集可能な状態)および実行時(同じコンテンツを何度も複製した状態)のコントロールを表示した例です。

サムネイルの作成エラー: サムネイルを保存先に保存できません

このリストには、特定の情報を持つアイテムのコレクションは含まれていません。データは、ライブバインディング(データセットやオブジェクトのコレクションへのLiveBindings を含む)を介して提供するか、個々の項目のデータを問い合わせるイベントを介して提供することができます(直接の保存やマッピングは開発者に任されています)。

コントロールは、各アイテムのプロパティを設定したり、ホストされたコントロールの可視性を有効にしたり、変更したりするためのさまざまなイベントを提供します。特別なプロパティを使用して、さまざまなアイテムの状態の選択を調整でき、追加のプロパティを使用すると、アイテムが選択されたときにラベルの色を自動的に調整できます。

procedure TForm2.ControlList1BeforeDrawItem(AIndex: Integer;    
  ACanvas: TCanvas; ARect: TRect; AState: TOwnerDrawState); 
begin   
  Label1.Caption := 'Label' + AIndex.ToString; 
end;

設計時には、TControlListプロパティの調整や特定のプロパティを持つコントロールコレクションなど、プリセット構成のコレクションを含む特別なダイアログがあります。 上部の矢印を使用してコア構成を選択し、下下部の他のチェックボックスオプションを使って微調整することができます。ウィザードはコントロールリストの設定を上書きします。

Thumb03000256ujpn.png

設計したアイテムは、ItemCountプロパティで要求されたアイテムごとに(仮想的に)複製されます。通常、同じ幅と高さのアイテムを複数配置できます。 コントロールには3つの異なるレイアウトがあります。

  • Single: アイテムの単一の列を指定でき、アイテムの幅はコントロールの幅と一致します。
  • MultiTopToBottom: 複数のカラムを使用することができ、次のカラムに移動する前に利用可能な垂直方向のスペースを使用し、垂直方向のスクロールを提供します。
  • MultiLeftToRight: 複数のカラムを使用することができますが、異なるレイアウトと水平スクロールモードを使用します。(下図を参照)

上図の設計時の画面で複数の列のリストを構成した場合、項目の幅を0以外の値に設定すると、下図のような出力結果が得られます。 Thumb03000231ujpn.png


すべてのアイテムは仮想化されています。 コントロールは優れたパフォーマンスを発揮し、100万以上のアイテムを問題なく持つことができます。 このコントロールの内部ロジックでは、スクロールバーの情報をチェックし、その範囲で表示されるアイテムとその位置をリアルタイムで処理します。つまり表示に必要なアイテムだけを描画しているため、仮に内部で100万以上のアイテム数が存在していても、不必要なメモリ 確保や余計なアイテムの描画は行わないため、余計なオーバーヘッドは発生せず、非常に高速なスクロールが維持できます。


なお、一般的にコントロールリスト上の任意のコントロールにOnClickイベントを使用することができます。この新しいコントロールは、High DPI オプションとVCL スタイルをサポートし、完全にLiveBindingsに対応しています。


新しいTControlListButtonコンポーネント

コントロールは、ボタンの状態変更などの特別な操作を処理しないため、TSpeedButtonをパネル上で直接使用することは適切ではありません。さまざまな状態に対応するために特別なTControlListControlクラス(TGraphicControlから継承)を追加しました。そしてTControlListControlクラスを継承し、アイテムにマウスイベントを使用できる新しいコンポーネント「TControlListButton」を提供しています。 TControlListButtonコンポーネントは、TControlListと共に使用されるよう設計されており、 プッシュ ボタン、ツール ボタン、リンク の3つのスタイル-で構成されており、TSpeedButtonに似ています。

TControlListコンポーネントプロパティの一覧

プロパティ名 説明

ItemCount: Integer

アイテムの数の定義

ItemColor: Tcolor

アイテムの背景色の定義

ItemIndex: Integer

アクティブなアイテムのインデックス

ItemWidth: Integer

アイテムの幅を定義します(0 に設定すると、コントロールの幅全体を使用)。

ItemHeight: Integer

アイテムの高さの定義

ItemMargins: TMargins

アイテム間のマージンの定義

ColumnLayout: TControlListColumnLayout

入力された文字のカスタム検証

ItemSelectionOptions: TControlListItemSelectionOptions

以下の値を使用して、項目の状態の選択色とテキスト色を定義

- cltSingle

- cltMultiTopToBottom

- cltMultiLeftToRight

HotItemIndex: Integer

ホットアイテムのインデックス

MarkDisabledItem: Boolean

無効なアイテムの無効なコンテンツを自動的に描画する場合、MarkDisabledItemをTrueに設定

TControlListコンポーネントイベントの一覧

イベント名 説明

OnBeforeDrawItem

アイテムコンテンツを描画する前に、コントロールのプロパティと背景描画を定義するイベント

OnAfterDrawItem

アイテムコンテンツの描画した後に、コントロールのプロパティと背景描画を定義するイベント

OnBeforeDrawItems

すべてのアイテムを描画する前に、一般的な背景の描画を定義するイベント

OnAfterDrawItems

すべてのアイテム(すべてのアイテムにまたがる)を描画した後、一般的なリストの描画を定義するイベント

OnItemClick

アイテムのクリックイベント

OnItemDblClick

アイテムのダブルクリックイベント

OnEnableItem

アイテムの有効/無効を定義するイベント

OnEnableControl

特定のアイテムで有効/無効なコントロールを定義するイベント

OnShowControl

特定のアイテムのコントロールを表示/非表示にするイベント

関連情報