これまで、D5,D6,D2006と、タスクバーのアイコンを消去するコードは
FormCreateに以下のように記述していました。
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
ShowWindow(Application.Handle, SW_SHOW);
しかし、XE4ではアイコンが表示されてしまいます。
何か仕様とか変わったのでしょうか?
Delphi 2007 からだったと思いますが,詳しいことは失念.
Windows のバージョンも関係してきます.
それまで曖昧だったアプリケーションウィンドウと,メインフォームのウィンドウが明確になりました.
その結果,それまでのウィンドウ表示に対するコードの変更が必要な場合があります.
プロジェクトのソースコードが次のようになっています.
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
この中の MainFormOnTaskbar がメインフォームをタスクバーに表示するかしないかのプロパティです.
メインフォームというのは,デフォルトでは Form1 です.
この値を False にするとメインフォームのアイコンをタスクバーに表示しなくなります.
しかし,今度はアプリケーションウィンドウのアイコンがタスクバーに表示されるようになります.
いろいろやり方は考えられますが,次のような方法が簡単だと思っています.
procedure TForm1.FormActivate(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
他の方法は,この掲示板を「タスクバー 非表示」で検索してみてください.
ただし,あるかどうかの保証はありません.
環境はちゃんと書きましょうね.
少なくとも,Delphi のバージョンで挙動が違う場合があることは理解していただけたと思います.
すみません、環境はWindows7です。
提示して頂いたコードで実験してみて、無事アイコンが非表示になりました。
しかし最小化すると、アイコンが表れて最小化し、
さらにアイコンをクリックして通常の大きさに戻すと、
アイコンが表示されたままになってしまいました。
そこで、
{ Private 宣言 }
procedure WMSYSCOMMAND(var Msg: TWMSYSCOMMAND); message WM_SYSCOMMAND;
procedure TForm1.WMSYSCOMMAND(var Msg: TWMSYSCOMMAND);
begin
if Msg.CmdType = SC_MINIMIZE then Hide
else inherited;
end;
を追加して最小化時にフォームを非表示にしたところ、
最小化してもアイコンが出なくなりました。
ただ、このままだと二度とフォームが出てこないので、TrayIconを使用して、
procedure TForm1.TrayIcon1Click(Sender: TObject);
begin
Form1.Show;
end;
としました。
この方法がまっとうなものかどうか分からないのですが、
一応希望通りの動作ができました^^;
ありがとうございました。
>すみません、環境はWindows7です。
スミマセン.軽く流してくださいませ.他の方への意味も含めてなので.
あたしだって,レスに動作確認環境書いてませんから.
>しかし最小化すると、アイコンが表れて最小化し
ありゃ,スミマセンです.テストしていませんでした.
これは,アプリケーションウィンドウですね.
タスクバーにアイコンを非表示にするアプリを最小化するなんて考えもしませんでした.
>この方法がまっとうなものかどうか分からないのですが、
というより,それなら最初からタスクトレイ用のアプリケーションとして考えてもいいような.
う〜ん.
まっ,プログラムは,「勝てば官軍,動けば正義」です.
で,改めて,先のコードの動作確認環境は,Windows 7 U64(SP1) + Delphi XE3(UP1) です.
まちがえました.
Delphi XE3(UP1) --> Delphi XE4(UP1)
ツイート | ![]() |