1

英語の翻訳(しばらく前なので、完全に正確ではないかもしれません。問題があった部分にはGoogle翻訳を使用しました):

と呼ばれるプロパティを持つ Delphi のビジュアル コンポーネント (標準の Delphi コンポーネントではありません) に取り組んでいますPopupMenu。コンポーネントのプロパティPopupMenuを PopupMenu に関連付けましたが、[マウスの] 右ボタンをクリックしても何も表示されません。

また、このコードで強制的に表示しようとしました:

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

2 つの質問があります。

マウスの右クリックがアクティブであることをどうやって知ることができますか? この種の問題に遭遇した人はいますか?回答ありがとうございます。

ありがとう

編集

手順を実行するために使用している手順は次のとおり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;
4

1 に答える 1

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 は、たまたま同じフォーム上にあるものではなく、コンポーネントの一部 (とにかくよくリンクされた部分) になりました。

于 2011-04-12T16:31:14.133 に答える