[Delphi] フォームをフルスクリーン表示する(タイトルバー有り)
(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;
      

・インターネット上の情報や書籍の内容を一部参考に作成してます。
・コーディング内容は著作権フリーですが、使用する場合は自己責任にてお願いします。
・記述内容に問題点や改善点がありましたらこちらまでお願いします。

サンプル集の一覧に戻る