该程序具有主要形式和N个其他形式,从主要形式创建为模态。
工作人员同时使用2个或3个监视器(屏幕),因此如果将模态窗体放在另一个屏幕上,他们不希望看到停用的主窗体。
我在所有模态表单中添加了 ExStyle = WS_EX_APPWINDOW ,并在创建新模态时隐藏主表单
ActiveModalForm:=TComponentClass(AClass).Create(Application) as TCustomForm;
Hide(); //hides main form
ActiveModalForm.ShowModal; //show new modal window
FreeAndNil(ActiveModalForm); // destroy modal window
Show(); //shows main form
模态表单CreateParams:
procedure TfrmNewModal.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
begin
WndParent := 0;
ExStyle := ExStyle OR WS_EX_APPWINDOW;
end;
end;
问题在于,如果用户想要最小化该模态形式,它将最小化并再次显示。
我试图通过这种方式最小化它:
procedure TfrmNewModal.WMSysCommand(var Msg: TWMSysCommand);
begin
case (msg.cmdtype and $FFF0) of
SC_MINIMIZE:
ShowWindow( handle, SW_MINIMIZE );
SC_RESTORE:
ShowWindow( handle, SW_RESTORE )
else
inherited;
end;
end;
我认为问题出现在WS_EX_APPWINDOW中,但是我无法想象在当下这个方式我可以在任务栏上显示模态窗口并将其最小化。
有人可以帮忙吗?
谢谢。
答案 0 :(得分:0)
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim _CreateParams As CreateParams = MyBase.CreateParams
' WS_EX_COMPOSITED
' WS_EX_LAYERED
_CreateParams.ExStyle = _CreateParams.ExStyle Or &H2000000
_CreateParams.ExStyle = _CreateParams.ExStyle Or &H80000
Return _CreateParams
End Get
End Property
答案 1 :(得分:0)
public class VisualBasicClass
{
protected override CreateParams CreateParams
{
get
{
CreateParams _CreateParams = base.CreateParams;
// WS_EX_COMPOSITED
// WS_EX_LAYERED
_CreateParams.ExStyle = _CreateParams.ExStyle | 0x2000000;
_CreateParams.ExStyle = _CreateParams.ExStyle | 0x80000;
return _CreateParams;
}
}
}