2014/3/1 (土) 16:12:20 taki |
▼ Mr.XRAYさん
▼ たてぐやさん
こんな感じでプログラムできそうです。
http://mrxray.on.coocan.jp/Halbow/Notes/N023.html
[整数値を記憶させる]も参考にしました。
procedure TForm1.Button7Click(Sender: TObject);
var
i,ix:integer;
s:string;
ItemCode,ItemName:string;
begin
Randomize;
listBox1.Clear; // StringGrid役のデータとみなして下さい
listBox2.Clear; // クエリー役 本来はStringList
listBox2.Sorted := true; // 常にソートされる設定
listBox3.Clear; // 結果の確認表示用
// データが100回追加される処理をしたことに
for i := 1 to 100 do begin
// 商品コード番号をランダムに発生
ItemCode := FormatCurr('000000',Random(1000000));
// 確認できるように名前の一部に組み込む
ItemName := 'Item' + FormatCurr('000',i) + '-A';
// listBox1の最後にデータが追加され、そのIndexがixに入る
ix := listBox1.Items.Add(ItemCode + ' ' + ItemName + ' @500円');
// クエリー役のlistBox2にKeyのコード番号とIndexのixを追加する
// 追加と同時にソートされる
listBox2.Items.AddObject(ItemCode,TObject(ix));
end;
// コード番号順にソートされたデータを取り出す
for i := 0 to ListBox2.Items.Count - 1 do begin
ix := integer(ListBox2.Items.Objects[i]); // Indexを取り出す
s := ListBox1.Items.Strings[ix]; // StringGrid役からデータを取り出す
// ここで商品コード毎の集計処理などをする
listBox3.Items.Append(s); // 確認のためにListBox3に書き出す
end;
end;
実行結果です。
ListBox1は商品コードはランダムです。ListBox2が昇順にソートされています。
ListBox3はListBox2と同じ並びになっているのがわかります。
ハイライトは同じデータです。
|
|