[リストへもどる]
一括表示

投稿時間:2002/08/25(Sun) 13:45
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
ActiveFormの切り替え方法(タスクバー関連)
Re^3: タスクバーの制御(タイトルバーが逆.. - 花ちゃん 08/25-10:00 No.189 のサンプル
をプロシージャ化し、フォームのForm_Deactivateイベント等で呼ぼうとしたら、当然の事
ながら無限ループに入ってしまいました。
なにか回避策でいい方法ないでしょうか?

投稿時間:2002/08/25(Sun) 20:27
投稿者名:MS
URL :
タイトル:
Re: ActiveFormの切り替え方法(タスクバー関連)
> Re^3: タスクバーの制御(タイトルバーが逆.. - 花ちゃん 08/25-10:00 No.189 のサンプル
> をプロシージャ化し、フォームのForm_Deactivateイベント等で呼ぼうとしたら、当然の事
> ながら無限ループに入ってしまいました。
> なにか回避策でいい方法ないでしょうか?

例えば、以下の様な方法もあります。

> Result = ShowWindow(Me.hwnd, SW_HIDE)
> Result = SetWindowLong(Me.hwnd, GWL_EXSTYLE, WStyle)
> Result = ShowWindow(Me.hwnd, SW_SHOW)

Result = SetWindowPos(Me.hwnd, HWND_TOP, 0, 0, 0, 0, _
                      SWP_NOMOVE Or SWP_NOSIZE Or _
                      SWP_NOACTIVATE Or SWP_HIDEWINDOW)
Result = SetWindowLong(Me.hwnd, GWL_EXSTYLE, WStyle)
Result = SetWindowPos(Me.hwnd, HWND_TOP, 0, 0, 0, 0, _
                      SWP_NOMOVE Or SWP_NOSIZE Or _
                      SWP_NOACTIVATE Or SWP_SHOWWINDOW)

投稿時間:2002/08/25(Sun) 22:57
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
(お礼)ActiveFormの切り替え方法(タスクバー関連)
このように SetWindowPos を使わなきゃだめだったんですね!

ありがとうございました。これでうまく動作するようになり、今夜はゆっくり寝られます。

投稿時間:2002/08/26(Mon) 00:45
投稿者名:MIKAN
Eメール:
URL :
タイトル:
Re:ActiveFormの切り替え方法
Activeなフォームを最小化すると、そのフォームが表示されなくなるようです。
いろいろ試してみましたが、いい手がうかびませんでした。

投稿時間:2002/08/26(Mon) 09:01
投稿者名:MS
URL :
タイトル:
Re^2:ActiveFormの切り替え方法
> Activeなフォームを最小化すると、そのフォームが表示されなくなるようです。
> いろいろ試してみましたが、いい手がうかびませんでした。

この方法はAlt+Tabが使えないのが痛いですね。
最小化したフォームのタスクボタンを残す様にするか、
最小化したフォームを元に戻す処理をアクティブフォームに
加える様なことしか思い浮かびません。

ITaskbarListを使う方法なら、最小化してもAlt+Tabから
元に戻せるんですが。

投稿時間:2002/08/26(Mon) 09:56
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^2:ActiveFormの切り替え方法
> Activeなフォームを最小化すると、そのフォームが表示されなくなるようです。
> いろいろ試してみましたが、いい手がうかびませんでした。

気がつきませんでした。
Private Sub Form_Deactivate()
    If Me.WindowState <> vbMinimized Then
        DelTasklist Me 'タスクバーに非表示設定へ
    Else
      '  Me.WindowState = vbNormal
    End If
End Sub
これでもいいのでは、ないでしょうか
どうせ、最小化した場合の処理は次の3つから選択する事になると思うし
1.ウィンドウを閉じる
2.タスクバーに表示する
3.最小化できないようにする

只、2番の方法をとった場合、最小化されたアイコンがウィンドウ上にも時々表示
されるのが気になりますが?

>ITaskbarListを使う方法なら、最小化してもAlt+Tabから
>元に戻せるんですが。

この方法は、難しくて私には利用できませんでした。(;_;)

投稿時間:2002/08/26(Mon) 15:56
投稿者名:MS
URL :
タイトル:
Re^3: ActiveFormの切り替え方法
> >ITaskbarListを使う方法なら、最小化してもAlt+Tabから
> >元に戻せるんですが。
>
タイプライブラリを自作するにはそれなりに知識が必要ですが、
できたものを利用するだけなら簡単です。
例えば、以下のサイトにズバリのサンプルがありますので、
直ぐ使えると思います。
http://www.msjogren.net/dotnet/eng/samples/vb6_taskbarlist.asp

投稿時間:2002/08/26(Mon) 16:07
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^4:ActiveFormの切り替え方法
ありがとうございます。
あのサンプルは見てはみたのですが、どこで何をしているのかが
サッパリだったもので。(;_;)

投稿時間:2002/08/26(Mon) 18:13
投稿者名:MS
URL :
タイトル:
Re^5:ActiveFormの切り替え方法
今回使うのは

DeleteTabメソッド(タスクバーのアイテムを削除)
Dim objTaskbar As New TaskbarList
objTaskbar.HrInit
objTaskbar.DeleteTab Me.hwnd
Set objTaskbar = Nothing

AddTabメソッド(タスクバーにアイテムを追加)
Dim objTaskbar As New TaskbarList
objTaskbar.HrInit
objTaskbar.AddTab Me.hwnd
objTaskbar.ActivateTab Me.hwnd
Set objTaskbar = Nothing

以上だけでいいと思います。

投稿時間:2002/08/26(Mon) 18:44
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re6:ActiveFormの切り替え方法
ありがとうございました。めんどうがらず調べてみるものですね
ひとつ、ひとつ調べていたら結局これだけで動作しました。

Option Explicit
Private oTaskbar As TaskbarList
Private Sub Command1_Click()
    oTaskbar.AddTab Me.hWnd     'タスクバーに表示
End Sub
Private Sub Command2_Click()
    oTaskbar.DeleteTab Me.hWnd  'タスクバーから削除
End Sub
Private Sub Form_Load()
    Set oTaskbar = New TaskbarList
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Set oTaskbar = Nothing
End Sub

ひとつわからないのですが
objTaskbar.HrInit この部分は何をしているのでしょうか?

コメントアウトしても問題ないようですが?

投稿時間:2002/08/26(Mon) 19:40
投稿者名:MS
URL :
タイトル:
Re: Re6:ActiveFormの切替
> objTaskbar.HrInit この部分は何をしているのでしょうか?
> コメントアウトしても問題ないようですが?

ITaskbarList::HrInit Method
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/shellcc/platform/shell/reference/ifaces/itaskbarlist/hrinit.asp

によると、

TaskbarListオブジェクトを初期化します。
他のITaskbarListメソッドを呼ぶ前に、このメソッドを呼ぶ必要があります。
このメソドが失敗すると、他のメソッドを呼ぶことができません。

の様なことが書いてあります。
それ以上詳しいことはわかりません。

投稿時間:2002/08/26(Mon) 19:58
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
(お礼)ActiveForm切替
いろいろとありがとうございました。
お蔭様でこちらの方法も少し理解する事ができました。