Главная страница
    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.035 c
1-1089844651
k2kator
2004-07-15 02:37
2004.08.01
Связь программы через телефон


3-1089007411
Vova
2004-07-05 10:03
2004.08.01
вставка Id поля вместо значения


1-1090013194
Алекс А
2004-07-17 01:26
2004.08.01
При запуске программы на испанском Виндосе, вместо русских букв,


3-1089030444
ligor
2004-07-05 16:27
2004.08.01
SQL-расширения IB 1.5


8-1082874386
X-Disa
2004-04-25 10:26
2004.08.01
3D - куб





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский