Выделение элементов TreeView

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Выделение элементов TreeView

Сообщение Brainenjii » 26.02.2008 23:25:56

В общем, понадобилось выделить каким-либо образом отдельные элементы TreeView... Нужно сделать фильтрацию древовидной структуры, и может получиться так, что иерархия отфильтрованного получится "неровной"... Но чтобы отобразить результат в TreeView, непопавшие в фильтр элементы, как понимаю, придётся оставить... Но хочется их как-нибудь выделить - курсивом, или ещё как... Возможно ли? ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Выделение элементов TreeView

Сообщение VirtUX » 28.10.2009 17:44:00

Вот столкнулся с той же проблемой. Может есть какая-то возможность выделить отдельный элемент цветом или особенным шрифтом?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Выделение элементов TreeView

Сообщение dunin » 18.02.2010 10:07:17

Не совсем то, но тоже про TreeView...

Вот этот код правильно не отрабатывает:
Код: Выделить всё
procedure TBookForm.ToolBtnSortClick(Sender: TObject);
begin
  UserTree.AlphaSort;
end;

Дерево перестраивается, но как-то не правильно... Где-то грабли, а где не понятно - миноискателя подходящего под рукой нет...
Изображение
Ну и вопрос:
Как добиться правильной алфавитной сортировки в tTreeView с минимальными трудозатратами? :?
Спасибо.

ps/ Если это имеет значение... Дерево строится на основании данных из БД FireBird с кодировкой NONE, данные хранятся в UTF-8
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Выделение элементов TreeView

Сообщение Brainenjii » 18.02.2010 10:26:24

Я вот так делаю:
Код: Выделить всё
Procedure TFormMain.TreeViewUsersCompare(Sender: TObject; Node1,
  Node2: TTreeNode; Var Compare: Integer);
Begin
  If Node1.Text > Node2.Text Then
    Compare := 1
  Else
    If Node1.Text = Node2.Text Then
      Compare := 0
    Else
      Compare := -1;
end;
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Выделение элементов TreeView

Сообщение dunin » 18.02.2010 10:48:48

Brainenjii писал(а):Я вот так делаю:
...

Хм... А разве AlphaSort делает не то же самое?
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Выделение элементов TreeView

Сообщение Brainenjii » 18.02.2010 11:34:52

Вот, а потом AlphaSort ^_^ Что он делает сам - не знаю ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Выделение элементов TreeView

Сообщение dunin » 18.02.2010 14:09:15

Brainenjii, спс. Заработало. В проекте на Дельфи описывать обработчик OnCompare не требовалось, при вызова AlphaSort и так все замечательно работало. По крайней мере у меня. Ничего... постепенно отвыкнем. :roll:

Вот. Немного усовершенствовал (если надо чтобы сортировка работала как регистро- независимая):
Код: Выделить всё
procedure TBookForm.UserTreeCompare(Sender: TObject; Node1, Node2: TTreeNode;
  var Compare: Integer);
begin
   Compare:= AnsiCompareText(AnsiUpperCase(UTF8ToAnsi(Node1.Text)), AnsiUpperCase(UTF8ToAnsi(Node2.Text)))
end;   
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Выделение элементов TreeView

Сообщение Mr.Smart » 18.02.2010 17:57:16

dunin
Ну тогда лучше уж так :wink:
Код: Выделить всё
procedure TBookForm.UserTreeCompare(Sender: TObject; Node1, Node2: TTreeNode;
  var Compare: Integer);
begin
   Compare:= WideCompareText(UTF8Decode(Node1.Text),UTF8Decode(Node2.Text))
end; 
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Выделение элементов TreeView

Сообщение dunin » 18.02.2010 20:26:50

Mr.Smart, великолепно! Изображение
Хотя с ANSI оно как-то понятнее, роднее и привычнее, но взял на вооружение. :)
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Выделение элементов TreeView

Сообщение Padre_Mortius » 18.02.2010 23:10:45

А не проще сортировать (order by) в запросе, а потом уже заполнить дерево?
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Выделение элементов TreeView

Сообщение dunin » 18.02.2010 23:18:29

Padre_Mortius писал(а):А не проще сортировать (order by) в запросе, а потом уже заполнить дерево?

Это само собой. Но вредному юзеру завсегда надо куда-то залезть, куда программист и подумать не может. Или, например, взять мышой и перетянуть ветку дерева в другой узел и еще как-то поизголяться... ну и потом, когда все надоест, зевнуть, и одним нажатием кнопки перестроить все по алфавиту. В последнем случае проще просто ветки отсортировать, чем все заново строить. ИМХО.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: MailRu[bot] и гости: 62

Рейтинг@Mail.ru