Сортировка столбцов в StringGrid 2
Автор: http://www.sources.ru
type
TStringGridExSortType = (srtAlpha, srtInteger, srtDouble);
procedure GridSort(SG: TStringGrid; ByColNumber, FromRow, ToRow: integer;
SortType: TStringGridExSortType = srtAlpha);
var
Temp: TStringList;
function SortStr(Line: string): string;
var
RetVar: string;
begin
case SortType of
srtAlpha: Retvar := Line;
srtInteger: Retvar := FormatFloat('000000000', StrToIntDef(trim(Line),
0));
srtDouble:
try
Retvar := FormatFloat('000000000.000000', StrToFloat(trim(Line)));
except
RetVar := '0.00';
end;
end;
Result := RetVar;
end;
// Рекурсивный QuickSort
procedure QuickSort(Lo, Hi: integer; CC: TStrings);
procedure Sort(l, r: integer);
var
i, j: integer;
x: string;
begin
i := l;
j := r;
x := SortStr(CC[(l + r) div 2]);
repeat
while SortStr(CC[i]) < x do
inc(i);
while x < SortStr(CC[j]) do
dec(j);
if i <= j then
begin
Temp.Assign(SG.Rows[j]); // Меняем местами 2 строки
SG.Rows[j].Assign(SG.Rows[i]);
SG.Rows[i].Assign(Temp);
inc(i);
dec(j);
end;
until i > j;
if l < j then
sort(l, j);
if i < r then
sort(i, r);
end;
begin {quicksort}
;
Sort(Lo, Hi);
end;
begin
Temp := TStringList.Create;
QuickSort(FromRow, ToRow, SG.Cols[ByColNumber]);
Temp.Free;
end;
|