GVKun编程网logo

delphi – 如何在不关闭菜单的情况下选择菜单项?(delphi 关闭窗口)

22

在本文中,我们将带你了解delphi–如何在不关闭菜单的情况下选择菜单项?在这篇文章中,我们将为您详细介绍delphi–如何在不关闭菜单的情况下选择菜单项?的方方面面,并解答delphi关闭窗口常见的

在本文中,我们将带你了解delphi – 如何在不关闭菜单的情况下选择菜单项?在这篇文章中,我们将为您详细介绍delphi – 如何在不关闭菜单的情况下选择菜单项?的方方面面,并解答delphi 关闭窗口常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的android – 如何在不影响其弹出菜单的情况下为微调器添加边框、bash – 如何在不关闭xterm的情况下捕获SIGINT?、css – 如何在不知道父元素的情况下选择第n个孩子?、Delphi Edit右键系统菜单加自定义菜单项

本文目录一览:

delphi – 如何在不关闭菜单的情况下选择菜单项?(delphi 关闭窗口)

delphi – 如何在不关闭菜单的情况下选择菜单项?(delphi 关闭窗口)

默认情况下,当您从TMainMenu或TPopupMenu等选择一个项目时,该菜单在单击后关闭。我想改变这个行为,所以当我在菜单项上选择时,菜单不会关闭,但是在最后一次点击时保持可见和打开状态,如果需要,更容易选择另一个菜单项。当然,将焦点切换到另一个控件应该像常规一样隐藏菜单,但是如果焦点仍然在菜单上保持可见。

如果可能,我希望这个行为只能在指定的菜单项上工作。换句话说,如果我可以使所有的菜单项正常工作,但如果我指定一个或两个菜单项,这些将不会在选择时关闭菜单。

我想这样做的原因就是这样,我的应用程序中有一个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 – 如何在不影响其弹出菜单的情况下为微调器添加边框

android – 如何在不影响其弹出菜单的情况下为微调器添加边框

我正在尝试为我的纺纱厂添加边框.

这是我到目前为止所做的:

在我的styles.xml中:

bash – 如何在不关闭xterm的情况下捕获SIGINT?

bash – 如何在不关闭xterm的情况下捕获SIGINT?

这是我的剧本;

#!/bin/bash
trap '' SIGINT
xterm  &
wait

我运行它并弹出一个xterm.然后我将键盘对准原始终端窗口并点击^ C.我不希望发生任何事情,但孩子xterm消失了.

(理想情况下,我想安装自己的陷阱处理程序,但这是一个小步骤)

在分支后使用disown xterm从父进程中分离xterm,然后^ C对xterm没有任何作用,但是等待不起作用.

我只是想阻止SIGINT进入xterm.

解决方法

当您将SIGINT发送到bash脚本时,信号将传播到脚本中的当前进程,然后它会在陷阱中执行命令.所以“等待”被打断了.你必须再次“等待”运行.

此外,您必须执行所有作业在其自己的进程组(set -m)中启动.从设置手册页:

set -m

Monitor mode. Job control is enabled. This option is on by default for interactive shells on systems that support it (see JOB
CONTROL above). Background processes run in a
separate process group and a line containing their exit status is printed upon their completion.

#!/bin/bash
set -m
trap 'R=true' SIGINT
xterm &
while : ; do
    R=false
    wait
   [[ $R == true ]] || break
done

您可以在shebang中看到它使用’-x’选项运行的命令.

css – 如何在不知道父元素的情况下选择第n个孩子?

css – 如何在不知道父元素的情况下选择第n个孩子?

在我不知道父元素的情况下,我无法想出选择第n个元素,最后一个元素或第一个元素的方法. nth-child存在,但仅限于儿童,例如:
<div>
   <p>One</p>
   <p>Two</p>
</div>

p:last-child选择“Two”段,p:first-child选择“One”段落.但是,当我有动态代码并且不知道父名称是什么,甚至是父母的真实情况(可能是div,span,anchor,ul等)时呢?

例如:

<youdontkNowwhat!>
   <p>One</p>
   <p>Two</p>
</youdontkNowwhat!>

我如何在这里选择第二段? (我无法选择你不知道的东西!因为我真的不知道它是什么元素(它只是一个假设的名字).

为什么有第一个孩子,最后一个孩子和第n个孩子的选择器和NO:第一个,:last,:nth(比如.select-me:first)?

解决方法

How would :first be different from :first-child? Every HTML element is a child of some other element in the DOM except <html> which is the root element. – BoltClock

It’d be since you don’t kNow the parent element. – fomicz

您不需要知道父元素:first-child或:nth-​​child().即使您没有指定父元素,它们也会正常工作.

保证以下选择器匹配任何适当的.select-me元素,无论其父元素是什么:

.select-me:nth-child(2)

Delphi Edit右键系统菜单加自定义菜单项

Delphi Edit右键系统菜单加自定义菜单项

总结

以上是小编为你收集整理的Delphi Edit右键系统菜单加自定义菜单项全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

今天关于delphi – 如何在不关闭菜单的情况下选择菜单项?delphi 关闭窗口的讲解已经结束,谢谢您的阅读,如果想了解更多关于android – 如何在不影响其弹出菜单的情况下为微调器添加边框、bash – 如何在不关闭xterm的情况下捕获SIGINT?、css – 如何在不知道父元素的情况下选择第n个孩子?、Delphi Edit右键系统菜单加自定义菜单项的相关知识,请在本站搜索。

本文标签: