哈哈,这些控件都是有popupmenu属性的,只要指向相关的popummenu就行了阿……

解决方案 »

  1.   

    帅哥,请给我个例子怎样设置panel1的popupmenu是窗体系统菜单?
      

  2.   

    弹出我知道了,大家可以看一下vcl源代码:
    procedure TPopupMenu.Popup(X, Y: Integer);
    const
      Flags: array[Boolean, TPopupAlignment] of Word =
        ((TPM_LEFTALIGN, TPM_RIGHTALIGN, TPM_CENTERALIGN),
         (TPM_RIGHTALIGN, TPM_LEFTALIGN, TPM_CENTERALIGN));
      Buttons: array[TTrackButton] of Word = (TPM_RIGHTBUTTON, TPM_LEFTBUTTON);
    var
      AFlags: Integer;
    begin
      FPopupPoint := Point(X, Y);
      SetBiDiModeFromPopupControl;
      DoPopup(Self);
      FItems.InternalRethinkHotkeys(False);
      FItems.InternalRethinkLines(False);
      FItems.RebuildHandle;
      AdjustBiDiBehavior;
      AFlags := Flags[UseRightToLeftAlignment, FAlignment] or Buttons[FTrackButton] or
        (Byte(FMenuAnimation) shl 10);
      TrackPopupMenu(FItems.Handle, AFlags, X, Y, 0 { reserved }, PopupList.Window, nil);
    end;
    ///////////////////////////
    function TrackPopupMenu; external user32 name 'TrackPopupMenu';
      

  3.   

    我们使用Delphi编制应用程序,编译运行后,在主界面的左上角出现一小图标,用鼠标单击此图标,会出现一下拉式菜单,这就是系统菜单。系统菜单包括[还原]、[移动]、[大小]、[最小化]、[最大化]和[关闭]六项。系统菜单是Delphi自动给每个应用程序加上的,不用特意设计。但在我们的应用程序中,有时为达到一定目的,不希望在主界面上有主菜单存在,这时就可以在系统菜单上做点文章,将自己的菜单选项加入到系统菜单中,以实现主界面的整洁。
      下面是具体的实现方法。例如,我们要将[新建]和[保存]两选项加入到系统菜单中。先将一PopupMenu组件加入表单,双击此组件进入PopupMenu设计器,设置[新建]和[保存]菜单项,后单击表单空白处,再选中Objector Inspector的Event选项卡,双击OnCreate事件,进入单元窗口,编写如下代码:
      Procedure Tform1,FormCreate(Sender:TObject);
      Begin
      With PopupMenul do
      For I:=1 do
      AppendMenu(getsystemmenu(self,handle,false),mf-popup,items[I],handle,pchar(items[I],caption));
      在变量中添加:Var I:Integer;
      编译运行后就会看到系统菜单中多了[新建]和[保存]两项。
      下面我们来完成系统菜单项的响应。在Tform1的类定义中的Public部分插入如下代码:
      Procedure WMSysCommand(var Msg:Tmessage);
      message WM-SysCommand;
      其中WMSysCommand为用户定义的响应函数。
      Procedure WMSysCommand(var Msg:Tmessage);
      Var
      Item:Tmenuitem;
      Begin
      Inherited;
      Item:=popupmenu1.Finditem(msg.wparam,fkcommand);
      If not(item=nil) then
      Item.click;
      End
      这样,系统菜单项就可以调用原有菜单项的click函数。
      

  4.   

    BOOL TrackPopupMenu(
      HMENU hMenu,         // handle to shortcut menu
      UINT uFlags,         // options
      int x,               // horizontal position
      int y,               // vertical position
      int nReserved,       // reserved, must be zero
      HWND hWnd,           // 把窗体的handle传递给这个参数
      CONST RECT *prcRect  // ignored
      

  5.   

    BOOL TrackPopupMenu(
      HMENU hMenu,         // handle to shortcut menu
      UINT uFlags,         // options
      int x,               // horizontal position
      int y,               // vertical position
      int nReserved,       // reserved, must be zero
      HWND hWnd,           // 把窗体的handle传递给这个参数
      CONST RECT *prcRect  // ignored
      

  6.   

    TrackPopupMenu想窗体发送的是WM_COMMAND 并不是WM_SYSTCOMMAND虽然你弹出的是系统彩旦