 |
リストボックスで、ある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から型キャストして数値に変換します。 リストにすることで、いきなり最後の項目にアクセスしたりそのひとつ前の項目を表示したりということが簡単にできるようになると思います。 |
|
   |