AsuYuHomepage
トップページ サイトの説明 子供の成長記録 JM BAR Delphi リンク集
Home>>プログラミング>>Tips&Tricks>>TListBoxで選択項目のインデックスの配列を得る取得
Delphi Tips
Delphi Win32API
ダウンロード

Delphi Tips & Tricks

TListBoxで選択項目のインデックスの配列を得る取得

 リストボックスで、ある1つの項目が選択されているかはSelected プロパティでわかりますが、選択されている項目を順番に表示したり、1番最後の項目を表示したりするときなどに選択項目のインデックス配列があると便利だと思います。リストボックスへLB_GETSELITEMSを送ることで取得できるのですが、動的配列を使ったパターンと、ポインタのリストであるTListを使ったパターンをつくってみました。
//動的配列を使ったパターン
procedure TForm1.Button1Click(Sender: TObject);
var
 Sel :array of integer;
 i   :integer;
begin
  for i :=0 to ListBox1.Items.Count-1 do begin
    if ListBox1.Selected[i] then begin
      SetLength(Sel,Length(Sel)+1); //配列の要素を1つ増やす
      Sel[Length(Sel)-1] :=i;
   end;
   for i :=0 to Length(Sel) -1 do
     ListBox1.Items.Add(InttoStr(Sel[i]));
    
   Sel :=nil; //解放
end;
//TListを使ったパターン
procedure TForm1.Button1Click(Sender: TObject);
var
 SelList :TList;//ポインタの配列を保持するクラス
 i  :integer;
 str :string;
begin
  SelLIST :=TLIST.Create;
  try
  for i :=0 to ListBox1.Items.Count-1 do begin
    if ListBox1.Selected[i] then
      SelLIST.Add(Pointer(i));
      //選択されているインデックスをPointer()で型キャストして格納
    end;
   for i :=0 to SelList.Count -1 do
    Str :=Str+Inttostr(integer(SelLIST.Items[i]))+',';
    //使うときはinteger()で数値に型キャスト

    showmessage('選択されているインデックスは、'+str+'です');
   finally
    SelLIST.Free;
  end;
end;

 TListはポインタの配列を保持するクラスです。このTListにリストボックスで選択されている(Selected =trueな)項目のインデックスを追加していきます。使うときはPointerから型キャストして数値に変換します。
 リストにすることで、いきなり最後の項目にアクセスしたりそのひとつ前の項目を表示したりということが簡単にできるようになると思います。