メインフォーム以外のフォームを最小化した時もAPP全体を最小化したい
|
複数のフォームを持つAPPで、メインフォームでないフォームのMiniMizeボタンを押すとこのフォームは左下にタイトルバー形式にアイコン化され、メインフォームはそのまま残っています。これはこれで意味があるのですが、どのフォームを最小化してもAPP全体を最小化したい時があるものです。
これは、WM_SYSCOMMANDメッセージをとらえて、Appicationを最小化すればできます。
// Form2は、メインフォームでないフォームです。
type
TForm2 = class(TForm)
// コントロールいろいろ
private
procedure WMSysCommand(var Message: TWMSysCommand);message WM_SYSCOMMAND;
public
{ Public 宣言 }
end;
var
Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.WMSysCommand(var Message: TWMSysCommand);
begin
if (Message.CmdType and $FFF0 = SC_MINIMIZE) then
Application.Minimize
else
inherited;
end;
最小化された状態の判定は、
IsIconic(Application.Handle); で行います
「元のサイズに戻す」のは、
Application.Restore; ですね。
TCustomFormのWM_SYSCOMMANDメッセージ処理は
if (Message.CmdType and $FFF0 = SC_MINIMIZE) and
(Application.MainForm = Self) then
Application.Minimize
else
inherited;
のようになっていることからもわかるように、本来メインフォームとApplicationフォームとは別のものです。
この違いからWindowStyleプロパティの独特の仕様が生まれているのでしょうか?
左下にアイコン化するときは、WindowStyleプロパティは変化しないようです。フォームのWindowStyleプロパティは、メインフォームでないときは注意が必要です。 |
|