Delphi: PopupMenu не работает в моем компоненте - PullRequest
1 голос
/ 12 апреля 2011

Английский перевод (давно, поэтому может быть не совсем точным; использовал Google Translate для частей, с которыми у меня возникли проблемы):

Я работаю над визуальным компонентом в Delphi (это не стандартный компонент Delphi), который обладает свойством PopupMenu. Я связал свойство PopupMenu в компоненте с PopupMenu, но когда я нажимаю правую кнопку [мыши], я ничего не вижу.

Я также пытался заставить его отображаться с этим кодом:

x:= Mouse.CursorPos.X; 
y:= Mouse.CursorPos.Y; 
// //showmessage(inttostr(x)) PopupMenu1.Popup(x,y);

У меня два вопроса:

Откуда вы знаете, что щелчок правой кнопкой мыши активен? Кто-нибудь из вас сталкивался с такой проблемой? Спасибо за ваши ответы.

Спасибо

EDIT

Вот процедура, которую я использую для выполнения 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 голосов
/ 12 апреля 2011

Это никогда не сработает.Вы не можете смешивать код в форме с кодом компонента.

Я бы предложил что-то вроде этого:

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 теперь является частью (в любом случае хорошо связанной частью) вашего компонента, а не чем-то, что просто находится в той же форме.

...