Главная страница
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.013 c
1-3425
propeller
2002-08-21 23:38
2002.09.02
отчет в Excel е клепаю, а он потом остается задачей...


3-3302
CashDi
2002-08-13 09:34
2002.09.02
Получение имени пользователя IB6, FireBird


3-3236
Димон1
2002-08-09 14:51
2002.09.02
Наверно пора на обед....


1-3465
cfg
2002-08-21 05:39
2002.09.02
проблема


4-3676
МитяЙ2
2002-06-20 14:27
2002.09.02
Временная папка