📄 子窗口显示任务条.txt
字号:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
private
{ Private declarations }
protected
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent := GetDesktopWindow;
end;
end.
一个ShowModal窗体的问题
问题提出:
我想让我做的应用的各个子窗口都单独打开,而不是MDI或SDI(简单地说就象IE这样),因此我在窗口利用了这个函数
procedure Tfrm_form1.CreateParams(VAR Params: TCreateParams);
// 单独打开窗口
begin
Inherited CreateParams(Params);
Params.WndParent := GetDesktopWindow;
end;
这样打开的窗口,在任务栏中是单独的窗口了。
但是如果我在这个窗口中再打开对话框(也是自己做的form)的话,对话框总是出现在应用的主窗口,怎么才能让对话框弹出在Tfrm_form1的前面呢。
也就是说:我的主程序窗口是frm_main, 从frm_main会打开一个窗口frm_form1,frm_form1是单独打开的,从任务栏上看是单独的图标。 现在,我在frm_form1中showmodal打开一个窗口form2,这个form2会出现在应用主窗口frm_main的前面。而我要的是form2出现在frm_form1前面。
答:
Kingron也曾经为了这个问题头疼了好久,后来终于解决掉了:
关键在于Form2,你必须同时重载Form2的CreateParams,同样,修改Params.WndParent为Frm_Form1.Handle即可。
这个问题到此就可以解决,如果你的Form2还需要在其他地方使用,那么就必须采取动态创建的方法,而且必须修改它的CreateParams,把它的Param.WndParent设置为GetActiveWindow即可。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -