FormCreate時のプログラム隠蔽化について

解決


タスクマン  2004-03-08 09:55:44  No: 7608

プログラムを起動したときに、すぐにタスクトレーに
アイコンを表示し、フォームは隠してしまいたいのですが、
FormCreate  イベントに下記のようにかいても、タスクバーに
プログラムが表示されます。
同じ事を、ButtonClick イベントで実行するとうまく行きます。
どうしたら、よろしいのでしょう?
どなたかご教授くださいませんか。

procedure TForm1.FormCreate(Sender: TObject);
begin
     Application.Minimize;
     ShowWindow(Application.Handle, SW_HIDE);
     FIconData.cbSize  :=  SizeOf(TNotifyIconData);
     FIconData.uID     :=  1;
     FIconData.Wnd     :=  Handle;
     FIconData.uFlags  :=  NIF_MESSAGE or NIF_ICON or NIF_TIP;
     FIconData.uCallbackMessage  :=  WM_USER + 100;
     FIconData.hIcon   :=  Application.Icon.Handle;  
     FIconData.szTip   :=  'POPUP SYSTEM';
     Shell_NotifyIcon(NIM_ADD, @FIconData);

end;


ふぐちゃん  2004-03-08 11:18:56  No: 7609

プロジェクトファイルを開いて、

begin
  Application.Initialize;
  Application.ShowMainForm := False; // 追加
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

これでどうでしょうか?


たかみちえ  URL  2004-03-08 11:40:01  No: 7610

ツールウィンドウに設定されてるフォームは、トップレベルのものでもタスクバーに表示されません。
Applicationウィンドウに、WS_EX_TOOLWINDOWスタイルを追加してあげます。
SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);

場所は、Initializeの真下でいいでしょう。


ふぐちゃん  2004-03-08 23:26:35  No: 7611

>たかみちえさん
他意は無いのですが、質問への答えとは違うのではないでしょうか?
  プログラムを起動したときに、すぐにタスクトレーに
  アイコンを表示し、「フォームは隠してしまいたい」

> Applicationウィンドウに、WS_EX_TOOLWINDOWスタイルを追加してあげます。
これは危険だと思います。奇妙なアプリケーションになってしまいませんか?
メインフォームを最小化すると。。。


タスクマン  2004-03-09 09:03:40  No: 7612

ふぐちゃんさん  たかみちえさん
何とか解決いたしました。ありがとうございました。


jok  2004-03-09 09:14:02  No: 7613

> 何とか解決いたしました。

どのようにして解決したのでしょうか?


たかみちえ  URL  2004-03-09 10:01:38  No: 7614

>ふぐちゃん さん
> 質問への答えとは違うのではないでしょうか?
  そうでしょうか?
  質問には
> FormCreate  イベントに下記のようにかいても、タスクバーに
プログラムが表示されます。
  と書いてあります。タスクバーに表示させないようにするには、少なくともわたしにはこの方法しか思いつきませんでしたが…。
  でも今やってみると、メインフォームの非表示でも成り立ちますね(Delphi6Persinal)。

> これは危険だと思います。奇妙なアプリケーションになってしまいませんか?
  いえ、そんなことはありません。わたしは今までそのようにしてタスクバーからアプリケーションを隠したソフトを公開していますけど、おかしな様子はありません。
そのようにやっているソフトもいくつかあるようです。

  NiftyのDelphiフォーラムなどにも載ってた方法ですから、多分以前のバージョンのDelphiではこれしか方法がなかったのでしょう。
http://forum.nifty.com/fdelphi/faq/00237.htm
(ちなみにこのサイトでも、WS_EX_TOOLWINDOWを使った方法が紹介されてますね)
現在のバージョンならば、非表示だけで十分かもしれません。

> メインフォームを最小化すると。。。
  たしかに、それはあるかもしれません。常駐ソフトで"最小化する"ということをしたことがないので、わかりません。
TMemoも最小化でなく、非表示にしてしまうので…。
(その方が判断もBool型で済むぶん、やや短くなりますし)


ふぐちゃん  2004-03-10 04:47:59  No: 7615

> タスクバーに表示させないようにするには、少なくともわたしにはこの方法しか思いつきませんでしたが…。
質問者の方の真意はどうなのか、本当のところはわかりませんが、
私は「起動時にメインフォームが表示されないようにしたい」
ということだと解釈しました。
たかみちえさんの示された方法は「フォームが表示されても一切
タスクバーにアイコンが出ないようにする方法」ではないですか?

> わたしは今までそのようにしてタスクバーからアプリケーションを隠したソフトを公開していますけど、
> おかしな様子はありません。
TMemoを試用させて頂きました。
とてもよいソフトだと思います。
ところで、TMemoのメインフォームが表示されているときに、
ユーザーがタスクバー上で右クリックして「デスクトップを表示」
を選択したとしたらどうなりますでしょうか?


たかみちえ  URL  2004-03-11 08:16:49  No: 7616

> タスクバーにアイコンが出ないようにする方法」ではないですか?
  はい、そうです。それでよいのかと解釈していました。

> ところで、TMemoのメインフォームが表示されているときに、
> ユーザーがタスクバー上で右クリックして「デスクトップを表示」
> を選択したとしたらどうなりますでしょうか?
  なるほど、わたしの環境ではそのようなものがないので、気がつきませんでした。
シェルをエクスプローラにしている別のアカウントで試してみましたが、特に思ったほど大きな問題にはなりませんでした。
ただ確かに表示周りが一時的におかしくなったようです。
プログラマならではの視点ですね、ありがとうございます。


ふぐちゃん  2004-03-11 09:17:06  No: 7617

> シェルをエクスプローラにしている別のアカウントで試してみましたが、
> 特に思ったほど大きな問題にはなりませんでした。
> ただ確かに表示周りが一時的におかしくなったようです。
もう少し詳しく書けばよかったです。ごめんなさい。
常に手前に表示がONの状態で試されませんでしたか?
一度解除してデフォルトの状態で確認してみてください。
メインウィンドウの表示・非表示の切り替えが一時的に
おかしくなるはずなのですが。


ふぐちゃん  2004-03-11 09:30:06  No: 7618

あれっ、たかみちえさんはすでに気付いていらっしゃったのかな?
それじゃ、このスレッドはもうこれで終了にしましょう。
お付き合いどうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加