![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравсвуйте. Помогите решить одну проблемку. Может уже кто ниб встречался с такой?
Есть Stringgrid1 в нем 3 столбца, а количество строк изменяется в соответствии с тем какое число выбирается в combobox1. В этих 3ёх столбцах даны какие либо числа... Нужно чтобы выполнилась сортировка по 2ому столбцу, а ячейки в других столбцах изменили свое положение в соответствии с ячейками 2ого столбца. пример: Дано 1 2 6 2 3 9 3 1 2 Сортируем по 2ому столбцу, получаем 3 1 2 1 2 6 2 3 9 Примерная функция сортировки выглядит так: Код:
function mySort(List: TStringList; first, second: Integer): integer; // это функция сортировки function f(index: integer): integer; begin result := StrToInt(List.Strings[index]) end; begin result :=f(second) - f(first); end; begin ts := TStringList.Create; try with StringGrid1 do ts. begin ts.Assign(cols[1]); // Получаем элементы очередной строки ts.CustomSort(mySort); // сортируем их как числа по убыванию Cols[1].Assign(ts); // возвращаем назад в Грид end; finally ts.Free; end; |
#2
|
|||
|
|||
![]() если выложенная сортировка работает по 1 колонке, то можно поменять значениями первую и вторую колонку, до и после сортировки
|
#3
|
|||
|
|||
![]() Цитата:
|
#4
|
|||
|
|||
![]() тогда можно попробовать значение 1 и 3 колонок спрятать в Stringlist.Objects[i]
после сортировки вытащить назад |
Этот пользователь сказал Спасибо Pyro за это полезное сообщение: | ||
gamezeldol (02.06.2012)
|
#5
|
||||
|
||||
![]() Цитата:
Код:
procedure TFormGeneral.BtnSortingClick(Sender: TObject); var I, J, CntRow, Val1, Val2: Integer; begin StringGrid.RowCount := StringGrid.RowCount + 1; CntRow := StringGrid.RowCount; for J := 1 to CntRow - 1 do for I := 1 to CntRow - 1 do begin Val1 := StrToIntDef(StringGrid.Cells[1, I], 0); Val2 := StrToIntDef(StringGrid.Cells[1, J], 0); if Val1 < Val2 then with StringGrid do begin Rows[CntRow] := Rows[i]; Rows[i] := Rows[J]; Rows[J] := Rows[CntRow]; end; end; StringGrid.RowCount := StringGrid.RowCount - 1; end; P.S.: в данном случае сортировка по убыванию. Чтобы получить сортировку по возрастанию нужно чуть-чуть доработать код. А что бы его доработать нужно понять что тут к чему. Учиться, учиться и еще раз учиться ![]() Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
Этот пользователь сказал Спасибо Kailon за это полезное сообщение: | ||
gamezeldol (02.06.2012)
|
#6
|
|||
|
|||
![]() Цитата:
|
#7
|
||||
|
||||
![]() Цитата:
![]() Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |