お知らせ

電子会議

ライブラリ

FDelphi サイト全文検索

Delphi FAQ一覧

サンプル蔵



FDelphi FAQ
15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」

[Q]
起動時にアイコン化を指定しても、普通にフォームが表示されて しまいます。最大化指定でも同じです。

[A]
Delphiで作ったアプリケーションは特別な事をしない限り、起動時に
アイコン化を指定しても普通に立ち上がってしまいます。
これが仕様と言われればまぁ納得しないなりに、仕方ないかな?と思
います。

が、そこは柔軟なDelphiの事ですので、なんとかこれを解消したいと
思ったのですが、結局VCLソースを直接変更するしか手はなさそう
です。

で、もしVCLソースをお持ちなら、下記の部分を変更すればアイコ
ン化起動がすっきり行なえます。ソースはFroms.PASになります。

Delphi2.0Jのみです。恐らく1.0でも同様の事をすればアイコン化起動
が出来ると思います。

尚、この改造を行なうと、アイコン化及び最大表示も行なえます。

1.TApplication.CreateHandleの変更

    このメソッドの変数として、

     StartupInfo: TStartupInfo;

    を追加します。次に、ShowWinNoAnimate(FHandle,・・・の行をコメント
    にし、その前に以下のコードを加えます。

    StartupInfo.cb := SizeOf(TStartupInfo);
    GetStartupInfo(StartupInfo);
    CmdShow := StartupInfo.wShowWindow;

    If CmdShow In [SW_MAXIMIZE, SW_SHOWMAXIMIZED] Then
       ShowWinNoAnimate(FHandle, SW_SHOWDEFAULT)
    Else
       ShowWinNoAnimate(FHandle, CmdShow);

2.TApplication.Runの変更

    現在、

      if FShowMainForm then FMainForm.Visible := True;

    となっている行をコメントにし、以下のコードに置き換えます。

      If CmdShow In [SW_MINIMIZE, SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE] Then
           Minimize
      Else
      Begin
         If CmdShow In [SW_MAXIMIZE, SW_SHOWMAXIMIZED] Then
            FMainForm.WindowState := wsMaximized;
         if FShowMainForm then FMainForm.Visible := True;
      End;

    とします。

    3.TApplication.Restoreの変更

    RestoreメソッドのRestoreTopMostsの行の次に、以下のコードを加えます。

    if FShowMainForm And Not (FMainForm.Visible) Then
       FMainForm.Visible := True;

これをコンパイルし、出来上がったDCUユニットをLibディレクトリの下に置いて
おきます。

これで以降アプリケーションを作ると、このForms.DCUがリンクされるので、
最小化を指定して起動するか、プロジェクトソースのApplication.Runの手前
で、

       CmdShow := SW_MINIMIZE;

としておくと、起動時に最小化されます。

尚、Forms.PASの修正や、Forms.DCUの置換えを行なう時は必ずバックアップを
作って、元に戻せるようにしておきましょう。


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。

Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会