我在窗口中加一个弹出式菜单,并设置了几个菜单项,请问如何能做到:右击某组件弹出该菜单时,能够根据某些条件将其中某个菜单项disable.....小弟在此先谢了。

解决方案 »

  1.   

    procedure TCheckTreeView.MouseDown(Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      vTreeNode: TCheckTreeNode;
      //PT: TPoint;
      //Rect: TRect;
    begin
      inherited;
      vTreeNode := TCheckTreeNode(GetNodeAt(X, Y));
      if (vTreeNode <> nil) then
        if (Button = mbLeft)
        then begin
               if (htOnStateIcon in GetHitTestInfoAt(X, Y)) then
                 vTreeNode.Checked := not vTreeNode.Checked;
             end
        else if (Button = mbRight) then
             begin
               vTreeNode.Selected := True;
               if (htOnLabel in GetHitTestInfoAt(X, Y))
                 or(htOnIcon in GetHitTestInfoAt(X, Y)) then
               begin
                 Rect := vTreeNode.DisplayRect(True);
                 PT := ClientToScreen(Point(Rect.Left, Rect.Bottom));
                 PopupMenu.Popup(PT.X, PT.Y);
               end;           
             end;
    end;
      

  2.   

    procedure TForm1.PopupMenu1Popup(Sender: TObject);
    begin
      //根据条件设置菜单项的Enabled属性
      m2.Enabled := False;
    end;