Главная страница
    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.037 c
3-1089360692
denis24
2004-07-09 12:11
2004.08.01
table1.filter


1-1090418202
pashap
2004-07-21 17:56
2004.08.01
Путь к DLL


1-1090237390
mishabik
2004-07-19 15:43
2004.08.01
SourceSave


3-1087832937
ceval
2004-06-21 19:48
2004.08.01
DBGrid показено только несколько полей,а как другие поля таблицы


11-1046110368
KSV
2003-02-24 21:12
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский