Вызов контекстного меню в позиции курсора 2
...вызов 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;
|
|