英文翻译(已经有一段时间了,所以可能不完全准确;使用谷歌翻译我遇到麻烦的部分):
我正在使用Delphi中的Visual Component(它不是标准的Delphi组件),它拥有一个名为PopupMenu
的属性。我将组件中的属性PopupMenu
与PopupMenu相关联,但是当我单击鼠标右键时,我什么都没看到。
我还试图用这段代码强制显示它:
x:= Mouse.CursorPos.X;
y:= Mouse.CursorPos.Y;
// //showmessage(inttostr(x)) PopupMenu1.Popup(x,y);
我有两个问题:
您如何知道右键单击鼠标是否有效?有没有人遇到过这类问题?谢谢你的回答。
由于
修改
以下是我用来执行PopupMenu1:
过程
TForm6.GeckoBrowser1DOMMouseDown(Sender: TObject; Key: Word);
var x,y:integer;
begin
if key=VK_RBUTTON then begin
x:= Mouse.CursorPos.X;
y:= Mouse.CursorPos.Y;
//showmessage(inttostr(x)) PopupMenu1.Popup(x,y);
end;
end;
答案 0 :(得分:0)
这永远不会奏效。您不能将表单中的代码与组件代码混合在一起。
我会建议这样的事情:
interface
type
TGeckoBrowser = class(....
private
FPopupmenu: TPopupMenu;
protected
...
procedure MouseUp(Sender: TObject; Key: Word); override;
...
published
property PopupMenu: TPopupMenu read FPopupMenu write FPopupMenu;
end;
implementation
....
procedure TGeckoBrowser.MouseUp(Sender: TObject; Key: Word);
var
x,y: integer;
begin
inherited;
if (key=VK_RBUTTON) and Assigned(PopupMenu) then begin
x:= Mouse.CursorPos.X;
y:= Mouse.CursorPos.Y;
PopupMenu.Popup(x,y);
end; {if}
end;
或者如果您不想在出现弹出菜单时触发OnMouseUp,请执行以下操作:
implementation
....
procedure TGeckoBrowser.MouseUp(Sender: TObject; Key: Word);
var
x,y: integer;
begin
if (key=VK_RBUTTON) and Assigned(PopupMenu) then begin
x:= Mouse.CursorPos.X;
y:= Mouse.CursorPos.Y;
PopupMenu.Popup(x,y);
end {if}
else inherited;
end;
看到区别? Popupmenu现在是组件的一部分(无论如何都是链接良好的部分),而不是碰巧在同一个表单上的东西。