Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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

icq: 476060019
Радость

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

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

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

Ничего сложного тут нет...
Вот вам обработчик:
Код:

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 в 02:53.
mihali4 вне форума   Ответить с цитированием
Старый 08.11.2009, 16:42   #6
Cerber24
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 38
Репутация: 10
По умолчанию

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

icq: 560879165
skype: johnson1893
По умолчанию

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

Код:

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 в 16:49.
Johnson вне форума   Ответить с цитированием
Старый 08.11.2009, 22:17   #8
Cerber24
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 38
Репутация: 10
По умолчанию

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

Попробуйте
Код:

if TreeView.Selected=nil then
//не выводить попап
else
//выводить

mihali4 вне форума   Ответить с цитированием
Старый 08.11.2009, 22:51   #10
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
Репутация: 221
По умолчанию

Позволю себе тоже внести лепту в решение вопроса одним из вариантов.
Здесь обрабатывается событие 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;

Скандербег вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


03:07.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru