Delphi でフォームのタイトルバーボタン(最大化、最小化、還元、閉じる)の表示・動作を制御する場合、主に以下のプロパティやAPIを活用します。
1. 初期状態の指定:WindowState プロパティ
フォーム起動時の表示状態は WindowState プロパティで設定できます。たとえば、開始時に最大化するには:
procedure TForm1.FormCreate(Sender: TObject); begin WindowState := wsMaximized; end;
wsNormal(通常サイズ)、wsMinimized(最小化)の指定も同様に可能です。
2. タイトルバー上の操作ボタンの制御:BorderIcons プロパティ
BorderIcons プロパティを用いると、最大化・最小化ボタンの表示・非表示を個別に切り替えられます:
procedure TForm1.FormCreate(Sender: TObject); begin // 最小化・最大化ボタンを非表示 BorderIcons := BorderIcons - [biMinimize, biMaximize]; // 他の例:閉じるボタンだけを表示 BorderIcons := [biSystemMenu]; // biSystemMenu は閉じるボタンに対応 // 最小化・閉じるのみ表示(最大化ボタンを隠す) BorderIcons := [biMinimize, biSystemMenu]; end;
3. ユーザー操作用のカスタムボタンによる制御
独自のボタンやメニューアイテムを配置し、実行時に状態を切り替えることも可能です:
procedure TForm1.ctrlMaximizeClick(Sender: TObject);
begin
if WindowState <> wsMaximized then
WindowState := wsMaximized;
end;
procedure TForm1.ctrlRestoreClick(Sender: TObject);
begin
if WindowState = wsMaximized then
WindowState := wsNormal
else if WindowState = wsMinimized then
WindowState := wsNormal;
end;
procedure TForm1.ctrlMinimizeClick(Sender: TObject);
begin
WindowState := wsMinimized;
end;
このように独自のコントロールを実装することで、UI の一貫性や特別な操作フローに対応できます。
4. システムメニューコマンドのカスタマイズ(注意が必要)
システムメニューやその構成を直接変更することも技術的には可能ですが、OS の標準動作を乱す可能性があるため、.ColumnName を避けるべきです。
必要minimalなケースのみ、以下のように実装します(使用は推奨しません):
procedure TForm1.FormCreate(Sender: TObject);
var
sysMenu: HMENU;
begin
sysMenu := GetSystemMenu(Handle, False);
if sysMenu <> 0 then
begin
DeleteMenu(sysMenu, SC_CLOSE, MF_BYCOMMAND); // 閉じるを削除
DeleteMenu(sysMenu, SC_MINIMIZE, MF_BYCOMMAND); // 最小化を削除
DeleteMenu(sysMenu, SC_MAXIMIZE, MF_BYCOMMAND); // 最大化を削除
DrawMenuBar(Handle);
end;
end;
この手法では、キーボードショートカット(Alt+F4 など)やアクセシビリティツールとの連携に悪影響を及ぼす可能性があります。
補足:最大化/還元ボタンの切り替え論理
最大化と還元(復元)は同一のボタンがを使い分ける仕様のため、実装上は状態判定を行い動作を切り替える必要があります:
procedure TForm1.toggleMaximizeRestoreClick(Sender: TObject);
begin
case WindowState of
wsNormal: WindowState := wsMaximized;
wsMaximized: WindowState := wsNormal;
end;
end;