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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2012, 11:31   #1
yulits
Новичок
Джуниор
 
Аватар для yulits
 
Регистрация: 27.10.2012
Сообщений: 2
По умолчанию Показывать PopupMenu под кнопкой в FireMonkey

Уважаемые знатоки!
У меня такая задача: Есть кнопка, при нажатии на правую клавишу мыши должно открываться контекстное меню прямо под кнопкой, а не на позиции курсора.
Создаю проект FireMonkey HD. Кидаю Button и PopupMenu. Связываю PopupMenu с кнопкой. Пишу обработчик

Код:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single);
var p: TPointF;
begin
      p:= ClientToScreen(Button1.Position.Point);
      popupMenu1.Popup(p.x, p.y+Button1.Height);
end;
Итог: При нажатии на правую клавишу мыши сначала открывается меню в нужном месте (прямо под кнопкой), а после его закрытия открывается повторно на позиции курсора.
Проблема в том, что в FireMonkey у PopupMenu нет свойства AutoPopup и непонятно как отключить стандартную обработку события.
yulits вне форума Ответить с цитированием
Старый 27.10.2012, 11:52   #2
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

или используйте эту функцию:
Код:
function StartMenuHeight: Integer;
begin
Result := 1 - 1 + MenuHeight * 3;
end;
var
  P: TPoint;
begin
if Button = mbRight then
begin
Exit; end else
if (Button = mbMiddle) or (Button = mbLeft)then
  P.X := AdvGlowButton90.Left;
  P.Y := AdvGlowButton90.Top;
  P := ClientToScreen(P);
  PopupMenu1.Popup(P.X, P.Y-StartMenuHeight);
end;
beegl вне форума Ответить с цитированием
Старый 29.10.2012, 21:06   #3
yulits
Новичок
Джуниор
 
Аватар для yulits
 
Регистрация: 27.10.2012
Сообщений: 2
По умолчанию

А как отключить стандартный вывод меню в том месте где находится курсор? В VCL у PopupMenu есть свойство AutoPopup, ставишь False и меню по правой клавише не выскакивает вообще.
Можно ли отключить обработчик? Или передать ему в качестве параметров X и Y позицию под кнопкой? А именно в процедуру
Код:
procedure TControl.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single);
пакета FMX.Types
yulits вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести PopupMenu строго под кнопкой Shouldercannon Общие вопросы Delphi 1 31.01.2012 16:05
Рисунок под кнопкой. segail Microsoft Office Excel 5 21.07.2009 01:27
PopupMenu левой кнопкой мыши Pinya Компоненты Delphi 3 22.08.2008 19:23
PopupMenu должно появляться только при нажатии на значок в трее правой кнопкой AidarBik Win Api 14 08.03.2008 23:51
Показывать-не показывать скрытые файлы и папки... Романнн Свободное общение 5 07.11.2007 13:16