プログラムを起動したときに、すぐにタスクトレーに
アイコンを表示し、フォームは隠してしまいたいのですが、
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;
プロジェクトファイルを開いて、
begin
Application.Initialize;
Application.ShowMainForm := False; // 追加
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
これでどうでしょうか?
ツールウィンドウに設定されてるフォームは、トップレベルのものでもタスクバーに表示されません。
Applicationウィンドウに、WS_EX_TOOLWINDOWスタイルを追加してあげます。
SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
場所は、Initializeの真下でいいでしょう。
>たかみちえさん
他意は無いのですが、質問への答えとは違うのではないでしょうか?
プログラムを起動したときに、すぐにタスクトレーに
アイコンを表示し、「フォームは隠してしまいたい」
> Applicationウィンドウに、WS_EX_TOOLWINDOWスタイルを追加してあげます。
これは危険だと思います。奇妙なアプリケーションになってしまいませんか?
メインフォームを最小化すると。。。
ふぐちゃんさん たかみちえさん
何とか解決いたしました。ありがとうございました。
> 何とか解決いたしました。
どのようにして解決したのでしょうか?
>ふぐちゃん さん
> 質問への答えとは違うのではないでしょうか?
そうでしょうか?
質問には
> FormCreate イベントに下記のようにかいても、タスクバーに
プログラムが表示されます。
と書いてあります。タスクバーに表示させないようにするには、少なくともわたしにはこの方法しか思いつきませんでしたが…。
でも今やってみると、メインフォームの非表示でも成り立ちますね(Delphi6Persinal)。
> これは危険だと思います。奇妙なアプリケーションになってしまいませんか?
いえ、そんなことはありません。わたしは今までそのようにしてタスクバーからアプリケーションを隠したソフトを公開していますけど、おかしな様子はありません。
そのようにやっているソフトもいくつかあるようです。
NiftyのDelphiフォーラムなどにも載ってた方法ですから、多分以前のバージョンのDelphiではこれしか方法がなかったのでしょう。
http://forum.nifty.com/fdelphi/faq/00237.htm
(ちなみにこのサイトでも、WS_EX_TOOLWINDOWを使った方法が紹介されてますね)
現在のバージョンならば、非表示だけで十分かもしれません。
> メインフォームを最小化すると。。。
たしかに、それはあるかもしれません。常駐ソフトで"最小化する"ということをしたことがないので、わかりません。
TMemoも最小化でなく、非表示にしてしまうので…。
(その方が判断もBool型で済むぶん、やや短くなりますし)
> タスクバーに表示させないようにするには、少なくともわたしにはこの方法しか思いつきませんでしたが…。
質問者の方の真意はどうなのか、本当のところはわかりませんが、
私は「起動時にメインフォームが表示されないようにしたい」
ということだと解釈しました。
たかみちえさんの示された方法は「フォームが表示されても一切
タスクバーにアイコンが出ないようにする方法」ではないですか?
> わたしは今までそのようにしてタスクバーからアプリケーションを隠したソフトを公開していますけど、
> おかしな様子はありません。
TMemoを試用させて頂きました。
とてもよいソフトだと思います。
ところで、TMemoのメインフォームが表示されているときに、
ユーザーがタスクバー上で右クリックして「デスクトップを表示」
を選択したとしたらどうなりますでしょうか?
> タスクバーにアイコンが出ないようにする方法」ではないですか?
はい、そうです。それでよいのかと解釈していました。
> ところで、TMemoのメインフォームが表示されているときに、
> ユーザーがタスクバー上で右クリックして「デスクトップを表示」
> を選択したとしたらどうなりますでしょうか?
なるほど、わたしの環境ではそのようなものがないので、気がつきませんでした。
シェルをエクスプローラにしている別のアカウントで試してみましたが、特に思ったほど大きな問題にはなりませんでした。
ただ確かに表示周りが一時的におかしくなったようです。
プログラマならではの視点ですね、ありがとうございます。
> シェルをエクスプローラにしている別のアカウントで試してみましたが、
> 特に思ったほど大きな問題にはなりませんでした。
> ただ確かに表示周りが一時的におかしくなったようです。
もう少し詳しく書けばよかったです。ごめんなさい。
常に手前に表示がONの状態で試されませんでしたか?
一度解除してデフォルトの状態で確認してみてください。
メインウィンドウの表示・非表示の切り替えが一時的に
おかしくなるはずなのですが。
あれっ、たかみちえさんはすでに気付いていらっしゃったのかな?
それじゃ、このスレッドはもうこれで終了にしましょう。
お付き合いどうもありがとうございました。
ツイート | ![]() |