Как сделать так, чтобы:
- по нажатию левой кнопки мыши ничего не выделялось (по двойному щелчку поддеревья должны разворачиваться и сворачиваться)?
- устанавливать и снимать множественное выделение программно? Как устанавливать более-менее понятно, а вот со снятием ничего не выходит.
TTreeView , как изменить выделение
Модератор: Модераторы
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Давно уже отказался от TTreeView. Рекомендую TVirtualTreeView - еслии не ошибаюсь, первый вопрос там решается на уровне свойств дерева, второй - тоже достаточно тривиально.
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
- по нажатию левой кнопки мыши ничего не выделялось (по двойному щелчку поддеревья должны разворачиваться и сворачиваться)?
Подозреваю, что без извращений - никак. Можно пытаться снимать выделение на событии OnSelect.
- устанавливать и снимать множественное выделение программно? Как устанавливать более-менее понятно, а вот со снятием ничего не выходит.
Если устанавливать получилось, то снимать аналогично. Покажите кусок кода.
Код: Выделить всё
procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
node: TTreeNode;
begin
node:= TreeView1.GetNodeAt(X, Y);
if Button = mbRight then node.Selected:= not node.Selected;
end; На всякий случай: Lazarus 0.9.28.2, WinXP
при этом node.Selected устанавливается по очереди в true и false.
Добавлено спустя 1 час 15 минут 3 секунды:
С программным управлением разобрался, нужно использовать не Selected, а MultiSelected.
Остается открытым вопрос о запрете выделения левой кнопкой мыши.
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Поздно и не удаляется ^_^
После долгого "курения" исходников пришел к выводу, что нужно создавать потомка и перегружать в нем MouseDown.
Добавлено спустя 4 часа 6 минут 10 секунд:
Если кому интересно, в потомке нужно перегрузить MouseDown
При этом:
- левой кнопкой мыши выделение не происходит
- по одиночному левому клику на "плюс/минус" дерево разворачивется/сворачивается
- то же самое по двойному левому клику на ветви (на тексте или иконке)
Добавлено спустя 4 часа 6 минут 10 секунд:
Если кому интересно, в потомке нужно перегрузить MouseDown
Код: Выделить всё
procedure TTreeViewEx.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
var
node: TTreeNode;
begin
node:= GetNodeAt(X, Y);
if (Button <> mbLeft) or
(([ssDouble] *Shift) <> []) or
(X < node.DisplayExpandSignRight) then
inherited MouseDown(Button, Shift, X, Y);
end; - левой кнопкой мыши выделение не происходит
- по одиночному левому клику на "плюс/минус" дерево разворачивется/сворачивается
- то же самое по двойному левому клику на ветви (на тексте или иконке)
