Bug 1. 当从特定打印机表单点击“确定”时。
- 我打开一个FastReports PDF预览 - 这是第一个弹出窗口。这个窗口没有在任务栏中单独显示。这个窗体是模态的。
- 然后我点击打印,
- 那会打开另一个具有标准打印选项的窗口。
- 然后我点击属性 - 这将打开驱动程序的特定表单。我更改了双重打印设置。
- 当我点击“确定”时,预览窗体(1)应该获得焦点,但是主窗体被带到前面。因为预览窗体仍然是模态的,所以很难回到预览窗体。只有通过随机点击,才能再次将预览窗体聚焦。
问题2. 点击或拖动此特定滚动框会将主窗体聚焦
- 此窗口处于活动状态。这是Windows任务栏中的一个分离窗口,不是模态的。在此表单上有一个gnostice pdf阅读器。
- 当我点击滚动框开始拖动时,主窗体被置于前台。当我继续拖动时,pdf表单上的滚动仍然继续。此外,鼠标附近的工具提示显示当前显示的页面。
什么可能导致这些聚焦错误?
关于应用程序:
- 我已经注意到:弹出窗口的表单似乎有点太大了,你可以在这里看到:
![form seems to large](https://istack.dev59.com/IVHBN.webp)
除了主表单之外的所有其他表单,都是由应用程序而不是登录表单所拥有的。确切地说,它们不是父级,而是所有者,就像@uwe-raabe所说的那样。
然后创建主表单。这是通过登录表单创建的:
Frm_DatabaseLogin.CreateForm(TFrm_MainMenu, Frm_MainMenu);
那调用:
procedure TFrm_DataBaseLogin.CreateForm(InstanceClass: TComponentClass;
var Reference);
begin
Updateprogress(InstanceClass.ClassName);
Application.CreateForm(InstanceClass,Reference);
end;
在UpdateProgress中,没有什么特别的事情发生。
之后,其他窗体也被创建,由应用程序拥有。最后,登录窗体隐藏,因此显示主窗体。
TWinControl.SetZOrderPosition
、TWinControl.WMSetFocus
和TCustomForm.WMActivate
。在例如WMSetFocus
中使用 实际中断 的断点可能会改变执行,因为应用程序和 IDE 之间的焦点更改会发生。对于WMSetFocus
和SetZOrderPosition
,我会使用断点条件,比如Self is TCustomForm
。 - nil