
05.05.2013, 17:25
|
 |
Прохожий
|
|
Регистрация: 23.06.2012
Адрес: Украина, Днепропетровск
Сообщения: 19
Версия Delphi: XE3
Репутация: 10
|
|
В секции implementation добавляешь такое: (SgSort взят и частично изменен с cyberforum.ru)
Код:
implementation
// Процедура сортировки StringGrid
procedure SgSort(aSg : TStringGrid; const aCol : Integer; aCompare : TStringListSortCompare = nil);
var
SlSort, SlRow : TStringList;
i, j : Integer;
begin
SlSort := TStringList.Create;
for i := aSg.FixedRows to aSg.RowCount - 1 do begin
SlRow := TStringList.Create;
SlRow.Assign(aSg.Rows[i]);
SlSort.AddObject(aSg.Cells[aCol, i], SlRow);
end;
if Assigned(aCompare) then SlSort.CustomSort(aCompare)
else SlSort.Sort;
j := 0;
for i := aSg.FixedRows to aSg.RowCount - 1 do begin
SlRow := Pointer(SlSort.Objects[j]);
aSg.Rows[i].Assign(SlRow);
SlRow.Free;
Inc(j);
end;
FreeAndNil(SlSort);
end;
// Сортировка по возрастанию
function CompNumAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer;
var
N1, N2 : Extended;
begin
N1 := StrToFloatDef(aSl[aIndex1], 0);
N2 := StrToFloatDef(aSl[aIndex2], 0);
if N1 < N2 then Result := -1
else if N1 > N2 then Result := 1
else Result := 0;
end;
// По убыванию
function CompNumDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer;
var
N1, N2 : Extended;
begin
N1 := StrToFloatDef(aSl[aIndex1], 0);
N2 := StrToFloatDef(aSl[aIndex2], 0);
if N1 > N2 then Result := -1
else if N1 < N2 then Result := 1
else Result := 0;
end;
В обработчике:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile;
mass : array [0..2] of array [0..2] of integer;
i,j : integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
Reset(F);
while not EOF(F) do
begin
for i := 0 to 2 do
for j := 0 to 2 do
Read(F, mass[i][j]);
end;
end;
for i := 0 to 2 do
for j := 0 to 2 do
begin
StringGrid1.Cells[i,j] := IntToStr(mass[i][j]);
end;
// Сортируем все столбцы по возрастанию
SgSort(StringGrid1, 0, CompNumAsc);
SgSort(StringGrid1, 1, CompNumAsc);
SgSort(StringGrid1, 2, CompNumAsc);
end;
end.
Функция принимает 3 параметра - имя StringGrid которое нуждается в сортировке, потом индекс столбца в котором должна выполнятся сортировка, и функция сортировки либо по убыванию, либо по возрастанию
|