我一直试图让我的应用程序中的一些无模式窗体出现在任务栏上 - 利用Windows 7中新的有用任务栏.
在任务栏上存在表单之前,VCL有许多问题需要撤消.
但最后一个问题是,最小化VCL指定主窗体的形式会导致应用程序中的所有窗口消失.
十年前,Peter Below(TeamB)记录了这些问题,并尝试解决这些问题.但是有些问题无法解决.这些问题在VCL本身内部如此深入,实际上不可能使Delphi应用程序正常运行.
这一切都源于您在工具栏上看到的按钮不代表应用程序窗口的事实; 它代表了TApplications窗口,它是隐藏的,从未见过.然后是应用程序MainForm,然后充满了特殊的能力,如果它被最小化,那么它指示应用程序隐藏自己.
在我看来,如果我能做到的话
Application.MainForm := nil;
Run Code Online (Sandbox Code Playgroud)
然后所有这些错误都会消失.应用程序可以有其隐藏的窗口,同时我将覆盖应用程序中的所有其他表单,包括我的主窗体,其中:
procedure TForm2.CreateParams(var params: TCreateParams );
begin
inherited CreateParams(params);
params.ExStyle := params.ExStyle or WS_EX_APPWINDOW;
end;
Run Code Online (Sandbox Code Playgroud)
但在Delphi中,该Application.MainForm属性是只读的.
我怎么能MainForm在Delphi中没有?
我有一个Delphi应用程序,它有一个文档浏览器作为主要表单.当用户打开文档时,我们打开一个编辑器窗口.我们希望每个编辑器在任务栏上都有一个按钮,以及主窗体.我已经应用了常规代码来执行此操作(下面),但是当我在使用编辑器窗口后单击主窗体时,编辑器将保持在顶部,而焦点位于主窗体上.我无法解决导致此行为的原因.
舞台设置:我打开主表单和文档表单.
点击另一个应用程序,点击主表单,主表单保持专注.(按预期行事.)
单击文档表单,单击主表单,文档表单返回到前面,但显示为非活动状态.(图为结果)
替代文字http://www.matthew-jones.com/temp_xfer/titlebarfailure.jpg
第一步,这是Delphi 2007,我在项目中:
Application.MainFormOnTaskBar := True;
Run Code Online (Sandbox Code Playgroud)
对于主表单,我没有其他代码.
对于文件表格,我有
procedure TCommonEditForm.CreateParams(var params: TCreateParams);
begin
inherited;
params.WndParent := 0; // GetDeskTopWindow; no diff
end;
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚是否有消息使这种情况发生,但找不到合适的东西.我在代码中搜索了与"激活"有关的任何内容.线索欢迎!