Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2012, 23:47   #1
cardon
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 13
По умолчанию Сортировка StringGrid по времени

В общем есть StringGrid в котором 3 столбца. Первый из них фиксированный. Остальные начиная с 0 все редактируемые.

1) Время когда необходимо произвести звонок в формате чч:мм:сс
2) Имя Предмета
3) Время оставшееся до звонка в формате чч:мм:сс

Необходимо сделать сортировку по 3 колонке.
К примеру в 3 колонке 8 строк.

1) 0:23:31
2) 34:22:12
3) 2:35:3
4) 12:43:33
5) 23:31:44
6) 0:23:38
7) 3:25:18
8) 0:23:4

Задача расположить их в таком порядке

1) 0:23:4
2) 0:23:31
3) 0:23:38
4) 2:35:3
5) 3:25:18
6) 12:43:33
7) 23:31:44
8) 34:22:12

Так же в 3 колонке может ничего не быть на некоторых полях. Такие строки необходимо поставить в самый конец.

Нагуглил вот такой код. Но сортировка в данном варианте выполняется не правильно и не с 0 строки.

Если применить данный код то сортировка будет выглядеть вот так.

1) 0:23:31
2) 0:23:38
3) 0:23:4
4) 12:43:33
5) 2:35:3
6) 23:31:44
7) 3:25:18
8) 34:22:12

Код:
procedure SortStringGrid(var GenStrGrid: TStringGrid; ThatCol: Integer);
 const
   // Define the Separator 
  TheSeparator = '@';
 var
   CountItem, I, J, K, ThePosition: integer;
   MyList: TStringList;
   MyString, TempString: string;
 begin
   // Give the number of rows in the StringGrid 
  CountItem := GenStrGrid.RowCount;
   //Create the List 
  MyList        := TStringList.Create;
   MyList.Sorted := False;
   try
     begin
       for I := 1 to (CountItem - 1) do
         MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol] + TheSeparator +
           GenStrGrid.Rows[I].Text);
       //Sort the List 
      Mylist.Sort;

       for K := 1 to Mylist.Count do
       begin
         //Take the String of the line (K – 1) 
        MyString := MyList.Strings[(K - 1)];
         //Find the position of the Separator in the String 
        ThePosition := Pos(TheSeparator, MyString);
         TempString  := '';
         {Eliminate the Text of the column on which we have sorted the StringGrid}
         TempString := Copy(MyString, (ThePosition + 1), Length(MyString));
         MyList.Strings[(K - 1)] := '';
         MyList.Strings[(K - 1)] := TempString;
       end;

       // Refill the StringGrid 
      for J := 1 to (CountItem - 1) do
         GenStrGrid.Rows[J].Text := MyList.Strings[(J - 1)];
     end;
   finally
     //Free the List 
    MyList.Free;
   end;
 end;

Последний раз редактировалось cardon; 05.01.2012 в 00:22.
cardon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка массива с замером времени GaLiof JavaScript, Ajax 0 03.10.2010 08:35
Сортировка времени sergio11 Общие вопросы C/C++ 5 06.09.2010 20:44
Хранение даты и времени в Interbase и их сортировка tarakan1983 БД в Delphi 2 01.09.2010 23:47
Программирование под Linux - Сортировка по времени digger Помощь студентам 1 13.12.2008 23:30