Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2009, 13:19   #1
Cerber24
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 38
По умолчанию Нажатие правой кнопкой по ветке treeview

Наверное вопрос глупый, но сам разобраться не смог. Есть дерево с двумя ветками. Первый объект выбран, нажимаем правой кнопкой на второй объект и тут начинается проблема, почему выбранным объектом по прежнему остаётся первый объект? как это исправить?
Cerber24 вне форума Ответить с цитированием
Старый 07.11.2009, 13:21   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Можно по извращенски:
-Отловить нажатие мыши и перед посылкой сообщения отправить SetFocus
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 07.11.2009, 13:25   #3
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость

Что вам мешает нажимать левой кнопкой мыши, так работает норм!
Lemo вне форума Ответить с цитированием
Старый 07.11.2009, 13:28   #4
Cerber24
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 38
По умолчанию

Мне нужно нажимать правой кнопкой и по выплывающему меню, что то делать с веткой... а так как ветка при нажатии правой кнопкой не выбирается получается косяк. приходится сначала выбирать левой кнопкой а потом правой кнопкой работать с объектом.

Последний раз редактировалось Cerber24; 07.11.2009 в 13:39.
Cerber24 вне форума Ответить с цитированием
Старый 07.11.2009, 15:46   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ничего сложного тут нет...
Вот вам обработчик:
Код:
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var tp: TPoint;
begin
TreeView1.Selected:=TreeView1.GetNodeAt(X, Y);
tp:=TreeView1.ClientToScreen(Point(X, Y));
if (Button=mbRight) then
MyPopupMenu.Popup(tp.X, tp.Y);
end;
З.Ы. Это одна из процедур, использованных при написании DFaq...

Последний раз редактировалось mihali4; 08.11.2009 в 01:53.
mihali4 вне форума Ответить с цитированием
Старый 08.11.2009, 15:42   #6
Cerber24
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 38
По умолчанию

Спасибо большое, именно то что нужно..
Cerber24 вне форума Ответить с цитированием
Старый 08.11.2009, 15:46   #7
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

у меня малость по-другому реализовано... не знаю, как правильнее, но покажу, мож и пригодится:

Код:
procedure TVKmain.FrListFavMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (FrListFav.Items.Count>0)and(FrListFav.ItemAtPos(Point(x,y),true)>=0) then begin
  FrListFav.Selected[FrListFav.ItemAtPos(Point(x,y),true)]:=true;
  CurSelected:=FrListFav.SelectedItem;
  if Button=mbRight then begin
    PopupMenu1.Popup(VKform.Left+FrPanel.Left+x+20,VKform.Top+FrPanel.Top+y+50) ;
  end;
  FrListFav.Repaint;
end;
end;
PS: mihali4, вспомнил сейчас... сначала сделал как у Вас, потом словил ошибку при райтклике не на итеме в листе... сделал более сложные проверки...
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 08.11.2009 в 15:49.
Johnson вне форума Ответить с цитированием
Старый 08.11.2009, 21:17   #8
Cerber24
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 38
По умолчанию

А как запретить выпрыгивание PopupMenu если нажать правой кнопкой на пустом месте?
Cerber24 вне форума Ответить с цитированием
Старый 08.11.2009, 21:48   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Попробуйте
Код:
if TreeView.Selected=nil then
//не выводить попап
else
//выводить
mihali4 вне форума Ответить с цитированием
Старый 08.11.2009, 21:51   #10
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Позволю себе тоже внести лепту в решение вопроса одним из вариантов.
Здесь обрабатывается событие OnContextPopup, а не OnMouseNNN.
Код:
procedure TfrmMain.TView1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
var pt : TPoint;
    tn : TTreeNode;
begin
  if Sender <> TView1 then Exit;
  pt := TView1.ClientToScreen(MousePos);
  tn := TView1.GetNodeAt(MousePos.X, MousePos.Y-1);
  TView1.Selected := tn;
  //в следующей строке, если курсор на пустом месте, то отмечается корневая ветка
//  if tn = nil then TView1.Selected := TView1.Items.GetFirstNode;
  //если нужно запретить появление меню, то выпрыгиваем из процедуры:
  if tn = nil then Exit;

  ADVpmProject.Popup(pt.X, pt.Y)
  Handled := True;
end;
Скандербег вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение ячейки в DBGrid правой кнопкой мыши RIO БД в Delphi 2 20.08.2009 17:53
Долгое нажатие клавиши в KeyDown как одно нажатие marina15056 Общие вопросы Delphi 7 16.08.2009 00:22
Косяки с правой кнопкой мыши joker Общие вопросы Delphi 4 12.11.2008 13:25
PopupMenu должно появляться только при нажатии на значок в трее правой кнопкой AidarBik Win Api 14 08.03.2008 23:51
Как работать с правой кнопкой мыши? ZeRRon Помощь студентам 4 28.12.2007 18:45