Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Вызов контекстного меню в позиции курсора

Delphi , Компоненты и Классы , Меню

Вызов контекстного меню в позиции курсора

Автор: Ed Jordan

У меня есть проблема с правильным вызовом контекстного меню в координатах курсора мыши.

Это будет работать:


procedure TForm1.Form1MouseDown(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;

Here's the translation of the text into Russian:

Классическая проблема контекстного меню! Ваш код почти готов, но имеет несколько проблем: 1. Метод PopupMenu1.Popup ожидает координаты в пространстве экрана, а не клиентском. 2. Вы используете Point(X, Y) для создания объекта точки, что является правильным, но должны передавать этот объект в ClientToScreen, а не координаты отдельно.

Вот исправленный код:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then
    PopupMenu1.Popup(ScreenToClient(Point(X, Y)));
end;

В этом коде используется ScreenToClient, чтобы преобразовать точку из координат экрана в клиентские координаты. Это обеспечивает, что контекстное меню будет отображаться на правильной позиции относительно формы. Также обратите внимание, что ScreenToClient возвращает объект типа TPoint, поэтому мы можем передавать его напрямую в PopupMenu1.Popup. Нет необходимости создавать еще один объект точки!

В статье автор Ed Jordan описывает решение проблемы вызова контекстного меню в координатах курсора мыши с помощью процедуры TForm1.Form1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer).


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Меню ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 14:45:50/0.0029330253601074/0