【发布时间】:2021-02-17 16:47:30
【问题描述】:
假设我的程序的一个实例正在运行。它打开了“File1.My”(不管是什么)。
现在用户双击 WinExplorer 'File2.My'。 “我的”扩展与我的程序相关联,因此将启动第二个实例。我使用 WMCOPYDATA 将文件名('File2')从第二个实例传递给第一个实例。第一个实例将接收文件名加载该文件。第二个实例将自行关闭。
我的问题是 WMCOPYDATA 消息可能会出现,而第一个实例显示一个对话框,如“您确定要将 File1 保存到磁盘吗?”。
当消息到达时,第一个实例将加载 File2而屏幕上显示 dlg 框询问“File1”。
那么,我该如何处理呢?
- 也许通过将 Load(File2) 放入我在对话框关闭后处理的队列中?
- 或者我应该在打开模式对话框时从消息队列中过滤 WMCopyData?
- 使用某种标志:如果 WMCopyDataReceived_Flag 然后 Abort_current_code_after_the_dlgbox
这三个似乎都比必要的复杂。
【问题讨论】:
-
用户打开了第二个文件并期待发生一些事情。如果什么都没做,他们可能会再打开几次,想知道发生了什么。做什么取决于您的应用程序是否可以同时打开多个文件 - 在另一个选项卡中打开 file2 在当今的许多应用程序中很常见。
-
@Brian-Nope。一次只能打开一个文件至关重要!
-
@Brian - 如果文件无法打开,则会向第二个实例发送一条消息,让用户知道。
-
“只有一个实例”的方法有几个缺点,最大的缺点是:当您认为实例已终止但继续运行数小时(直到您检查任务人员)并且您尝试启动一个(即通过双击一个文件)似乎什么都没有发生。一次又一次。
-
那么您应该在 UI 执行不允许加载新文件的操作时关闭 WMCOPYDATA 消息...这将需要您设置一些标志来检测是否...。
标签: delphi message-queue message