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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2011, 10:45   #1
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию Shape и меню

вопрос такой на форме есть компоненты Shape1 и PopupMenu1. как сделать что бы на правый клик по Shape1 вызывалась эта менюшка?
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 28.09.2011, 11:25   #2
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

у фигуры на событие OnMouseDown

Код:
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var mP: TPoint;
begin
  if Button = mbRight then begin
    GetCursorPos(mP);
    PopupMenu1.Popup(mP.X, mP.Y);
  end;
end;
Lesha вне форума Ответить с цитированием
Старый 28.09.2011, 11:51   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

к слова Lesha могу добавить.
предложенный им вариант может быть записан ещё и так (пример взять в DelphiWorld):
Код:
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then
    with ( Sender as TControl ).ClientToScreen( Point( X, Y )) do
      PopupMenu1.Popup( X, Y );
end;
а ещё у Shape есть событие onContextPopup
можно использовать такой вариант (в качестве альтернативы вышепредложенному):
Код:
procedure TForm1.Shape1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
var
  pt: TPoint;
begin
  pt := ClientToScreen( MousePos);
  PopupMenu1.Popup(Shape1.Left+pt.x, Shape1.Top+pt.y);
end;

К сожалению, моего опыта и знаний не хватает в данной области, чтобы сказать, какой вариант лучше, надёжней и более правилен.

Надеюсь, что коллеги по форуму прокомментируют и порекомендуют..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.09.2011, 12:24   #4
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

спасибо разобрался. да кстати событие onContextPopup лучше не использовать. так как если к форме на которой находиться Shape1 привязано меню, то оно появиться тоже. точнее появится после первого нужного меню.
А лучше использовать событие MouseUp тогда получается полная имитация.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
shape click A][-][TOXA Общие вопросы Delphi 2 22.04.2011 18:01
Shape driga Компоненты Delphi 4 03.04.2010 12:22
Pascal цикл с Shape.Left and Shape.Top BanzoO Помощь студентам 1 13.12.2009 21:47
помагите с shape Extez1 Помощь студентам 0 19.04.2009 00:01
Shape вверх russian-stalker Общие вопросы Delphi 1 12.09.2008 19:52