在一个form 里设置了popupmenu, 若这个form里还有Edit类的控件,在Edid里右击, 则弹出式菜单冲突,我如何做到在Edit里弹出默认的菜单, 而在form的其它位置弹出自己设计菜单。

解决方案 »

  1.   

    试试别连接PopupMenu,在Form的OnMouseDown事件写:
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if Button=mbRight then
        PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
    end;
      

  2.   

    procedure TForm1.FormContextPopup(Sender: TObject; MousePos: TPoint;
      var Handled: Boolean);
    var
      vHandle: THandle;
      vClassName: array[0..255] of Char;
      vMousePos: TPoint;
      vPopupMenu: TPopupMenu;
    begin
      vMousePos := ClientToScreen(MousePos);
      vHandle := WindowFromPoint(vMousePos);
      GetClassName(vHandle, vClassName, SizeOf(vClassName));
      if SameText(vClassName, 'TEdit') then
      begin
        Handled := True;
        OnContextPopup := nil;
        vPopupMenu := PopupMenu;
        PopupMenu := nil;
        try
          SendMessage(vHandle, WM_CONTEXTMENU, vHandle,
            MakeLParam(vMousePos.X, vMousePos.Y));
        except
        end;
        PopupMenu := vPopupMenu;
        OnContextPopup := FormContextPopup;
      end;
    end;