如果你对菜单一定要上拉,如windows的菜单一样,你可以在ToolBar工具条内加一个ToolButton(按右键便有一个菜单出现,选添加ToolButton即可),双击此按钮编辑事件,在事件中写入 TrackPopupMenu(YourMenuItem.Handle,TPM_LEFTALIGN,MenuBox.Left+self.Left,MenuBox.Bottom-2+self.Top,0,Handle,nil);此函数可按指定位置显示菜单,但你不能再检测到菜单的事件,因而你要重载WM_Common消息。示例如下: If not Assigned(Menu) Then Exit; TrackMenu(Menu.Items[HitMenuItem],msg.ItemID);
trackMenu函数如下所示: procedure TfmtBase.TrackMenu(aitem:TMenuItem;comm:WORD); var i:integer; Begin For i:=0 To aItem.Count-1 Do Begin If aItem[i].Command=comm Then If @aItem.Items[i].OnClick<>nil Then Begin aItem.Items[i].OnClick(aItem.Items[i]);Break; End; TrackMenu(aItem[i],comm); End; End; 一切OK,祝好运
如果你对菜单一定要上拉,如windows的菜单一样,你可以在ToolBar工具条内加一个ToolButton(按右键便有一个菜单出现,选添加ToolButton即可),双击此按钮编辑事件,在事件中写入 TrackPopupMenu(YourMenuItem.Handle,TPM_LEFTALIGN,MenuBox.Left+self.Left,MenuBox.Bottom-2+self.Top,0,Handle,nil);此函数可按指定位置显示菜单,但你不能再检测到菜单的事件,因而你要重载WM_Common消息。示例如下: If not Assigned(Menu) Then Exit; TrackMenu(Menu.Items[HitMenuItem],msg.ItemID);
trackMenu函数如下所示: procedure TfmtBase.TrackMenu(aitem:TMenuItem;comm:WORD); var i:integer; Begin For i:=0 To aItem.Count-1 Do Begin If aItem[i].Command=comm Then If @aItem.Items[i].OnClick<>nil Then Begin aItem.Items[i].OnClick(aItem.Items[i]);Break; End; TrackMenu(aItem[i],comm); End; End; 一切OK,祝好运