お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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