皆様にいつもお世話になっております。WinXP Delphi6Personalです。
ブラウザを試作していますが、起動しても画面下のスタートバーにアプリのボタンが追加表示されても「へこまない状態」で起動します。なぜへこまないで起動するのか教えていたければ助かります。m(_ _)m
他の自作アプリは問題ないのですが、違いは二重起動防止機能を追加しているのと引数があったら取得するだけです。アプリのほうは正常に動作しています。なお引数をCreate後ComboBox1.Text := ParamStr(1);で取得しています。
ミスがあるかもしれませんので念のため二重起動部分を書きます。
hMutex := OpenMutex(MUTEX_ALL_ACCESS, false, 'On_Sample');
if (hMutex <> 0) then
begin //Openできたらすでに開いている
Wnd := FindWindow('TformMain', nil);
if Wnd <> 0 then
begin
SetForegroundWindow(Wnd); //前面に移動してアクティブ化
//TApplicationのウィンドウハンドルを取得
AppWnd := GetWindowLong(Wnd, GWL_HWNDPARENT);
if AppWnd <> 0 then Wnd := AppWnd;
f IsIconic(Wnd) then SendMessage(AppWnd, WM_SYSCOMMAND, SC_RESTORE, -1) ;
end;
CloseHandle(hMutex); { ミューテックスを閉じる }
PostQuitMessage(0);
end
else
begin
hMutex := CreateMutex(nil, False, 'On_Sample');
Application.Initialize;
Application.CreateForm(TformMain, formMain);
Application.Run;
ReleaseMutex(hMutex);
end;
今手元に環境がないのでサンプルを作れないのですが、原因だけ。
TformMainを見つけてリストアしているようですが、タスクバーに表示されているボタンは、TApplicationです。
TformMainだけでなく、TApplicationもActiveにしないとボタンは戻らないと思います。
独自メッセージを飛ばして、ApplicationをActiveにしてみてください。
# 試していないので違ったらごめんなさい
と思ったら
> //TApplicationのウィンドウハンドルを取得
でやっていますね。
よく読んでいませんでした。
ひとまず、独自メッセージ(WM_USER+xxx)で処理してみてください。
> Application.Initialize;
> Application.CreateForm(TformMain, formMain);
> Application.Run;
この3行だけにしても「へこまない状態」になりますか?
なるのであれば、メインフォームあたりで、何かしている可能性はあると思うのですが。
にしの様、ん?様返事が遅くなってすみません。いろいろやっているのですが解決しませんのでご報告させて頂きました。
にしの様へ。
>ひとまず、独自メッセージ(WM_USER+xxx)で処理してみてください。
を試みていますが、力不足で記述方法と場所が解ないので、
他のサイトでSendMessage(Wnd,WM_COPYDATA,0,LPARAM(@SendData)) ;のような例があったので
SendMessage(Wnd,WM_USER+'アプリケーション名',Lparam) ;などとしてもStringsとIntegerに互換性がないエラーになります。
できれば、記述方法など御指導頂ければ幸いです。
ん?様へ。
3行だけにしてもへこまないでした。結局解らないため、
別に新規に作成して、formCreate とFormShowなどから順次コピペしながらやっているのですが、まだ途中ですがへこむのです。
また、プロジェクトの二重起動防止部分もまるっとコピペしてやってもへこみます。???。
どこでへこまなくなるのかわくわくしながら、コピペしてやってます。
何か解ったらまた報告します。
ありがとうございました。
にしの様、ん様 へこむ/へこまないの箇所が解りましたのでご報告します。
このアプリはTabControlに子ウィンドウで表示するタブブラウザですが、
procedure TForm1.FormShow(Sender: TObject); で
起動時にホームページを開くように下記のようにしています。
var
Child:TformWebBrowser;
begin
if HomePage表示が不要なら then exit;
・・・
Child := TformWebBrowser.Create(formWebBrowser);
Child.WebBrowser1.GoHome;
end;
要するに起動時に子ウィンドウを開いて終わるわけです。
このへんがおかしいのではないかと思うのですが。
ただhomepageを表示不要のときは途中で抜けるのですがそれでもへこまないです。
いろいろやっていますが、解決できませんでした。
できましたら御指導ください。m(_ _)m
にしの様、ん様御指導ありがとうございました。
にしの様のご指摘の独自のメッセージを送って強制的にタスクバーのボタンを押すメッセージを試していましたが、
理屈は解りませんが FormShowに下記のようなコードを書いたらボタンがへこむようになりました。
SendMessage(Application.Handle, WM_NCLBUTTONDOWN, HTCAPTION,0);
もし間違いがあればご指摘ください。
やはりFormShowでホームページを子フォームで開くのが原因のようです。
これをカットすればへこみます。
ありがとうございました。
ツイート | ![]() |