投稿時間:2004/08/07(Sat) 14:49 投稿者名:とも
Eメール:
URL :
タイトル:タスクバーに消したはずのアイコンが残る
初めて投稿させていただきます。 vb6(sp5) Xp homeにて開発しています。 うまくいかない原因がつかめず困っています。なんでもよいのでご意見いただけたら助かります。
フォームを5つ持ち、フォーム1から5、5から1へ遷移可能な画面を作成しています。 各フォームはvbmodalでshowしています。 フォーム1から5へ遷移する場合、移動元を非表示にしています。 (例えば、フォーム2から3へ遷移するとき、フォーム2および、フォーム2のタスクバーのアイコンを非表示にしています。 つまり、ウィンドウズ上にはひとつのフォームおよびタスクバーにひとつのアイコンのみ表示ということです。 フォーム3から2へ遷移する場合は、フォーム3をunloadしています。)
現状、フォーム2から3へ遷移する場合に10回に1回ぐらい(出る頻度ばらばら)で、 フォーム2のアイコンがタスクバーに残ってしまう現象が出ています。
この現象を解消しようと、ログをとってイベントの発生順序が狂っていないかどうか調べたのですが、 問題なさそうでした。また、タスクバーのアイコン表示非表示はこちらの過去ログ 「アクティブなウィンドウだけをタスクバーに表示」を参考にしているので、 この問題に対する実装の方向性はまちがっていないと思っているのですが、うまくいっていません。
具体的には以下のような実装をしています。
フォーム1から5のForm_Activateイベントにて下記関数(AppTasklistA)呼び出し(フォーム起動時1回のみ)
フォーム2から3を呼び出す場合 '自分自身のフォーム2非表示+タスクバーアイコン削除 call DelTasklistA Me 'フォーム3呼び出し form3.show vbmodal '自分自身のフォーム2表示+タスクバーアイコン追加 call AppTasklistA Me
Public Sub DelTasklistA(ByRef p_frmForm As Form) 'ウィンドウ非表示 Call ShowWindow(p_frmForm.hWnd, CST_SW_HIDE) '以下過去ログのサンプル流用 Dim objTaskbar As New TaskbarList objTaskbar.HrInit objTaskbar.DeleteTab p_frmForm.hWnd Set objTaskbar = Nothing Exit Sub
Public Sub AppTasklistA(ByRef p_frmForm As Form) 'alt+tabにて表示される切り替えダイアログにアイコンが表示されるようウィンドウスタイルにWS_EX_APPWINDOWを追加 Call SetWindowLong(p_frmForm.hWnd, GWL_EXSTYLE, GetWindowLong(p_frmForm.hWnd, GWL_EXSTYLE) Or WS_EX_APPWINDOW) 'ウィンドウ表示 Call ShowWindow(p_frmForm.hWnd, CST_SW_SHOW) '以下過去ログのサンプル流用 Dim objTaskbar As New TaskbarList objTaskbar.HrInit objTaskbar.AddTab p_frmForm.hWnd objTaskbar.ActivateTab p_frmForm.hWnd Set objTaskbar = Nothing Exit Sub
気づいた点等ありましたらご意見いただけたら助かります。 よろしくお願いいたします。
|