Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.02;
Скачать: CL | DM;

Вниз

Как отсортировать эл-ты в TStringGrid ???   Найти похожие ветки 

 
JC ©   (2002-08-19 00:15) [0]

^^^


 
^Sanya ©   (2002-08-19 00:17) [1]

по алфавиту?


 
JC ©   (2002-08-19 00:27) [2]

Конечно,а как ещё?


 
Ученик ©   (2002-08-19 00:59) [3]

procedure SortStringGrid(StringGrid: TStringGrid; Col, L, R: Integer);
var
I, J, P: Integer;
Temp : TStringList;
begin
repeat
I := L;
J := R;
P := (L + R) shr 1;
repeat
while StringGrid.Cells[Col, i] < StringGrid.Cells[Col, P] do
Inc(I);
while StringGrid.Cells[Col, j] > StringGrid.Cells[Col, P] do
Dec(J);
if I <= J then
begin
Temp := TStringList.Create;
try
Temp.Assign(StringGrid.Rows[i]);
StringGrid.Rows[i].Assign(StringGrid.Rows[j]);
StringGrid.Rows[j].Assign(Temp)
finally
Temp.Free
end;
Inc(I);
Dec(J);
end;
until I > J;
if L < J then
SortStringGrid(StringGrid, Col, L, J);
L := I;
until I >= R
end;


 
Ученик ©   (2002-08-19 01:01) [4]

Вызов: SortStringGrid(StringGrid1, 1, 1, StringGrid1.RowCount - 1);


 
JC ©   (2002-08-19 01:03) [5]

Ученик - Что такое L{eft}, R{ight}: Integer??


 
Ученик ©   (2002-08-19 08:46) [6]

L - начальная сортируемая строка StringGrid-a, R-конечная сортируемая строка StringGrid-a, это алгоритм быстрой сортировки (QuickSort), не узнали ? :)))


 
JC ©   (2002-08-19 16:36) [7]

Работает он как-то не так!!! При сортировке SortStringGrid(StringGrid1, 0, 1, StringGrid1.RowCount - 1); Он сортирует только первую колонку, при повторном вызове результат изменяется ( В


 
Ученик ©   (2002-08-19 16:49) [8]

>JC © (19.08.02 16:36)
Сортирует он по колонке, которая передана в качестве параметра, при повторном вызове процедуры с теми же параметрами результат не меняется.

Если необходимо другое сравнение, то меняются строки

while StringGrid.Cells[Col, i] < StringGrid.Cells[Col, P] do
Inc(I);
while StringGrid.Cells[Col, j] > StringGrid.Cells[Col, P] do
Dec(J);


 
JC ©   (2002-08-19 17:06) [9]

Ученик ты вообще это... пробывал та что зделал? B-)


 
Ученик ©   (2002-08-19 17:11) [10]

>JC © (19.08.02 17:06)
Да


 
Ученик ©   (2002-08-19 17:17) [11]

Но, где-то есть ошибка, тестовый пример оказался маленьким


 
Ученик ©   (2002-08-19 17:31) [12]

...
Temp := TStringList.Create;
try
Temp.Assign(StringGrid.Rows[i]);
StringGrid.Rows[i].Assign(StringGrid.Rows[j]);
StringGrid.Rows[j].Assign(Temp)
finally
Temp.Free
end;
if P = I then
P := J
else if P = J then
P := I;

Inc(I);
Dec(J);
...


 
JC ©   (2002-08-20 14:16) [13]

Ладно ту колонку которая указана он сортирует, а остальные
(следующие) оставляет(при первой с одинаковим значением):
1 2 3
1 1 2
2 2 3
А по идее надо:
1 1 2
1 2 3
2 2 3

=-(


 
Ученик ©   (2002-08-20 14:19) [14]

>JC © (20.08.02 14:16)
Ученик © (19.08.02 16:49)



Страницы: 1 вся ветка

Текущий архив: 2002.09.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
8-3529
DmitryM
2002-04-23 15:46
2002.09.02
ico в bmp


14-3624
qqqq
2002-08-07 11:55
2002.09.02
Пора ли Delphi хоронить?


1-3474
dimanew
2002-08-21 06:19
2002.09.02
Как в MessageDlg вместо Yes, No сделать Да, Нет?


1-3435
Степан
2002-08-23 07:36
2002.09.02
Выделить строку в ListView


1-3419
hooky-mars
2002-08-21 18:31
2002.09.02
Компаненета