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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2010, 05:56   #1
Sergio_O
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 15
По умолчанию Как отобразить PopUp с клавиатуры

Все знают, что на клаве есть кнопка, вызывающая менюшку. Так вот как сделать, чтобы попап выводился в нужном месте - на нужном элементе. К примеру на нужном узле TreeView?
Временное решение, но меню выводится в углу самого TreeView:
Код:
procedure TForm1.TreeView1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = 93 then
    begin
      PopupMenu1.Popup(Form1.Left + TreeView1.Left, Form1.Top + TreeView1.Top);
    end;
end;
Sergio_O вне форума Ответить с цитированием
Старый 04.11.2010, 13:06   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Но узел в TreeView ты же выбираешь мышью. Вот и передай в глобальные переменные
координаты узла при MouseDown
Код:
var X0, Y0: integer;

procedure TfrmMain.TreeViewMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
    X0:=X;
    Y0:=Y;
end;
Ну, и далее при нажатии клавиши
Код:
procedure TfrmMain.TreeViewKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var tp: TPoint;
begin
  if Key = 93 then
 begin
  tp := TreeView.ClientToScreen(Point(X0, Y0));
  (PopupMenu1 as TPopupMenu).Popup(tp.X, tp.Y);
 end;
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 04.11.2010, 13:12   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
uses CommCtrl;
...
var
  R: TRect;
begin
  HTreeItem(Pointer(@R)^) := TreeView1.Items[2].ItemId;//тут задаем ноду дерева, для которой будем выводить попап-меню
  TreeView1.Perform(TVM_GETITEMRECT, 1, Longint(@R));
  PopupMenu1.Popup(Left+TreeView1.Left+R.Left, Top+TreeView1.Top+R.Top);
end;
Никаких координат мыши не нужно.
Можете еще эту ноду сделать Selected.
mihali4 вне форума Ответить с цитированием
Старый 04.11.2010, 18:03   #4
Sergio_O
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Но узел в TreeView ты же выбираешь мышью.
Далеко не факт что мышью.

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Код:
uses CommCtrl;
...
var
  R: TRect;
begin
  HTreeItem(Pointer(@R)^) := TreeView1.Items[2].ItemId;//тут задаем ноду дерева, для которой будем выводить попап-меню
  TreeView1.Perform(TVM_GETITEMRECT, 1, Longint(@R));
  PopupMenu1.Popup(Left+TreeView1.Left+R.Left, Top+TreeView1.Top+R.Top);
end;
Никаких координат мыши не нужно.
Можете еще эту ноду сделать Selected.
Вот это уже похоже на правду! Спасибо, попробую.
Sergio_O вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отобразить ячейку с датой? AK BULLETS Общие вопросы Delphi 0 18.05.2010 11:20
как отобразить на диаграмме время GUSEVV Microsoft Office Access 2 26.08.2009 12:16
Как убрать popUp меню у компонента tSockWaveFlash? Altera Компоненты Delphi 0 18.06.2009 08:07
Как в excel отобразить формулу как текст ? mihhon Microsoft Office Excel 3 03.06.2009 22:05
Как сделать Popup относительно desktop nusik Общие вопросы Delphi 2 05.05.2009 10:21