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

Вниз

Сортировка в StringGrid   Найти похожие ветки 

 
Turbid ©   (2004-07-19 13:25) [0]

Есть ли у кого алгоритм см.Сабж


 
VMcL ©   (2004-07-19 13:27) [1]

>>Turbid ©  (19.07.04 13:25)

Посмотри TStringList.Sort() в исходниках VCL - там пример "быстрой сортировки".


 
Думкин ©   (2004-07-19 13:28) [2]

Да, есть. Сабж смотрю. :(


 
Turbid ©   (2004-07-19 13:36) [3]


> Думкин ©   (19.07.04 13:28) [2]
> Да, есть. Сабж смотрю. :(


Дык поделись коль не жадный


 
Думкин ©   (2004-07-19 13:39) [4]

> [3] Turbid ©   (19.07.04 13:36)

А что именно вызывает затруднения? Все сказано в
> 1] VMcL ©   (19.07.04 13:27).
Единственное, что можно - это предложить слегка измененный вариант быстрой сортировки, который сортирует чуть быстрее.


 
Думкин ©   (2004-07-19 13:40) [5]

И вообще, я в Стрингриде данные не храню, я его только для визуалки использую, а сами данные которые сортировать - в своем классе сидят.


 
ALS   (2004-07-19 13:48) [6]

>>Сортировка в StringGrid
Сортировка по 1 или 2 столбцам

procedure DoSortStrGrid(SG: TStringGrid; NCol,NCol2: integer);
var TGD: TStringGrid;
   Lst: TStringList;
   NRCnt, NRFix: integer;
   i: integer;
begin
 if (NCol < 0)
 or (NCol >= SG.ColCount)
 or ((NCol2 >= 0) and (NCol2 >= SG.ColCount)) then
Raise(Exception.Create("Sorting grid: column index is out of range"));
 TGD := TStringGrid.Create(Application);
 try
   NRCnt := SG.RowCount;
   NRFix := SG.FixedRows;
   TGD.ColCount := SG.ColCount;
   TGD.RowCount := NRCnt;
   TGD.FixedRows := NRFix;
   TGD.Row := SG.Row;

   for i := 0 to SG.ColCount-1 do TGD.Cols[i].Assign(SG.Cols[i]);
   Lst := TStringList.Create;
   try
     Lst.Sorted := False;
     Lst.Assign(SG.Cols[NCol]);
     for i := 0 to NRFix-1 do Lst.Delete(i);

     if  (NCol2 >= 0)
     and (NCol2 <> NCol) then
for i := 0 to NRCnt-1-NRFix do
 Lst[i] := Lst[i] + " " + SG.Cells[NCol2, i+NRFix];
     for i := 0 to Lst.Count-1 do Lst.Objects[i] := pointer(i+NRFix);

     Lst.Sort;

     for i := 0 to SG.ColCount-1 do SG.Cols[i].Clear;
     for i := 0 to NRFix-1 do
  SG.Rows[i].Assign(TGD.Rows[i]);
     for i := NRFix to NRCnt-1 do
begin
  SG.Rows[i].Assign(TGD.Rows[integer(Lst.Objects[i-NRFix])]);
  if integer(Lst.Objects[i-NRFix]) = TGD.Row then SG.Row := i
end
   finally
     Lst.Free;
   end
 finally
   TGD.Free
 end
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.046 c
14-1089669484
KilkennyCat
2004-07-13 01:58
2004.08.01
Notebook


3-1088762771
serg128
2004-07-02 14:06
2004.08.01
Как получить перечень параметров из запроса на PL SQL?


4-1087805509
besen-ok
2004-06-21 12:11
2004.08.01
Можно ли на терминальном сервере в определенной сесиси запустить


14-1089679372
Monster
2004-07-13 04:42
2004.08.01
Исходник


3-1089354351
Zhekson
2004-07-09 10:25
2004.08.01
из монопользовательской в многопользовательскую БД