| Delphi компоненты страница StandartКомпонент Delphi PopupMenu | 
| Уроки Delphi   1.  Первая программа   2.  Использование компонентов   3.  События Delphi   4.  Типы данных Delphi   5.  Создание своих типов данных   6.  Выражения и операторы   7.  Работа с файлами в Delphi   8.  Дополнительные формы   9.  Подпрограммы в Delphi   10. Исключительные ситуации   11. Взаимодействие приложения с пользователем   12. Указатели в Delphi   13. Обзор компонентов   14. Работа со строками   15. Создание интерфейса   16. Графика в Delphi   17. Многопоточность в Delphi   18. Динамическое создание компонентов Поиск по сайту  Это важно: 
   Метод Application.ProcessMessages;
  Это полезно: 
   Параметр Sender в обработчиках событий;
 Бояться не надо |     Контекстное меню (PopupMenu), вызываемое в приложении Windows по щелчку правой кнопкой мыши, является стандартной и удобной возможностью многих программ. Delphi компонент PopupMenu предназначен для создания таких контекстных меню. Контекстное меню из-за способа своего появления называют ещё всплывающим меню. В момент появления контекстного меню происходит событие onPopup компонента PopupMenu. В этот момент можно, исходя из анализа ситуации, внести необходимые изменения в его параметры. Щёлкнув по объекту правой кнопкой мыши, мы получим появление его контекстного меню, обеспеченного компонентом PopupMenu1, в точке произведённого щелчка. Но можно добиться его появления в любом нужном нам месте Формы. Достигается это использованием метода Popup компонента PopupMenu, при этом свойство Popup у соответствующего компонента (в данном случае StringGrid) нужно очистить. Для использования этого метода необходимо использовать событие щелчка правой кнопки мыши по объекту. И правильнее использовать именно отпускание кнопки, то есть событие onMouseUp нужного объекта. Метод Popup имеет параметры X и Y, соответствующие расстоянию точки щелчка по горизонтали и вертикали от верхнего левого угла экрана соответственно. То есть, можно добиться появления меню вообще за пределами Формы. Вот, попробуйте использовать такой код: procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  if Button = mbRight then PopupMenu1.Popup(0, 0);  //появление меню в точке (0, 0)end;Но и обработчик события onMouseUp тоже имеет параметры X и Y. Они соответствуют расстоянию точки щелчка по горизонтали и вертикали от верхнего левого угла уже Формы. Однако, если попытаться использовать их в методе Popup, то меню не появится в том месте, где вы ожидаете. Чтобы добиться нужного эффекта, необходимо учитывать также положение самой Формы, а также того объекта, в пределах которого должно появляться меню. Но и это не всё. Необходимо к значению X добавить высоту заголовка Формы, которая неизвестна. Все эти слагаемые усложняют код. Избавиться от большинства слагаемых поможет функция GetClientOrigin. Она вызывается без параметров и возвращает сдвиг клиентской области Формы относительно верхнего левого угла экрана в формате TPoint (точка, то есть запись с полями X и Y). Таким образом, остаётся учесть только положение нужного объекта. Следующий код обеспечивает появление меню именно в месте щелчка мышки по компоненту StringGrid1: procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);var P: TPoint;begin  P:=GetClientOrigin;  if Button = mbRight thenend;Обзор компонентов Delphi
         
В начало урока         
Delphi компонент Label | 
| © 2023 Delphi-Manual.ru - Уроки Delphi начинающим с нуля |