自作アプリを起動してもスタートバーのボタンがへこまない?

解決


武田  2006-05-24 00:19:43  No: 21764

皆様にいつもお世話になっております。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;


にしの  2006-05-24 00:23:18  No: 21765

今手元に環境がないのでサンプルを作れないのですが、原因だけ。

TformMainを見つけてリストアしているようですが、タスクバーに表示されているボタンは、TApplicationです。
TformMainだけでなく、TApplicationもActiveにしないとボタンは戻らないと思います。
独自メッセージを飛ばして、ApplicationをActiveにしてみてください。
# 試していないので違ったらごめんなさい


にしの  2006-05-24 00:24:45  No: 21766

と思ったら
> //TApplicationのウィンドウハンドルを取得
でやっていますね。
よく読んでいませんでした。

ひとまず、独自メッセージ(WM_USER+xxx)で処理してみてください。


ん?  2006-05-24 02:40:21  No: 21767

>         Application.Initialize;
>         Application.CreateForm(TformMain, formMain);
>         Application.Run;
この3行だけにしても「へこまない状態」になりますか?

なるのであれば、メインフォームあたりで、何かしている可能性はあると思うのですが。


武田  2006-05-26 00:03:48  No: 21768

にしの様、ん?様返事が遅くなってすみません。いろいろやっているのですが解決しませんのでご報告させて頂きました。
にしの様へ。
>ひとまず、独自メッセージ(WM_USER+xxx)で処理してみてください。
を試みていますが、力不足で記述方法と場所が解ないので、
他のサイトでSendMessage(Wnd,WM_COPYDATA,0,LPARAM(@SendData)) ;のような例があったので
SendMessage(Wnd,WM_USER+'アプリケーション名',Lparam) ;などとしてもStringsとIntegerに互換性がないエラーになります。
できれば、記述方法など御指導頂ければ幸いです。

ん?様へ。
3行だけにしてもへこまないでした。結局解らないため、
別に新規に作成して、formCreate  とFormShowなどから順次コピペしながらやっているのですが、まだ途中ですがへこむのです。
また、プロジェクトの二重起動防止部分もまるっとコピペしてやってもへこみます。???。
どこでへこまなくなるのかわくわくしながら、コピペしてやってます。
何か解ったらまた報告します。

ありがとうございました。


武田  2006-05-26 01:17:46  No: 21769

にしの様、ん様  へこむ/へこまないの箇所が解りましたのでご報告します。
このアプリは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


武田  2006-05-26 22:51:57  No: 21770

にしの様、ん様御指導ありがとうございました。
にしの様のご指摘の独自のメッセージを送って強制的にタスクバーのボタンを押すメッセージを試していましたが、
理屈は解りませんが  FormShowに下記のようなコードを書いたらボタンがへこむようになりました。
SendMessage(Application.Handle, WM_NCLBUTTONDOWN, HTCAPTION,0);
もし間違いがあればご指摘ください。
やはりFormShowでホームページを子フォームで開くのが原因のようです。
これをカットすればへこみます。
ありがとうございました。


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

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






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