...вызов popup-меню связан с координатами экрана. Координаты, получаемые в вашем обрабочике события, вероятно относятся к объекту, который создал это сообщение. Для преобразования координат вам необходимо воспользоваться функцией ClientToScreen.
Вот пример вызова контекстного меню, вызываемого при щелчке правой кнопкой мыши на узле TTreeView. Этот пример не в точности отвечает на ваш вопрос, но у меня нет желания расчитывать wParams прямо сейчас. Я думаю вы можете воспользоваться предложенной мною идеей и развить ее в нужном направлении.
procedure TfrmExplorer.TreeViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var P : TPoint; begin if Button<>mbRight then exit; TreeMenu.AutoPopup := False; if TreeView.GetNodeAt(X,Y)<>NIL then begin TreeView.Selected := TreeView.GetNodeAt(X,Y); P.X := X; P.Y:=Y; P := TreeView.ClientToScreen(P); TreeMenu.Popup(P.X,P.Y); end; end; |
[001503]