(BorderStyle:=bsSigle & biMaximize:=false)または(BorderStyle:=bsDialog)
にしてもフォームを全画面表示する事が出来るが、Vistaでは成らない
[呼び出す側]
procedure TfmMain.Button1Click(Sender: TObject);
begin
//BorderIconsのbiMaximizeを制御しないと、Windows Me/2000で問題が出る。
//(問題内容)呼び出したフォームがタスクバーの上に表示される様になる
//呼び出し(ShowModal)の前後で行わないと実行時エラーになる。
fmSub.BorderIcons := fmSub.BorderIcons - [biMaximize];
fmSub.ShowModal;
fmSub.BorderIcons := fmSub.BorderIcons + [biMaximize];
//タスクバー表示ON/OFFを行うと呼び出したフォームからフォーカスが外れて
//いるので実行する必要有り。(呼び出したフォームをSetFocusする)
fmMain.SetFocus;
end;
[呼ばれる側]
{ Private 宣言 }
WinVista: boolean; {Windows Vista/7か?}
procedure WMsyscommand(var Msg:TWMSYScommand); message WM_SYSCommand;
procedure TfmSub.FormCreate(Sender: TObject);
var
VerInfo: TOSVersionInfo;
begin
fmSub.BorderIcons := fmSub.BorderIcons - [biMinimize];
fmSub.BorderStyle := bsSingle;
fmSub.WindowState := wsMaximized;
//OS種別判定
VerInfo.dwOSVersionInfoSize := SizeOf( TOSVersionInfo );
GetVersionEx( VerInfo );
WinVista := (VerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT) and
(VerInfo.dwMajorVersion=6);
end;
procedure TfmSub.FormShow(Sender: TObject);
begin
ShowWindow( FindWindow('Shell_TrayWnd',Nil),SW_HIDE ); {タスクバー表示OFF}
end;
procedure TfmSub.FormActivate(Sender: TObject);
begin
//フォーム位置が[-3,-3]となっており、Vista/7以外ではこの値で良いが、
//Vista/7では左上に偏って表示されるので調整の必要がある
if WinVista then begin
//フォーム位置が[0,0]でないとSTARTボタンが消えない
fmSub.Left := 0; fmSub.Top := 0;
end;
end;
procedure TfmSub.WMSYSCommand(var Msg: TWMSYSCommand);
begin
//タイトルバーのダブルクリックでフォームが通常サイズに戻らない様に
//する。(FormResize中でWindowStateを変更してもダメ)
if (Msg.CmdType and $FFFFFFF0)<>SC_RESTORE then begin
//フォームの移動を禁止する(Windows 7で最大化が解除されるのを防ぐ為)
if (Msg.CmdType and $FFF0)=SC_MOVE then
Msg.Result := 0 {移動を無効化}
else
inherited;
end;
end;
procedure TfmSub.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowWindow( FindWindow('Shell_TrayWnd',Nil),SW_SHOW ); {タスクバー表示ON}
end;
|
|
・インターネット上の情報や書籍の内容を一部参考に作成してます。 ・コーディング内容は著作権フリーですが、使用する場合は自己責任にてお願いします。 ・記述内容に問題点や改善点がありましたらこちらまでお願いします。 |