在本文中,我们将带你了解delphi–如何在不关闭菜单的情况下选择菜单项?在这篇文章中,我们将为您详细介绍delphi–如何在不关闭菜单的情况下选择菜单项?的方方面面,并解答delphi关闭窗口常见的
在本文中,我们将带你了解delphi – 如何在不关闭菜单的情况下选择菜单项?在这篇文章中,我们将为您详细介绍delphi – 如何在不关闭菜单的情况下选择菜单项?的方方面面,并解答delphi 关闭窗口常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的android – 如何在不影响其弹出菜单的情况下为微调器添加边框、bash – 如何在不关闭xterm的情况下捕获SIGINT?、css – 如何在不知道父元素的情况下选择第n个孩子?、Delphi Edit右键系统菜单加自定义菜单项。
本文目录一览:- delphi – 如何在不关闭菜单的情况下选择菜单项?(delphi 关闭窗口)
- android – 如何在不影响其弹出菜单的情况下为微调器添加边框
- bash – 如何在不关闭xterm的情况下捕获SIGINT?
- css – 如何在不知道父元素的情况下选择第n个孩子?
- Delphi Edit右键系统菜单加自定义菜单项
delphi – 如何在不关闭菜单的情况下选择菜单项?(delphi 关闭窗口)
如果可能,我希望这个行为只能在指定的菜单项上工作。换句话说,如果我可以使所有的菜单项正常工作,但如果我指定一个或两个菜单项,这些将不会在选择时关闭菜单。
我想这样做的原因就是这样,我的应用程序中有一个Preferences表单,可以配置很多选项,通常的东西等等,而且在主窗体中我有一些常用的更常用的选项设置在TMainMenu。我的菜单中的这些常见选项,我希望能够选择而不关闭菜单,以便可以选择其他选项,而无需浏览菜单项。
有没有一个标准化的方法实现这一点?
谢谢
克雷格。
解决方法
弹出窗口是以“TrackPopupMenu”启动的,如果您想使用“OnPopup”事件,或需要使用具有非关闭项目的子菜单,请参阅我发布到您的问题的评论中的链接。适应主菜单的代码也不难。
我没有评论代码不推广使用方法,因为它使用了一个未记录的消息,我也觉得这有点复杂..
unit Unit1; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,Menus,ExtCtrls; type TForm1 = class(TForm) PopupMenu1: TPopupMenu; Item1normal1: TMenuItem; Item2NoClose1: TMenuItem; Item3NoClose1: TMenuItem; Panel1: TPanel; procedure Panel1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); private fgetPopupWindowHandle: Boolean; FPopupWindowHandle: HWND; OrgPopupWindowProc,HookedPopupWindowProc: Pointer; FSelectedItemID: UINT; procedure WmInitMenuPopup(var Msg: TWMInitMenuPopup); message WM_INITMENUPOPUP; procedure WmEnterIdle(var Msg: TWMEnterIdle); message WM_ENTERIDLE; procedure WmMenuSelect(var Msg: TWMMenuSelect); message WM_MENUSELECT; procedure PopupWindowProc(var Msg: TMessage); procedure MenuSelectPos(Menu: TMenu; ItemPos: UINT; out CanClose: Boolean); procedure MenuSelectID(Menu: TMenu; ItemID: UINT; out CanClose: Boolean); public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Panel1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); var Pt: TPoint; begin Pt := (Sender as TPanel).ClientToScreen(MousePos); TrackPopupMenu(PopupMenu1.Handle,Pt.X,Pt.Y,Handle,nil); end; procedure TForm1.WmInitMenuPopup(var Msg: TWMInitMenuPopup); begin inherited; if Msg.MenuPopup = PopupMenu1.Handle then fgetPopupWindowHandle := True; end; procedure TForm1.WmEnterIdle(var Msg: TWMEnterIdle); begin inherited; if fgetPopupWindowHandle then begin fgetPopupWindowHandle := False; FPopupWindowHandle := Msg.IdleWnd; HookedPopupWindowProc := classes.MakeObjectInstance(PopupWindowProc); OrgPopupWindowProc := Pointer(getwindowlong(FPopupWindowHandle,GWL_WNDPROC)); SetwindowLong(FPopupWindowHandle,GWL_WNDPROC,Longint(HookedPopupWindowProc)); end; end; procedure TForm1.WmMenuSelect(var Msg: TWMMenuSelect); begin inherited; if Msg.Menu = PopupMenu1.Handle then FSelectedItemID := Msg.IDItem; end; const MN_BUTTONDOWN = $01ED; procedure TForm1.PopupWindowProc(var Msg: TMessage); var normalItem: Boolean; begin case Msg.Msg of MN_BUTTONDOWN: begin MenuSelectPos(PopupMenu1,UINT(Msg.WParamLo),normalItem); if not normalItem then Exit; end; WM_KEYDOWN: if Msg.WParam = VK_RETURN then begin MenuSelectID(PopupMenu1,FSelectedItemID,normalItem); if not normalItem then Exit; end; WM_DESTROY: begin SetwindowLong(FPopupWindowHandle,Longint(OrgPopupWindowProc)); classes.FreeObjectInstance(HookedPopupWindowProc); end; end; Msg.Result := CallWindowProc(OrgPopupWindowProc,FPopupWindowHandle,Msg.Msg,Msg.WParam,Msg.LParam); end; procedure TForm1.MenuSelectID(Menu: TMenu; ItemID: UINT; out CanClose: Boolean); var Item: TMenuItem; begin CanClose := True; Item := Menu.FindItem(ItemID,fkCommand); if Assigned(Item) then begin // Menu Item is clicked Item.Click; // Panel1.Caption := Item.Name; CanClose := Item = Item1normal1; end; end; procedure TForm1.MenuSelectPos(Menu: TMenu; ItemPos: UINT; out CanClose: Boolean); begin MenuSelectID(Menu,GetMenuItemID(Menu.Handle,ItemPos),CanClose); end; end.
android – 如何在不影响其弹出菜单的情况下为微调器添加边框
我正在尝试为我的纺纱厂添加边框.
这是我到目前为止所做的:
在我的styles.xml中:
spinner_border.xml
如果没有更改,弹出菜单的外观如下:
更改后,微调器有边框
但弹出菜单也有边框,这不是我想要的.
如何在不影响弹出菜单的情况下为微调器添加边框?
谢谢.
android:popupBackground="@android:color/transparent"
到你的< Spinner />在xml中查看
总结
以上是小编为你收集整理的android – 如何在不影响其弹出菜单的情况下为微调器添加边框全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。