Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.05.2007, 06:59
TitiS TitiS вне форума
Новичок
 
Регистрация: 29.12.2006
Сообщения: 62
Репутация: 10
По умолчанию Сортировка в TreeView

Нужна помощь. Сразу скажу TreeView.SortType не предлагать - это не то. Мне надо: чтобы я мог выбрать по какому именно столбцу необходимо сортировать записи. Сортировка по типу:
1
2
3
4
5
6
7
8
9
а
б
в
г
д
...
я

желательно и латинские символы далее сортировать. Вообще замечательно если будет возможность сортировки в ту и обратную сторону
Ответить с цитированием
  #2  
Старый 17.05.2007, 18:14
ilang ilang вне форума
Новичок
 
Регистрация: 11.12.2006
Сообщения: 68
Репутация: 10
По умолчанию

Не совсем понятно о каких столбцах речь. А вообще для сортировки надо обрабатывать событие TTreeView.OnCompare. В хелпе очень доступно изложено
Ответить с цитированием
  #3  
Старый 18.05.2007, 06:35
TitiS TitiS вне форума
Новичок
 
Регистрация: 29.12.2006
Сообщения: 62
Репутация: 10
По умолчанию

Поясняю.
Значит есть TreeView с стилем Report. К примеру имеется 7 столбцов (т.е. Columns.Count:=7).

Необходима возможность сортировки всех записей (TreeView.Items) по типу:
1
2
3
4
5
..
9
10
..
а
б
в
г
..
я

Причём можно сортировать основываясь на одном из столбцов, на выбор
Ответить с цитированием
  #4  
Старый 18.05.2007, 13:26
ilang ilang вне форума
Новичок
 
Регистрация: 11.12.2006
Сообщения: 68
Репутация: 10
По умолчанию

Ясно. Ты не о том классе говоришь. Я так понимаю ты имеешь в виду класс TListView.
Но повторюсь - для сортировки обрабатывай событие OnCompare.

Это событие возникает:
  • если свойство SortType равно stData или stBoth;
  • если вызван метод AlphaSort;
  • если метод CustomSort вызывается без параметра SortProc

Событие OnCompare сравнивает элементы списка, которые передаются как параметры Item1 и Item2. Если Item1 и Item2 равноценны в порядке сортировки, установить параметр Compare равным 0. Если Item1 меньше Item2 (в порядке сортировки) - установить Compare меньшим 0, если Item1 больше Item2 - установить Compare большим 0.

Это из хелпа. По-моему все предельно ясно.

Пример. Сортировка по алфавиту по столбцу ColNum.

Код:
procedure TForm1.ListView1Compare(Sender: TObject; Item1,
  Item2: TListItem; Data: Integer; var Compare: Integer);
begin
  //ColNum - номер столбца, по которому производится сортировка
  if ColNum = 0 then  
    Compare := AnsiCompareText (Item1.Caption,Item2.Caption)
  else
    Compare := AnsiCompareText(Item1.SubItems[ColNum-1],Item2.SubItems[ColNum-1])
end;

Если нужен обратный порядок - просто умножай параметр Compare на -1

Для производства сортировки можно вызвать метод:
Код:
ListView1.AlphaSort;
Ответить с цитированием
  #5  
Старый 20.05.2007, 04:32
TitiS TitiS вне форума
Новичок
 
Регистрация: 29.12.2006
Сообщения: 62
Репутация: 10
По умолчанию

Блин, опечатку сделал, да это ListView.

Попробывал так как ты написал - всё работает! Причём так как мне надо!
Спасибо! Очень помог!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter