我有一个在主窗体上一个TPageControl的应用程序。 该的PageControl有几个标签。 该应用程序可以被最小化到一个托盘图标。 最小化运行了一段时间后,有时,当我恢复主窗口(通过鼠标右键点击系统托盘图标),显示这是最后显示的标签,但我不能选择其它任何标签!
如果我单击另一个选项卡上,外观上的变化,使选项卡,然后似乎是一个积极的(即标签自身移动到标签行的前面),但该选项卡的身体保持原样。 我也有菜单项和快捷键选择其他选项卡,它们具有相同的行为。 如果我按Alt-O(选项)顶部的选项标签被激活,但我不能看到什么是对标签的身体 - 我仍然看到其他选项卡的内容。
我已经验证了焦点,当我点击其他选项卡,移回当我点击该选项卡上移开第一个标签。
我如果行为被限制在一个特定的标签,因为它需要一段时间,它的出现还没有建立。
有任何想法吗?
更新
有趣的说明。 我已经确定,在这种情况下出现问题。 该应用程序已启动,然后最小化到托盘。 警报条件被检测到,弹出一个窗口,并恢复主窗口(这是为了该应用的行为)。 正是在这点故障被发现 - 也就是我看不到其他选项卡,当我点击它们。
- 启动应用程序。 标签1显示
- 最小化应用程序。 到托盘
- 等待弹出显示,主要形式恢复
- 点击选项卡2 FAULT观测结果(表2的身体不显示)
- 把断点TWinControl.CreateHandle
- 点击选项卡3 - 休息
- 运行 - 不显示标签3体
- 点击选项卡1 - 不破
- 点击选项卡3 - 不破
- 点击选项卡4 - 休息
- 运行 - 不显示选项卡4体
- 点击选项卡1,2,3,4 - 不破
如此看来标签创建自己的句柄他们第一次的点击,并从该点上,他们认为他们的存在,但他们不显示。 如果弹出禁止不遵守故障。 弹出窗口是从Application.OnIdle任务触发。
另一个更新:一些进展。 闲逛在网络上后,我做了一些改动。
我删除了下面的代码:
procedure RestoreMainWindow ;
begin
MainForm.WindowState := wsNormal ;
MainForm.visible := true ;
Application.Restore ;
Application.BringToFront ;
ShowWindow (Application.Handle, SW_SHOW) ; { show the taskbar button }
end ;
并用它取代:
procedure RestoreMainWindow ;
begin
MainForm.Show () ;
MainForm.WindowState := wsNormal ;
Application.BringToFront () ;
ShowWindow (Application.Handle, SW_SHOW) ; { show the taskbar button }
end ;
我删除了:
procedure TTADMainForm.SendToTray (Sender: TObject) ;
begin
MainForm.visible := false ;
ShowWindow (Application.Handle, SW_HIDE) ; { hide the taskbar button }
end ;
...
Application.OnMinimize := SendToTray ;
并用它取代:
procedure TTADMainForm.ApplicationEvents1Minimize(Sender: TObject) ;
begin
Hide();
WindowState := wsMinimized ;
TrayIcon1.Visible := True;
end ;
而这个问题似乎已经消失了。 然而。 现在我可以最小化启动后,在弹出的发生和模态显示,主要形式显示,所有选项卡显示和工作的应用程序。 但。 我不能再减少窗体。 该OnMinimize处理程序不会在第一时间拿到后触发。 Grrrrr。
我仍然无法捉摸,为什么现在的工作,这是一个有点令人担忧。 我如何得到它的最小化?