一个主窗体,一个副窗体。
主窗体Show出副窗体,这两个窗体在任务栏有两个标题:
这个的做法是,在副窗体中重载CreateParams,并实现如下:
procedure Form2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.wndParent := GetDesktopWindow;
end;但现在有一个问题,即主窗体最小化后,点击任务栏的标题让它回复,它竟然跑到副窗体的后面去了。
各位试试,看看有什么解决的办法呀。
主窗体Show出副窗体,这两个窗体在任务栏有两个标题:
这个的做法是,在副窗体中重载CreateParams,并实现如下:
procedure Form2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.wndParent := GetDesktopWindow;
end;但现在有一个问题,即主窗体最小化后,点击任务栏的标题让它回复,它竟然跑到副窗体的后面去了。
各位试试,看看有什么解决的办法呀。
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
if (Msg.CmdType = SC_MINIMIZE) then
begin
ShowMessage('min');
// 你的代码...
end;
if (Msg.CmdType = SC_MAXIMIZE) then
ShowMessage('max');
DefaultHandler(Msg);
end;
// 截获最大化和最小化消息更奇怪.
// 点击任务栏的主窗体两次就可以正常显示主窗体.你用程序试下模拟两次点击,应该有其它方法.但我想不到.sorry.Good Luck
你的解决方法似乎也不行,不知是不是我试得不对,你如果测试成功可以把代码贴一下出来吗。To: hsgrass37301(零点)
我再试着用另一种方法试试看吧。各位试试看啊,这个可是一个大问题啊。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, StrUtils;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
public
procedure CreateParams(var Params: TCreateParams);override;
end;var
Form1: TForm1;implementationuses
unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.show;
end;procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
with Application do
SetWindowLong(Handle, GWL_EXSTYLE,
GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
params.WndParent := 0;
end;procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
case message.CmdType of
SC_MINIMIZE :
DefWindowProc(Handle, message.Msg,TMessage(message).wParam,TMessage(message).lParam);
else
inherited;
end;
end;end.
马上结贴
:)