|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"TListでstringGridをソート シンプル版"
最もシンプルと思われるstringGrid のセルの値によるソートの例
フォームにstringGridを一つと、ボタンを二つ配置してイカのように書いてみて
下さい。
const rowCount=1000;
function sortByRow1(a,b:Pointer):integer;
var
val1,val2:Extended;
code:integer;
begin
val(TStringList(a)[1],val1,code);
val(TStringList(b)[1],val2,code);
if val1>val2 then result:=1
else
if val1=val2 then result:=0
else result:=-1;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
//ランダムデータを書き込む
stringGrid1.rowCount:=rowCount;
for i:=0 to rowCount-1 do
begin
stringGrid1.Cells[0,i]:=inttostr(i);
stringGrid1.cells[1,i]:=floatToStr(random(rowCount)/10);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
List:TList;
SL:TStringList;
begin
List:=TList.create;
//ソート用のSLをcreateしstringGridの中身をコピーする
for i:=0 to rowCount-1 do
begin
SL:=TStringList.create;
SL.assign(stringGrid1.rows[i]);
List.add(sl);
end;
//ソートの実行
List.sort(sortByRow1);
//ソートした結果をStringGridにコピーし返す
for i:=0 to rowCount-1 do
begin
stringGrid1.Rows[i].assign(TStringList(List[i]));
end;
//使ったSLをfreeする。
for i:=0 to rowCount-1 do TStringList(List[i]).free;
List.free;
end;
{
procedure TForm1.Button2Click(Sender: TObject);
において、いちいち各row毎に新しいstringListをcreateしているのは
もし、直接stringGridのRowsを直接Listにaddしてsortすると、sortするところ
まではOKですが、最後にstringGridに戻すところでおかしくなるからです。
}
98/10/06(火) 22:29 凛(MXB01744)
Original document by 凛 氏 ID:(MXB01744)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|