Архив исходников программ, модулей и компонентов на Delphi


Начальная страница

Поиск по базе



Операционная система
Настройка приложения
Взаимодействия приложений
Файлы и директории
Строки и символы
Математика
Базы данных
Интернет и сеть
Мультимедиа
Аппаратная часть
VCL
Другие разделы [0]
 

Количество записей в базе - 537
Сегодня добавлено – 0

Модификация компонентов



Вернуться к списку функций
 Код сортировки StringGrid

 Прислал: Вячеслав (Самара) ( 23 июня 2006 г. )
©  Идея - неизвестного мастера, доведение до ума - моё
 Описание:
Функция для очень быстрой сотрировки stringGrid начиная с любой строки и заканчивая последней строкой. вверх/вниз определяется автоматически.

ВНИМАНИЕ: Если в сортируемой ячейке попадётся текст вида "sdfdfsgjhkdfg|dfgdfk"
(!! - |, обратите внимание!), то ТЕКСТОМ реально будет считаться только 2-ая часть этой строки.

 Зависимости:
Стандартные при загрузке нового проекта

 Ограничения:
Delphi 7 & Windows XP SP2

 Исходный текст:
{ **** UBPFD *********** by http://kladovka.net.ru/delphibase/ ****
>> Код сортировки StringGrid

Функция для очень быстрой сотрировки stringGrid начиная с любой строки и заканчивая последней строкой. вверх/вниз определяется автоматически.

ВНИМАНИЕ: Если в сортируемой ячейке попадётся текст вида "sdfdfsgjhkdfg|dfgdfk"
(!! - |, обратите внимание!), то ТЕКСТОМ реально будет считаться только 2-ая часть этой строки.

Зависимости: Стандартные при загрузке нового проекта
Автор:       Вячеслав, madmin@elprommash.ru, Самара
Copyright:   Идея - неизвестного мастера, доведение до ума - моё
Дата:        23 июня 2006 г.
***************************************************************** }

var sgSmData=(stUp, stDown);

procedure SortGrid(SG: TStringGrid; Column: Integer; SortMode: sgSmData; StartWithin: Integer=0);
var
  MinRowId, RowId1, RowId2, ColId: Integer;
  Temp1, Temp2: string;
begin
 for RowId1 := StartWithin to SG.RowCount - 2 do
  begin
   Temp1 := Getlonghinttrim(SG.Cells[Column , RowId1]);
   MinRowId := RowId1;
   for RowId2 := RowId1 + 1 to SG.RowCount - 1 do
    begin
     Temp2 := Getlonghinttrim(SG.Cells[Column, RowId2]);

     if (SortMode=stUp) then
     if Temp2 < Temp1 then begin
       Temp1 := getlonghinttrim(SG.Cells[Column, RowId2]);
       MinRowId := RowId2;
     end;
     if (SortMode=stDown) then
     if Temp2 > Temp1 then begin
       Temp1 := getlonghinttrim(SG.Cells[Column, RowId2]);
       MinRowId := RowId2;
     end;

  end;


   for ColId := 1 to SG.ColCount - 1 do
    begin
     Temp2 := SG.Cells[ColId, RowId1];
     SG.Cells[ColId, RowId1] := SG.Cells[ColId, MinRowId];
     SG.Cells[ColId, MinRowId] := Temp2;
    end;
  end;
end;

function GetLongHintTrim(Str: String): String;
begin
  Result := TriM(GetLongHint(Str));
end;

 Пример использования:
procedure SortGrid(SG: TStringGrid; Column: Integer; SortMode: sgSmData; StartWithin: Integer=0);

SortGrid(StringGrid1, 2, smUp, 0) - сортировка по возрастанию второго столбца
SortGrid(StringGrid1, 2, smDown, 0) - сортировка по убыванию второго столбца


Вернуться к списку функций

Наверх ▲    

Подробное описание купити двері у нас.