当子窗体在 Delphi 中可见时,如何防止父窗体中的操作执行

2023-12-23

我有一个主窗体和一个非模态的浮动子窗体。主窗体有一个名为DeleteAction 的TAction,其快捷方式为Delete。当浮动窗体可见并且按下删除键时,将执行主窗体的DeleteAction。

如何防止快捷方式通过子窗体传递到父窗体?我可以验证子表单在删除操作的 OnExecute 处理程序或操作的 ActionManager 的 OnUpdate 处理程序中没有焦点,但我还有很多其他操作,也必须为它们复制此解决方案。我还有其他可见的浮动形式。

这是使用 Delphi 2010。


这是我使用的解决方案:

type
  TMyMainForm = class(TForm)
  ...
  public
    function IsShortCut(var Message: TWMKey): Boolean; override;
  end;

function TMyMainForm.IsShortCut(var Message: TWMKey): Boolean;
begin
  // Work around to avoid main form stealing shortcuts from active, non-modal forms.
  if (Screen.ActiveForm <> nil) and (Screen.ActiveForm <> Self) then
    Result := Screen.ActiveForm.IsShortCut(Message)
  else
    Result := inherited;
end;

这适用于聚焦控件直接或间接由活动窗体拥有的所有情况。

有一种罕见的特殊情况,上面没有处理。例如,如果 DevExpress TcxPopupEdit 控件的 popupcontrol 没有所有者,则它不起作用,因为从活动表单到活动控件的所有者链已“损坏”。我通常在 TAc​​tion.OnUpdate 处理程序中逐案处理:

procedure TMyMainForm.ActionSomeThingUpdate(Sender: TObject);
begin
  TAction(Sender).Enabled := (SomeThingSomeThing) and
    // Prevent action from stealing shortcut from edit fields on non-modal forms
    (Screen.ActiveForm is TWhatEverFormThisActionAppliesTo);
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当子窗体在 Delphi 中可见时,如何防止父窗体中的操作执行 的相关文章

  • 如何解决内存分段并强制FastMM释放内存给OS?

    注意 32 位应用程序不计划迁移到 64 位 我正在使用一个非常消耗内存的应用程序 并且几乎优化了与内存分配 取消分配相关的所有相关路径 应用程序本身没有内存泄漏 没有句柄泄漏 没有任何其他类型的泄漏 据我所知并经过测试 我无法触及的第 3
  • delphi检查ini文件是否存在

    如何检查 INI 文件是否存在 在特定路径和特定名称下 比如这样 if FileExists c yourinifile ini then ShowMessage c yourinifile ini exists
  • 是否有适用于 >= Delphi 2007 的 Delphi 混淆器

    我曾经使用 Pythia 来混淆我的 D6 程序 但 Pythia 似乎不再适用于我的 D2007 这是 Pythia 的链接 自 2007 年初以来没有更新 http www the interweb com serendipity in
  • 在 Inno Setup 中使用 StringToColor

    我想为表单上的标签 TNewStaticText 属性颜色 TColor 读写 分配一些颜色 我将颜色存储为 RRGGBB 字符串 我想使用 Delphi 函数 StringToColor 将其转换为 TColor 但如果我在脚本中使用此函
  • Delphi - 通过 ADO 查询获取 Excel 行

    我有以下 Excel 文件 我将 AdoConnection ConnectionString 设置为 AdoConnection ConnectionString Provider Microsoft Jet OLEDB 4 0 Data
  • 如何更改 Delphi 2010 IDE 中编辑器选项卡的字体大小?

    有谁知道如何更改 Delphi 2010 IDE 中编辑器选项卡的字体大小 我的 1080p 22 显示器的字体太小 无法阅读 而且会导致眼睛疼痛 一些笔记 它不尊重系统的 DPI 设置 因此更改系统设置没有帮助 而且 我现在已经使用 14
  • 递归遍历树视图中的节点?

    我有一个树视图 其中已经填充了另一个过程中的文件 文件夹 我想按照从上到下的确切顺序逐项迭代树视图中的项目 但是 与普通列表不同 我不能仅使用简单的for对此的声明 我必须进入每个节点等 我该怎么做呢 我希望有一种方法可以在不运行递归过程的
  • 开源 Delphi 包可使用哪些项目选项?

    我写了一些 Delphi 代码 想在 GitHub 上分享 所有代码都根据需要包含在运行时和设计时包中 每个项目有许多项目选项需要设置 输出目录 搜索路径 编译选项等 我设法找到了一些适合我的情况的默认选项 但阅读此处的其他问答很明显有多个
  • 当显示对话框时淡出应用程序的所有其他窗口?

    如何在 Delphi 2009 中调暗 淡出应用程序的所有其他窗口 Form 有一个 AlphaBlend 属性 但它仅控制透明度级别 但如果我们能有这样的东西那就太好了 集中窗口 http www anappaday com downlo
  • Async InputQuery 不处理“取消”按钮

    我正在使用一个简单的调用TDialogServiceAsync InputQuery 使用单个输入 它只是忽略了Cancel按钮和窗口的X关闭按钮 But the Ok按钮工作正常 这是我的代码 uses FMX DialogService
  • 使用 OLE 和 Delphi 提高 Word 文档中搜索替换的性能

    经过一些实验 我最终得到了以下代码来在 MSWord 中执行搜索和替换 此代码在页眉和页脚中也能完美运行 包括首页或奇数 偶数页的页眉和 或页脚不同的情况 问题是我需要打电话MSWordSearchAndReplaceInAllDocume
  • Delphi - 在修复 VCL 错误时,单元 x 是用不同版本的 x 编译的

    我正在使用 Delphi XE6 并在我的项目中使用 Datasnap 和 JSON 我想纠正 VCL 单元 System JSON pas 在 TJSONString ToString 函数中 中的一个错误 它应该转义反斜杠字符和引号 为
  • Delphi 返回 TList 时出错

    我做了一个非常简单的应用程序 但我有一个我真的无法理解的问题 看一下这个基本代码 unit Unit1 interface uses Winapi Windows Winapi Messages System SysUtils System
  • 如何在调试器中显示 TStringList 的内容?

    我想在调试应用程序时显示 TStringList 的全部内容 相反 我只是得到指示 Flist 仅显示地址 如果您使用的是 Delphi 2010 或更高版本 调试器允许使用调试可视化工具 http docwiki embarcadero
  • delphi中如何实现多重继承?

    我正在对一个旧库进行完全重写 我不确定如何处理这种情况 为了便于理解 大家都欢呼自行车类比 我有以下课程 TBike 自行车本身 TBikeWheel 自行车的一个轮子 TBikeWheelFront and TBikeWheelBack
  • TObjectList.Contains 导致 Delphi 2009 中的访问冲突

    在 Delphi 2009 中 到目前为止 我在泛型方面没有遇到大问题 使用 Generics Collections 列表 没有特殊的泛型功能 现在我发现这段代码会在访问的行中导致AVMyList Contains 如果我声明 TMyLi
  • Delphi IDE导致CPU过热

    我正在使用 Delphi 7 但我已经尝试过 Delphi 2005 2010 版本 在所有这些新版本中 当 Delphi IDE 在屏幕上可见时 我的 CPU 利用率为 50 一个核心为 100 另一个核心为 宽松 当 IDE 最小化时
  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移
  • 在 Delphi 中编程延迟的最佳方法是什么?

    我正在开发的 Delphi 应用程序必须延迟一秒 有时甚至两秒 我想使用最佳实践来对此延迟进行编程 在阅读 stackoverflow 上有关 Delphi Sleep 方法的条目时 我发现了以下两条评论 我遵循这样的格言 如果你觉得需要使
  • 如何调试仅在应用程序关闭时发生的崩溃? (德尔福)

    因此 经过最近的一些更改 我们发现我们最古老的应用程序之一有时会在关闭时崩溃 这会以 运行时错误 216 消息的形式或来自 Windows 错误报告的消息的形式表明应用程序已停止工作 该应用程序已经发出OutputDebugString 每

随机推荐

  • 是否有一个 .Net 类可以执行 ManualResetEvent.PulseAll() 会执行的操作(如果存在)?

    是否有 Net 类可以做什么ManualResetEvent PulseAll 会做 如果存在的话 我需要自动释放一组正在等待同一信号的线程 对于我的预期用途 我并不担心 线程踩踏 您不能使用ManualResetEvent去做这个 例如
  • 如何为 Ironpython27 安装 numpy 和 scipy?

    我认为这是以前最流行的方法 https pytools codeplex com wikipage title NumPy 20and 20SciPy 20for 20 Net https pytools codeplex com wiki
  • echoscu 中调用 AE 标题无法识别错误

    我试图测试 dcmqrscp 的连接性 我使用以下命令来启动 dcmqrscp dcmqrscp config C Dicom config dcmqrscp cfg 请找到我使用的以下配置文件 NetworkTCPPort 11113 M
  • IE11 中的 Angular 4 错误

    我的 Angular 4 项目可以在 Chrome 上成功运行 但是它不会在 IE11 上加载 并在 polyfills bundle js 中出现以下错误 我使用命令 ng build env prod 来构建网站 var exports
  • 如何使用 jQuery 选择空输入 (value="")

    如何检查 required 在一个部分中输入字段 然后使用 jQuery 在事件中向它们添加一个类 到目前为止 我已经尝试过 jQuery sender container input required val addClass error
  • 了解 Scrapy 中的回调

    我是 Python 和 Scrapy 的新手 我以前没有使用过回调函数 但是 我现在执行以下代码 第一个请求将被执行 其响应将被发送到定义为第二个参数的回调函数 def parse page1 self response item MyIt
  • 无限递归别名“cd”

    我想记录一下我最近的状态cd跨越我的任何一台终端 我认为一个好方法是编写一个简单的 bash 脚本包装cd bin bash cd 1 echo pwd gt tmp cwd 既然我想要cd要发生在我的终端进程中 我需要运行脚本 bette
  • 使用 SendMessage 拖放

    这听起来很有趣 只是一个小实验 我想使用发送消息模拟文件在应用程序 窗口上的拖放 是否可以 我没有该应用程序的代码 但有可执行文件的代码 该应用程序是IP 信使 http www ipmsg org index html en 我想做的是使
  • 如何快速修复导航栏的透明度?

    我有透明的导航栏 带有用于视图控制器的背景图像 但是当我向导航栏添加栏按钮项目时 它变得像第二张图片中那样 如何让栏按钮项目也完全透明的导航栏 我使用下面的这些代码使导航栏透明 extension UINavigationControlle
  • IntelliJ 的选择字体对话框中没有出现字体

    我用这个安装了 Monaco 字体code https gist github com rogerleite 99819 然而 它并没有出现在Setting gt Editor gt Color and fonts gt Font 我应该怎
  • 如何在Windows Azure中使用子域?

    我目前已将 domain com 分配给我的 azure 网站 但我想知道使用子域需要什么 我想我需要在 godaddy 创建一个 CNAME 但我要指出什么呢 每个子域如何指向我的解决方案中的每个文件夹 为此我需要网络角色吗 我不知道如何
  • 64位类型和操作是如何在32位架构的最低层实现的?

    像 int64 t 这样的类型如何在最低 即汇编级别 上实现 我使用的是 32 位机器 但仍然可以使用 int64 t 例如 我最初的假设是 64 位只是模拟的 因此在 32 位机器上与 32 位数据类型相比 这些类型的计算必须有相当多的开
  • 在 Swift 中将 NSUnderlineStyle.PatternDash 添加到 NSAttributedString 中?

    我正在尝试为 Swift 应用程序中的某些文本添加下划线 这是我目前拥有的代码 let text NSMutableAttributedString string self currentHome name let attrs NSUnde
  • TSQL问题计算一个表中两个日期之间的差异

    在 MSSQL 2008 中 我的表和数据如下所示 create table tempData user id int type varchar 10 ts datetime insert into tempData select 1 EN
  • 如何正确使用goto语句

    我正在上高中 AP 计算机科学课程 我决定扔一个goto声明进入我们的一个实验室只是为了玩玩 但我得到了这个错误 Exception in thread main java lang Error Unresolved compilation
  • 在发布时替换 ASP.NET Core 与 2017 中的 web.config

    我正在尝试将 web config 替换为生产版本 我有生产版本 production web config tilda 作为我的项目文件夹的根 我在迁移文档中找到了这个
  • (Postgresql 中的一对多关系

    我有两张桌子 posts id other stuff tags 1
  • 在 PHP 5.4.0 之前版本的匿名函数中使用 `$this`

    PHP 手册指出 无法使用 this来自 PHP 之前的匿名函数 5 4 0 on the 匿名函数页面 http php net manual en functions anonymous php 但我发现我可以通过分配使其工作 this
  • 从字符串中删除特定单词

    我正在通过 JSON 提取 Twitter 用户的个人资料图像 为此我的代码是 x gt profile image url 返回个人资料图像的 url url 的格式可能是 xyz normal jpg or xyz normal png
  • 当子窗体在 Delphi 中可见时,如何防止父窗体中的操作执行

    我有一个主窗体和一个非模态的浮动子窗体 主窗体有一个名为DeleteAction 的TAction 其快捷方式为Delete 当浮动窗体可见并且按下删除键时 将执行主窗体的DeleteAction 如何防止快捷方式通过子窗体传递到父窗体 我