[0232.txt] rev 1.3

編集:コードを編集して「変更」ボタンを押して下さい

表示

0232  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/09/01 西坂良幸 rev 1.4
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/09/06 西坂良幸 編集
フォームを最小化して起動するには


(1)メインフォームの場合
メインフォームのWindowStyleをwsMinimizedに設定しておくと自分で起動するときは、最小化されタスクバーに入ります。
しかし、他のAPPから起動する時やAPIのShowWindowやショートカットやタスクトレイなどで起動する時はちょっとやっかいです。
これは、Application(変数)のフォームとメインフォームの同期がとれないからです。これはメインフォームに送られてくるスタイルフラッグに合わせて、Applicationのスタイルを合わせてやる必要があります。
この方法は、MLではいくつも紹介されています。[Delphi-ML:13173] [Delphi-ML:13185]
(混乱ということでは、古いバージョンでは、GetStartupInfoで取得できるwShowWindow値が、CmdShowと必ずしも一致しないという問題や、D2→D3で仕様が変わっているということもあります。)

以下のコードはどうでしょうか。

procedure TForm1.FormCreate(Sender: TObject);
var
  SI : TStartupInfo ;
begin
  // D4では、常にCmdShow = SI.wShowWindowですが念のため
  GetStartupInfo( SI ) ;
  CmdShow := SI.wShowWindow ;

  // 最小化に関係するスタイルフラッグにすべて対応
  case cmdShow of
    SW_SHOWMINIMIZED,
    SW_MINIMIZE,
    SW_SHOWMINNOACTIVE :
      Application.Minimize ;// 同期させる
  end ;
end;


(2)子フォームの場合
子フォームは、最小化すると、DeskTpo上の左下にタイトルバー風アイコン化されます。これは、子フォームの印みたいなものですが、仕様によっては、タスクバーに入れたい時もあります。市販のソフトでもありますね。このように、タスクバーに入れたいときは、CreateParamsをオーバーライトします。これは、フォームのスタイルをよりApplivationに近づける手法です。
ただし、OnCloseイベントのAction := caFreeと終了の仕方を書かないと閉じられません。

ということで、この子フォームの呼び出しは、

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Form2 = nil then Form2 :=TForm2.Create(Application);
  ShowWindow(Form2.handle, SW_SHOWMINNOACTIVE);
end;

  TForm3 = class(TForm)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  params.ExStyle := params.ExStyle or WS_EX_APPWINDOW;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  Form2 := nil;
end;

とします。[Delphi-ML:7921]

また、タスクバーにも入れたくないときは、
  Application.OnMinimize := AppMinimize;

を設定し、

procedure TForm2.AppMinimize(Sender: TObject);
begin
  ShowWindow(Form1.Handle, SW_HIDE);
end;

ですね。
参照: [Delphi-ML:13173] [Delphi-ML:3426] [Delphi-ML:23218] [Delphi-ML:25557] <タスクバー> <Windows> <フォーム>


ソース



対象: 指定無し 初心者 中級者 上級者

    D1   D2   D3   D4   D5   D6   D7   B1   B3   B4   B5   B6   B7   3.1   95   98   NT3   NT4   2K   XP
×

名前 e-mail password
    名前・メールアドレス・パスワードをブラウザに記録する
     ※ 通常はパスワードの入力は必要ありません。
修正履歴

最終更新: 1.4 1999/09/06 19:37:43 西坂良幸 <nisisaka@pearl.ocn.ne.jp>

1.4 1999/09/06 19:37:43 西坂良幸 <nisisaka@pearl.ocn.ne.jp>
1.31999/09/04 04:27:31 西坂良幸 <nisisaka@pearl.ocn.ne.jp>
1.21999/09/02 00:28:31 西坂良幸 <nisisaka@pearl.ocn.ne.jp>
1.11999/09/01 22:30:37 西坂良幸 <nisisaka@pearl.ocn.ne.jp>



Delphi Tips の編集を手伝って下さる方を募集しています。
osamu@big.or.jp