有两个窗体FORM1,FORM2,我在FORM1。ONSHOW中写到
Form2 := TForm2.Create(Self);FORM2。SHOW;
而当FORM1窗体最小化时
这个FORM2的窗体受FORM1影响,也被最小化,
请问怎么做才可以让FORM2不被最下化
Form2 := TForm2.Create(Self);FORM2。SHOW;
而当FORM1窗体最小化时
这个FORM2的窗体受FORM1影响,也被最小化,
请问怎么做才可以让FORM2不被最下化
你所说问题是由于如下的原因:
您的FORM1(应该是DELPHI默认的主窗体吧)其实是您的程序的主窗体,换句话说您所有程序的平台,以后你所建造的窗体都是基于他之上的,你最小化了form1,其实就是最小化了你的整个程序,所以会出现你所说的问题。你可以试一下,建立FORM1.FORM2,FORM3,你在FORM2里面调用FORM3,你最小化FORM3的时候form2,FORM1就不会是你说的那种状况。其实你所说的办法有以下几个解决办法:
1、将主窗体作为隐含的或者splash form,像所举的例子那样,不要在主窗体上实现你的需求;
3、创建 New Thread,这个我没有试,应该可以
(注:主窗体可能不是专业术语,只是想着说的,希望你能明白我的意思!)
begin
with Message do
begin
if (CmdType and $FFF0 = SC_MINIMIZE) and (Application.MainForm = Self) then
Application.WndProc(TMessage(Message))
else if (CmdType and $FFF0 <> SC_MOVE) or (csDesigning in ComponentState) or
(Align = alNone) or (WindowState = wsMinimized) then
inherited;
if ((CmdType and $FFF0 = SC_MINIMIZE) or (CmdType and $FFF0 = SC_RESTORE)) and
not (csDesigning in ComponentState) and (Align <> alNone) then
RequestAlign;
end;
end;注意这句:if (CmdType and $FFF0 = SC_MINIMIZE) and (Application.MainForm = Self) then
Application.WndProc(TMessage(Message))如果是主窗体接收到消息,会转给Application,当然所有窗体都会最小化!找到原因,解决方法就不难了!拦截消息自己处理吧!
{ Private declarations }
procedure WMSysCommand(var Message: TWMSysCommand);message WM_SysCommand;
......procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
with Message do
begin
if (CmdType and $FFF0 = SC_MINIMIZE) then
showwindow(self.Handle,SW_MINIMIZE)
else if (CmdType and $FFF0 <> SC_MOVE) or (csDesigning in ComponentState) or
(Align = alNone) or (WindowState = wsMinimized) then
inherited;
if ((CmdType and $FFF0 = SC_MINIMIZE) or (CmdType and $FFF0 = SC_RESTORE)) and
not (csDesigning in ComponentState) and (Align <> alNone) then
RequestAlign;
end;
end;