Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改Delphi DFM资源以在显示时关闭?_Delphi_Modal Dialog_Reverse Engineering_Dfm - Fatal编程技术网

修改Delphi DFM资源以在显示时关闭?

修改Delphi DFM资源以在显示时关闭?,delphi,modal-dialog,reverse-engineering,dfm,Delphi,Modal Dialog,Reverse Engineering,Dfm,是否可以编辑DFM(Delphi的表单脚本格式),使表单在显示时自动关闭 我不使用Delphi编写代码,因此我不熟悉这些表单的工作方式,但我似乎可以在表单的OnShow或OnCreate事件中添加代码(但不是标准的Delphi代码)。但是,在尝试了Close、Exit、FormNameExit、Destroy等语句之后,将无法工作(将创建一个日志,说明OnShow属性的值无效等错误) 关闭表单的正常方式是通过按钮,但按钮没有OnClick事件,只有一个属性“ModalResult=1” 是否有一

是否可以编辑DFM(Delphi的表单脚本格式),使表单在显示时自动关闭

我不使用Delphi编写代码,因此我不熟悉这些表单的工作方式,但我似乎可以在表单的OnShow或OnCreate事件中添加代码(但不是标准的Delphi代码)。但是,在尝试了Close、Exit、FormNameExit、Destroy等语句之后,将无法工作(将创建一个日志,说明OnShow属性的值无效等错误)

关闭表单的正常方式是通过按钮,但按钮没有OnClick事件,只有一个属性“ModalResult=1

是否有一种方法可以使窗口在打开时关闭,我可以在表单的OnCreate或OnShow事件上使用一些标准函数?或者,在表单本身上创建一个复选框,使ModalResult=1?(不知道这是否有效)

谢谢你的建议
=)


(注意:可能很明显,但我没有来源。)

不在DFM中。您必须修改源。

不在DFM中。您必须修改源代码。

您看到的OnShow和OnCreate行仅用于提供源代码中已定义的方法的名称。您根本无法通过修改DFM文件来添加太多功能

也许表单已经有了一个匹配的事件处理程序来关闭它:可能是关闭按钮或菜单项的OnClick处理程序?如果是这样,您可以尝试将其设置为OnShow或OnCreate处理程序

您可能可以向表单中添加一个TButton并设置其ModalResult--我不记得您是否真的需要在form类中为DFM中的每个控件指定一个字段--但只有当表单以模态方式显示时,这才有效,您仍然需要单击它来关闭表单。

您看到的OnShow和OnCreate行仅用于提供源代码中已定义的方法的名称。您根本无法通过修改DFM文件来添加太多功能

也许表单已经有了一个匹配的事件处理程序来关闭它:可能是关闭按钮或菜单项的OnClick处理程序?如果是这样,您可以尝试将其设置为OnShow或OnCreate处理程序


您可能可以向表单中添加一个TButton并设置其ModalResult--我不记得您是否真的需要在form类中为DFM中的每个控件指定一个字段--但只有当表单以模态方式显示时,这才有效,您仍然需要单击它来关闭表单。

编辑:看到您在我键入文本墙时添加的一些注释,这会稍微澄清一些问题

我猜您正在使用资源编辑器编辑DFM并修改应用程序的行为,而不实际接触源代码

在这种情况下,最好将
Visible
属性设置为
False
。但是,如果开发人员“在代码中主动显示表单”,这将没有任何好处。(他可以通过调用
Show
showmodel
或者甚至通过显式设置
Visible
属性来实现这一点。)

不幸的是,如果是这种情况,那么如果不修改实际的源代码,您将无能为力。这是因为DFM是在加载表单时处理的;i、 e.在显示表单的开发人员代码之前。甚至找一个地方来设置
ModalResult
也没有用,因为调用
showmodel
时,当前的
ModalResult
会被清除

我想我不太明白你想做什么,因为这毫无意义。
在我看来,您希望表单一显示就自动关闭;这是没有道理的S
所以,如果我理解正确的话,请解释一下你为什么要这样做;对于您的实际问题,可能有更好的解决方案

然而,一些一般概念

  • 如果要关闭表单,应将其链接到关闭表单的某个操作。在窗体上放置按钮或菜单项
  • 默认情况下,标准窗体有一个标准的Windows机制来关闭它们。(即右上角的X。)
  • 有两种方式显示表单,显示表单的方式确实会影响表单的关闭方式。它可以以模式显示(这意味着它是将与用户交互的应用程序的唯一形式),也可以正常显示(允许用户在应用程序的其他形式之间切换)。
    • 以模式显示表单的意义在于,它会阻止代码流,直到用户完成所需的操作;它通常涉及用户提供某种形式的回答或确认
    • 当以模式显示时,窗体应该用
      ModalResult
      关闭
    • 正常显示时,
      ModalResult
      无效
  • 每当一个表单被“关闭”时,有几种方法可以做到这一点。
    • 形式可以简单地隐藏;它还在那里,但看不见。下次要显示表单时,只需再次使其可见即可
    • 形式可以被破坏;这意味着它不再存在于记忆中。如果这样做了,那么下次要使用表单时,必须重新创建表单
    • 可以主动阻止关闭表单的尝试(通常不建议;但在特定情况下可能是必要的-例如,如果表单上的某些信息不正确)
    • 表单可以简单地最小化(这通常是通过MDI子表单实现的)
  • 注意:表单上还有许多属性(
    FormStyle
    是最重要的属性),它们对表单的行为、显示和关闭方式有影响。(例如,默认情况下,MDI子表单在关闭时将最小化或不执行任何操作。)
  • NB:如果申请的主要形式是