Показать сообщение отдельно
Старый 13.03.2014, 04:34   #4 (permalink)
Debianer
Member
 
Регистрация: 07.08.2012
Адрес: Находка, Приморский край
Сообщений: 336
Сказал(а) спасибо: 14
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1671
По умолчанию

Только не Memo - этот компонент представляет из себя, по сути, аналог Блокнота в Windows.
Вот так можно определить запись:
type
TAuto = Record
Firm : string;
Year : ShortInt;
Color : string;
SellDate : TDate;
Price : integer;
end;

А так объявляем массив:
var
AutoAr: array[0..9] of TAuto;

После ввода всех элементов массива сортировку можно сделать несколькими способами. Вот один из вариантов: на форму кидаем TStringGrid, пишем в него данные из массива и потом уже сортируем. Вот процедура сортировки StringGrid по указанному столбцу:
procedure SgSort(aSg : TStringGrid; const aCol : Integer);
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;
//Сортируем столбец.
SlSort.Sort;
//Возвращаем в таблицу строки, отсортированные по столбцу с номером aCol.
j := 0;
for i := aSg.FixedRows to aSg.RowCount - 1 do begin
//Берём очередной контейнер.
SlRow := SlSort.Objects[j] as TStringList;
//Записываем содержимое контейнера в строку таблицы.
aSg.Rows[i].Assign(SlRow);
//Уничтожаем контейнер.
SlRow.Free;
//Следующий индекс списка.
Inc(j);
end;
//Уничтожаем сортируемый список.
SlSort.Free;
end;
Debianer вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070