Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
C++DelphiRAD Studio

11.3の新機能: TControlListコントロールで複数アイテムが選択可能に!

ctrllist_03-1320478

最近リリースされた RAD Studio 11.3 の VCL ライブラリには小さな新機能があり、VCLライブラリのTControlListコンポーネントで複数選択を有効にするオプションが追加されました。このブログでは、この新しい機能についてDelphiコードを交えて紹介いたします。

TControlListコントロールとは?

TControlListコントロールは、RAD Studio 10.4.2でVCLに新しく導入され、非常に大きなリストを完全に仮想化し、管理できるようになりました。

TControlListコントロールは、実際にはメモリ上の単一のインスタンスで作成される構造を持つパネルを持っていますが、リスト項目ごとに描画されるため、あたかも内部で何千あるいは何百万ものアイテムを保持しているかのように見えます。このコントロールの内部ロジックでは、スクロールバーの情報をチェックし、その範囲で表示されるアイテムとその位置をリアルタイムで処理します。つまり表示に必要なアイテムだけを描画しているため、仮に内部で100万以上のアイテム数が存在していても、不必要なメモリ確保や余計なアイテムの描画は行わないため、余計なオーバーヘッドは発生せず、非常に高速なスクロールが維持できます。

それでは、実際にTControlListコントロールを使用した簡単なサンプルプログラムを作成してみましょう。下図はTControlListコンポーネントをフォーム上に配置し、そしてTControlList上にTLabelコンポーネントを1つ配置した設計時の画面です。

ctrllist_01-7425732

ControlListの各アイテムを一意にコーディングする方法、例えば Label.Captionの値を変更するためのコード例は、以下の通りです。

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

ControlListのアイテムは存在せず、ステータスの概念もないことに注意してください。 アイテムを処理するために使用する特定のControlListのイベントハンドラの外で、Label1.Caption にアクセスしても意味がありません。 ControlListのItemCountプロパティを100アイテムに設定した場合、その結果は下図のような画面になります。

ctrllist_02-8802161

どのアイテムが選択されたかの確認は、例えば、ControlListのOnClickイベントハンドラで以下のようなコードを記述することで確認できます。

Memo1.Lines.Text := 'Single selection: ' + (ControlList1.ItemIndex + 1).ToString;

TControlListの複数選択

11.3の新機能として、TControlListコントロールに新しいMultiSelectプロパティが追加され、複数のアイテムが選択できるようになりました。

この機能によって、アプリケーションのユーザーは、Ctrl キーと Shift キーを押しながらマウス ボタンをクリックして、複数の個々のアイテム(Ctrl)また最後にクリックした位置 (Shift) からすべてのアイテムを選択することができます。同じ組み合わせでアイテムの選択を解除することができるので、Ctrl+クリックの操作は、実際には「選択の切り替え」操作となります。下図は実際にControlList1.MultiSelectプロパティをTrueに設定し、複数アイテムを選択している画面の例です。

ctrllist_03-1320478

ControlListのどのアイテムが選択されているかプログラムで確認するコード例は以下の通りです。例えば、アイテムが複数選択されている場合、ControlListのSelected配列プロパティを反復処理することで確認できます。

 for var I := 0 to ControlList1.ItemCount - 1 do
      if ControlList1.Selected[I] then
        Memo1.Lines.Add((I + 1).ToString);

強力な ControlListのVCLコンポーネントの新機能を使用するために必要なことは、これだけです。

RAD Studio 13.2 Florence Now Available! Kai 1.1.1 Now Available! What's Coming in RAD Studio 13.2 Florence

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.

Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

IN THE ARTICLES