Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Virtual TreeView - отмена выделения 
V
    Опции темы
underchronos
Дата 6.5.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.7.2008

Репутация: нет
Всего: нет



Суть такая. Построено дерево и некоторые узлы в нем нельзя выделять. Я делал так:

Код

procedure TF_Main.VTListChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
  SelectedEq: PEquipmentNode;
begin
  SelectedEq := VTList.GetNodeData(Node);
  if Assigned(SelectedEq) then
    if SelectedEq^.TypeNode <> 0 then
      VTList.Selected[Node] := false;
end;


Все хорошо, но это не спасает при включенной опции toMultiSelect - при выделении целого блока через нажатый Shift!
PM MAIL   Вверх
AnalogXP
Дата 6.5.2010, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 23.9.2007

Репутация: нет
Всего: нет



Цитата(underchronos @  6.5.2010,  08:53 Найти цитируемый пост)
Суть такая. Построено дерево и некоторые узлы в нем нельзя выделять. Я делал так:

А зачем не нужно выделять? Чтобы не удалять? 
А исключаю необходимые узлы из выбранных при удалении.
PM MAIL   Вверх
underchronos
Дата 6.5.2010, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.7.2008

Репутация: нет
Всего: нет



AnalogXP
Это требование юзабельности к программе. Вот просто определенные узлы не должны визуально выделяться.

Это сообщение отредактировал(а) underchronos - 6.5.2010, 20:52
PM MAIL   Вверх
kami
Дата 6.5.2010, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(underchronos @  6.5.2010,  20:51 Найти цитируемый пост)
просто определенные узлы не должны визуально выделяться.

Код

procedure TForm1.VirtualStringTree1Change(Sender: TBaseVirtualTree;
  Node: PVirtualNode);
var
  tmpNode: PVirtualNode;
  SelectedEq: PEquipmentNode;
begin
  tmpNode := VirtualStringTree1.GetFirstSelected;
  while Assigned(tmpNode) do
    begin
      SelectedEq := VirtualStringTree1.GetNodeData(tmpNode);
      if SelectedEq^.TypeNode <> 0 then
        VirtualStringTree1.Selected[tmpNode] := False;
      tmpNode := VirtualStringTree1.GetNextSelected(tmpNode);
    end;
end;


Это сообщение отредактировал(а) kami - 6.5.2010, 21:39
PM MAIL WWW   Вверх
Proxin
Дата 6.5.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: 1
Всего: 3



свою отрисовку выделений делайте. 
PM MAIL   Вверх
underchronos
Дата 6.5.2010, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.7.2008

Репутация: нет
Всего: нет



kami, спасибо. Сам склонился к варианту, что в Change нужно пробежаться по всем выделенным узлам. Завтра проверю на работе насколько это интересно работает на больших кол-вах узлов.


Proxin, это в OnBeforeItemPaint?
Типа:
 if vsSelected in Node.States then Node.States := Node.States - [vsselected]; (плюс проверка условия на "тип нода")? Завтра проверю. Спасибо.

Это сообщение отредактировал(а) underchronos - 6.5.2010, 23:03
PM MAIL   Вверх
AnalogXP
Дата 7.5.2010, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 23.9.2007

Репутация: нет
Всего: нет



А что если включить TreeOptions/PaintOptions/toHideSelection или toPopupMode для данных узлов?
Не помню точно опции.

Это сообщение отредактировал(а) AnalogXP - 7.5.2010, 01:56
PM MAIL   Вверх
underchronos
Дата 7.5.2010, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.7.2008

Репутация: нет
Всего: нет



Proxin, спасибо. Работает прекрасно.

Вопрос решен!

Код

procedure TF_Main.VTListBeforeItemPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect;
  var CustomDraw: Boolean);
//----------------------------------------------------------------------------//
//          Отмена Select'а у "узла-подразделения" и "узла группы"            //
//----------------------------------------------------------------------------//
var
  PaintEq: PEquipmentNode;
begin
  if (vsSelected in Node.States) then
  begin
    PaintEq := VTList.GetNodeData(Node);
    if Assigned(PaintEq) then
      if PaintEq^.TypeNode <> 0 then
        Node.States := Node.States - [vsSelected];
  end;
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0708 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.