お知らせ

電子会議

ライブラリ

FDelphi サイト全文検索

Delphi FAQ一覧

サンプル蔵



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

[Q]
タスクバーにアプリケーションアイコンを表示したくないのですが。

[A]
これは、プロジェクトソースでApplication.Handleを使って、SW_HIDEしてやれば
表示されなくなりますが、実は一瞬表示された後、消えるようになっています。

Win95では、Windowの拡張StyleにWS_EX_TOOLWINDOWが設定されていれば、タスク
バーにそのウインドウを表示しないようになっているので、こちらを使った方が
よりきれいに仕上がります。

しかし、これをやるにはTApplicationを直接変更するしかありません。

ただし、今回の改造は普通のアプリケーションの場合、問題有るでしょうから、
現状のLibディレクトリに有るForms.DCUはそのまま置いておき、タスクバーに
表示したくないアプリを作るときのみ改造分のForms.DCUをアプリケーションに
リンクするようにしましょう。

さて、改造内容ですが、まず、Forms.PASのTApplication.CreateHandleメソッドの

FHandle := CreateWindow(WindowClass.lpszClassName, PChar(FTitle),

この行を

{$IFDEF HIDEAPP}
    FHandle := CreateWindowEX(WS_EX_TOOLWINDOW, WindowClass.lpszClassName, PChar(FTitle),
{$ELSE}
    FHandle := CreateWindow(WindowClass.lpszClassName, PChar(FTitle),
{$ENDIF}

とします。さらに、下記の2つのメソッドを変更します。

procedure TApplication.Minimize;
begin
{$IFDEF HIDEAPP}
  If MainForm <> Nil Then
     MainForm.Hide;
{$ELSE}
  if not IsIconic(FHandle) then
  begin
    NormalizeTopMosts;
    SetActiveWindow(FHandle);
    ShowWinNoAnimate(FHandle, SW_MINIMIZE);
    if Assigned(FOnMinimize) then FOnMinimize(Self);
  end;
{$ENDIF}
end;

procedure TApplication.Restore;
begin
{$IFDEF HIDEAPP}
  If MainForm <> Nil Then
     MainForm.Show;
{$ELSE}
  if IsIconic(FHandle) then
  begin
    SetActiveWindow(FHandle);
    ShowWinNoAnimate(FHandle, SW_RESTORE);
    RestoreTopMosts;
    if Screen.ActiveControl <> nil then
      Windows.SetFocus(Screen.ActiveControl.Handle);
    if Assigned(FOnRestore) then FOnRestore(Self);
  end;
{$ENDIF}
end;

これでこのソースを保管し、タスクバーに出したくないアプリが
必要になったら、このソースのあるPathを検索Pathに加え、さら
にプロジェクトオプションの条件定義に、

  HIDEAPP

を加えてからコンパイルします。

最初からフォームを見せたくない場合はプロジェクトソースで

 Application.ShowMainForm := Falseとします。

フォームを見せる必要のある時は

   Form1.Show;

又は、

   Application.Resotre;

とし、フォームを隠す場合は、

  Form1.Hide;

又は、

  Application.Minimize;

とします。


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

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