Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Выравнивание в TreeView


Автор: Coderr 19.1.2008, 00:01
Доброго времени суток! Что-то не получается сделать сортировку, подскажите.
TreeView у меня двухуровневый(представте контакт лист icq. Первый уровень - группы, второй, т.е. Child'ы, - юзеры). Так вот. Надо отсортировать по убыванию индексов иконок юзерские ноды. Как это рализовать? smile 

Автор: Coderr 19.1.2008, 23:25
Ой! Я ошибся в заголовке темы!  Не выравнивание, а сортировка! Прошу прощения... smile 

Автор: VICTAR 19.1.2008, 23:57
У TreeView есть событие OnCompare. Используй его. 
PS а вообще лучше юзать VirtualTreeView  smile 

Автор: Coderr 20.1.2008, 00:11
Virtualным деревом я уже пользовался. И даже готовый пример у меня был, сам делал(в мае прошлого года). Но... Достав сейчас этот исходник с запылившейся полки я понял, что уже ничего не понимаю. smile

OnCompare видел. А как им пользоваться? В мануале делфовом видел пример, что-то я с ним не разобрался.

Автор: VICTAR 20.1.2008, 00:19
Ну если сам делал, то проблем вообще не должно возникнуть. Принцип один и тот же. 
А вообще у тебя два нода, сравнивай их по нужному параметру и результат заноси в Compare.

0 - если равно
>0 - первое больше второго
<0 - второе больше первого

Добавлено через 4 минуты и 20 секунд
Ах да, SortType выставь в stData или stBoth

Автор: Coderr 20.1.2008, 00:35
Вот написал примерно, только не заходит ни разу в обработчик события:
Код

procedure TMainForm.TreeViewCompare(Sender: TObject; Node1,
  Node2: TTreeNode; Data: Integer; var Compare: Integer);
begin
 if (Node1.Parent <> nil) and (Node2.Parent <> nil) then
  Compare := Node1.ImageIndex - Node2.ImageIndex;
end;

Т.е. ставил брекпойт на 4 строку. Ни разу там не остановилась прога. :(

Пардон! Поставил на пятую строку - словил брекпойнт. smile Правда не всегда он сортирует правильно.
Например, так называемые группы он всё же сортирует. :(

Вот! Сейчас заметил закономерность. Добавляем элемент, он не сразу встаёт на нужное место, а только после добавления следующего элемента.

Автор: VICTAR 20.1.2008, 01:00
У меня получилось  smile 

Автор: Coderr 20.1.2008, 01:13
Виктар! Спасибище! Опять меня выручил! Именно процедура AlphaSort мне и нужна была! ;)
Теперь вызываю её после добавления элемента - всё работает!

Автор: VICTAR 20.1.2008, 01:18
Не за что  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)