我有个PopupMenu,所有动态创建的TmxButton的PopupMenu都赋给了它..
但我现在问题是,在其中一个Button点右键出现菜单后.我怎么知道是哪个呢???比如
我动态创建了TmxButton1,TmxButton2,TmxButton3,三个TmxButton的PopopMenu都是同一个..
我现在为PopopMenu里某个菜单写事件时候,比如就SHOW一下所点TmxButton的Name,可关键我怎么知道程序运行时候是点哪个TmxButton触发的呢??

解决方案 »

  1.   

    如:
    Showmessage((Sender as TmxButton).Caption)
      

  2.   

    你点击popup的时候sender不是tmxbutton而是TMenuItem。所以Showmessage((Sender as TmxButton).Caption)肯定会出错。
      

  3.   

    自己写mxOutlookBarProContextPopup事件,在这里面控制
    设置Button1/2/3的Tag分别为1/2/3;在这个事件里传给PopupMenu.tag ,以后在事件里判断PopupMenu的Tag值就可以了。procedure TFMenus.mxOutlookBarProContextPopup(Sender: TObject;
      MousePos: TPoint; var Handled: Boolean);
    Var
      Pos: TPoint;
      iIndex: Integer;
    Begin
      Pos := ClientToScreen( MOUSEPOS );
      If Sender Is TmxButton Then
      Begin
        iIndex:=(Sender as TmxButton).Tag;
        myPopupMenu.Tag:=iIndex;
        myPopupMenu.Popup( Pos.X, Pos.Y );
        Handled := True;
      End;
    end;
      

  4.   

    有个办法就是判断cursor的位置,不过比较不专业。关注
      

  5.   

    http://community.csdn.net/Expert/topic/4176/4176894.xml?temp=.9599878
      

  6.   

    有那么麻烦么?
    myPopupMenu.PopupComponent就是弹出菜单的控件
      

  7.   

    直接ShowMessage(myPopupMenu.PopupComponent.Name)就可以了
    如果要当作TmxButton来用,那就Showmessage(TmxButton(myPopupMenu.PopupComponent).Name);
      

  8.   

    TmxButton并不是一个控件,相当于mxOutlookBarPro控件里面的一个Item,所以做法要相对复杂些。如果用树形控件来形容的话,相当于要判断在哪个节点上弹出右键菜单。
      

  9.   

    既然TmxButton不是控件,那么楼主如何为它赋PopupMenu属性?
      

  10.   

    with mxoutlookbarpro1.Header[0].AddButton do
            begin
              caption:=clientdataset1.fieldbyname('name').AsString;
              PopupMenu:=PopupMenu1;
              OnClick:=n1click;
              Cursor:=crHandPoint;
            end;