Delphi:PopupMenu在我的组件中不起作用

时间:2011-04-12 15:51:05

标签: delphi pascal freepascal

英文翻译(已经有一段时间了,所以可能不完全准确;使用谷歌翻译我遇到麻烦的部分):

我正在使用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;

1 个答案:

答案 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现在是组件的一部分(无论如何都是链接良好的部分),而不是碰巧在同一个表单上的东西。