如何让主窗体不显示时子窗体最小化时程序能缩至任务栏?(50分)

  • 主题发起人 chen___ye
  • 开始时间
C

chen___ye

Unregistered / Unconfirmed
GUEST, unregistred user!
主窗体是登陆界面,登陆成功后,主窗体消失,子窗体显示,但最小化是无法缩至任务栏
如何解决此问题?
 
这个问题实现很麻烦,我实现了,具体方法是
1.把最小化消息传给Application,代码如下
procedure TChildForm.WMSysCommand(var Message:TWMSysCommand);
begin
case Message.CmdType of
SC_MINIMIZE:
if fsModal in FormState then
//如果窗体是模式显示就不能用PostMessage
Application.Minimize
else
PostMessage(Application.Handle,0,SC_MINIMIZE,0);
else
inherited;
end;
end;
2.拦截应用程序的消息,代码如下
procedure TMDIMainForm.AppMessageHandler(var Msg:TMsg;var Handled:boolean);
var
i:integer;
begin
case Msg.wParam of
SC_MINIMIZE:
begin
if Assigned(Screen.ActiveForm) then
SetWindowPos(Application.Handle,Screen.ActiveForm.Handle,
Screen.ActiveForm.Left,Screen.ActiveForm.Top,
Screen.ActiveForm.Width,0,SWP_SHOWWINDOW);
DefWindowProc(Application.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);
end;
SC_RESTORE :
begin
if Assigned(Screen.ActiveForm) then
SetWindowPos(Application.Handle,Screen.ActiveForm.Handle,
Screen.ActiveForm.Left,Screen.ActiveForm.Top,
Screen.ActiveForm.Width,0,SWP_SHOWWINDOW);
DefWindowProc(Application.Handle,WM_SYSCOMMAND,SC_RESTORE,0);
end;
end;
Handled:=false;
end;
3.把2的过程与应用程序相关联,代码加在工程文件中
Application.OnMessage:=MDIMainForm.AppMessageHandler;
 
谢谢回答,那么怎样在子窗体中调用过程WMSysCommand(var Message:TWMSysCommand);
 
忘记说了
TChildForm = class(TForm)
private
//下面这句,拦截Windows消息
procedure WMSysCommand(var Message:TWMSysCommand);message WM_SYSCOMMAND;
protected
public
end;
 
我懂得你的意思了,非常感谢你的回答!
给你分数!
 

Similar threads

I
回复
0
查看
541
import
I
I
回复
0
查看
643
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
535
import
I
顶部