override窗体消息处理函数,用ShowWindow进行最小化可以解决这个问题,不过左下角地方会有一个小的框,procedure TForm1.WndProc(var Message: TMessage); begin if Message.Msg = WM_SYSCOMMAND then begin if Message.WParam = SC_MINIMIZE then ShowWindow(Self.Handle,SW_MINIMIZE) else inherited; end else inherited; end;
这段时间实在是太无聊了,拿着这个问题又研究了一下 先把我测试成功的代码贴出来,然后再讲过程,发现了一些很奇怪的东西 handle:=FindWindow(nil,'mainform'); handle1:=GetLastActivePopup(handle); BringWindowToTop(handle1); if not IsWindowVisible(handle1) then begin handle2 := GetWindow(handle1, GW_OWNER); if handle2<>0 then handle1:=handle2; ShowWindow(handle1,SW_RESTORE); end else begin SetForegroundWindow(Handle1); end;首先我被楼主的问题所迷惑,以为问题出在SetForegroundWindow上面,测试一段时间后发现不对 每次都是最小化后的窗口如果被显示出来,就会出现无法再最小化 于是我用了if not Isiconic(handle1) then来判断窗口是否最小化 结果居然发现Isiconic这个函数判断不对,我一下就晕了 最后调出spy++来查看窗口,发现窗口最小化,delphi做的动作居然是隐藏窗口,太意外了,以前一直没有注意 继续,把函数换成IsWindowVisible,判断没有问题,但是直接调用ShowWindow(handle1,SW_RESTORE);就会出现最小化的窗口恢复后无法再次最小化了 想了老半天,查了查原来的程序,发现ShowWindow调用的应该是application的句柄而不是窗口的句柄 于是又加了handle2 := GetWindow(handle1, GW_OWNER); if handle2<>0 then handle1:=handle2;再测试,OK有点乱,希望对你有帮助我回的是寂寞!
SetWindowPos(handle,HWND_TOP,0,0,0,0,SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);还不能动吗?
想知道是怎么create的(Self?nil?),怎么show的...
http://topic.csdn.net/t/20040514/14/3067500.html
begin
if Message.Msg = WM_SYSCOMMAND then
begin
if Message.WParam = SC_MINIMIZE then
ShowWindow(Self.Handle,SW_MINIMIZE)
else
inherited;
end
else
inherited;
end;
先把我测试成功的代码贴出来,然后再讲过程,发现了一些很奇怪的东西 handle:=FindWindow(nil,'mainform');
handle1:=GetLastActivePopup(handle);
BringWindowToTop(handle1);
if not IsWindowVisible(handle1) then
begin
handle2 := GetWindow(handle1, GW_OWNER);
if handle2<>0 then
handle1:=handle2;
ShowWindow(handle1,SW_RESTORE);
end
else
begin
SetForegroundWindow(Handle1);
end;首先我被楼主的问题所迷惑,以为问题出在SetForegroundWindow上面,测试一段时间后发现不对
每次都是最小化后的窗口如果被显示出来,就会出现无法再最小化
于是我用了if not Isiconic(handle1) then来判断窗口是否最小化
结果居然发现Isiconic这个函数判断不对,我一下就晕了
最后调出spy++来查看窗口,发现窗口最小化,delphi做的动作居然是隐藏窗口,太意外了,以前一直没有注意
继续,把函数换成IsWindowVisible,判断没有问题,但是直接调用ShowWindow(handle1,SW_RESTORE);就会出现最小化的窗口恢复后无法再次最小化了
想了老半天,查了查原来的程序,发现ShowWindow调用的应该是application的句柄而不是窗口的句柄
于是又加了handle2 := GetWindow(handle1, GW_OWNER);
if handle2<>0 then
handle1:=handle2;再测试,OK有点乱,希望对你有帮助我回的是寂寞!