メインフォームを非表示にしたいので、下記命令を追加しました。
Application.ShowMainForm := False;
しかし、その後で自動的にタスクトレイに常駐するのですが、
タスクトレイにアイコンが表示されなくなりました。
メイン画面を表示せず、タスクトレイのみ表示させたいのですが、
何か良い方法はありませんか。
よろしくお願い致します。
タスクバーの事をタスクトレイと言っている気がするので
Application.ShowMainForm := False;
だとフォームが表示されません、
フォームがないとタスクバーには表示されませんので
procedure TForm4.FormCreate(Sender: TObject);
begin
Application.ShowMainForm := False;
WindowState := wsMinimized;
Application.ShowMainForm := True;
end;
としてフォーム非表示 -> 最小化 -> フォーム表示とする事により
起動時の最初化アニメーションがされずにいきなりタスクバーに
アイコンが表示されます
しかしタスクバーをクリック等すると元にもどってしまうので
これを防ぎたい場合には以下のようにして下さい
FOldWndProc: TFNWndProc;
function NewWndProc(hWnd: HWND; Msg: UINT;WParam: wPARAM; lParam: LPARAM): LRESULT; stdcall;
implementation
{$R *.dfm}
function NewWndProc(hWnd: HWND; Msg: UINT;wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
if (Msg = WM_SYSCOMMAND) and (wParam = SC_RESTORE) then
begin
Result := 0;
end
else
begin
Result := CallWindowProc(FOldWndProc, hWnd, Msg, wParam, lParam);
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SetWindowLong(Application.Handle,GWL_WNDPROC, Longint(FOldWndProc));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm := False;
WindowState := wsMinimized;
Application.ShowMainForm := True;
FOldWndProc := TFNWndProc(SetWindowLong(Application.Handle,GWL_WNDPROC, Longint(@NewWndProc)));
end;
もっと簡単にするなら
Application.ShowMainForm := False;
をなくして
Left := Screen.Width
だけでも出来そうですが・・・・
もしかして、メインフォームのハンドルをタスクトレイに登録しているのでは?
そうであれば、メインフォームを作成しなければハンドルもないので、タスクトレイに登録されません。
対策としては、
・タスクトレイ登録用ハンドルを別途用意する
・メインフォームをタスクトレイに登録するとして、メインフォームのWidth,Heightを0にする(もしくは画面の外に追いやる。KHE00221さんのやりかたですね)。
のどちらかかと思います。