Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Вниз

Сортировка в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.039 c
14-1089964754
}|{yk
2004-07-16 11:59
2004.08.01
До окончания кучмизма осталось меньше 120 дней


1-1089849388
Глеб
2004-07-15 03:56
2004.08.01
Прорисовка и скроллинг изображения


14-1089396760
Mell
2004-07-09 22:12
2004.08.01
Кто нить знает хоть один адрес типа рамблер.ру русскими буквам


9-1082198740
ArchangelM
2004-04-17 14:45
2004.08.01
Запутался совсем...


14-1089968001
DimKa
2004-07-16 12:53
2004.08.01
За что Вам нравится данных сайт?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский