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

投稿時間:2002/08/22(Thu) 09:39
投稿者名:チェッカル
Eメール:
URL :
タイトル:
タスクバーの制御
複数のフォームを開いた時に、タスクバーに複数表示されるのを
随時アクティブなフォームのみ表示させたいんですけど
どうしたらいいんでしょう?

投稿時間:2002/08/22(Thu) 17:13
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: タスクバーの制御
回答ではありません。
以前、素人工房さんのところに「実行時にShowInTaskbarプロパティを変更する」が有ったのですが
現在、サイトを閉鎖されています。
多分、どなたか方法をご存知だと思うのですが、フォームの外観を変更せずにとかの条件等があれば
難しそうですね。


この方と同一の方でしたらマルチポストはマナー違反ですよ
せっかく、レスがつきやすいように、恥をしのんでゴミレスをしたのに残念です。
その上、どちらにも返信がないなんて!! 

#186 タスクバーの制御
匿名186 2002年8月21日(水)12:30  

投稿時間:2002/08/22(Thu) 17:27
投稿者名:よねKEN
Eメール:
URL :http://www5b.biglobe.ne.jp/~yone-ken/
タイトル:
Re: タスクバーの制御
> 複数のフォームを開いた時に、タスクバーに複数表示されるのを
> 随時アクティブなフォームのみ表示させたいんですけど
> どうしたらいいんでしょう?

あまりいい手じゃないですが、タスクバーに表示するためだけのフォームを用意して、
それ以外のフォームはすべてShowInTaskBar=Falseにしておくのはどうでしょう。
そのダミーフォームはLeftプロパティをマイナスに指定して画面外に追いやっておくとか。
#システムメニューの制御等が別途必要かもしれませんが。

Form1〜Form4を用意

' -- Form1 --
Private Sub Form_Load()
    Me.Move -10000, 0, 500, 500
    Form2.Show
End Sub

' --- Form2 だけ ---
Private Sub Form_Load()
    Form2.Show
    Form3.Show
    Form4.Show
End Sub

' -- Form 2〜4共通 --
Private Sub Form_Activate()
    Form1.Caption = Me.Caption
End Sub

投稿時間:2002/08/22(Thu) 19:23
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: タスクバーの制御
WS_EX_APPWINDOWスタイルを動的に付与・除去するとか。
# 確認せず。

投稿時間:2002/08/25(Sun) 07:01
投稿者名:MIKAN
Eメール:
URL :
タイトル:
Re^2: タスクバーの制御
> WS_EX_APPWINDOWスタイルを動的に付与・除去するとか。
> # 確認せず。

 スタイルを変更しても、タスクバーは変わらないので、表示を変更するためのきっかけが
必要みたいです。
 たとえば、
    Me.hide
    スタイルを変更
    Me.show

投稿時間:2002/08/25(Sun) 10:00
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: タスクバーの制御(タイトルバーが逆に)
>     Me.hide
>     スタイルを変更
>     Me.show

で試して見ました。タスクバーには表示されなくなったのですが
タイトルバーの部分が左右逆に表示されます。
これは、設定を変更しても戻りません。
私のやり方がまづいのでしょうか? ご指導のほどお願いします。

Option Explicit
Private Declare Function GetWindowLong Lib "user32" _
    Alias "GetWindowLongA" (ByVal hwnd As Long, _
    ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
    Alias "SetWindowLongA" (ByVal hwnd As Long, _
    ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function ShowWindow Lib "user32" _
    (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Private Const GWL_EXSTYLE = (-20)      
Private Const GWL_STYLE = (-16)
Private Const SW_HIDE = 0
Private Const SW_SHOW = 5
Private Const WS_EX_APPWINDOW = &H40000  

Private Sub Command1_Click()
    Dim WStyle As Long
    Dim Result As Long
    WStyle = GetWindowLong(Me.hwnd, GWL_STYLE)
    WStyle = WStyle Xor WS_EX_APPWINDOW
    Result = ShowWindow(Me.hwnd, SW_HIDE)
    Result = SetWindowLong(Me.hwnd, GWL_EXSTYLE, WStyle)
    Result = ShowWindow(Me.hwnd, SW_SHOW)
End Sub

失礼しました。
WStyle = GetWindowLong(Me.hwnd, GWL_STYLE) → WStyle = GetWindowLong(Me.hwnd,GWL_EXSTYLE)
これでOKのようです。 お騒がせしました。m(__)m

投稿時間:2002/08/25(Sun) 13:39
投稿者名:よねKEN
Eメール:
URL :
タイトル:
Re^3: タスクバーの制御
> > WS_EX_APPWINDOWスタイルを動的に付与・除去するとか。
> > # 確認せず。
>
>  スタイルを変更しても、タスクバーは変わらないので、表示を変更するためのきっかけが
> 必要みたいです。
>  たとえば、
>     Me.hide
>     スタイルを変更
>     Me.show

SetWindowLong関数のドキュメント。
http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/jpwinui/html/_win32_setwindowlong.asp

スタイル変更後はSetWindowPos関数の呼び出しが必要です。

投稿時間:2002/08/25(Sun) 14:35
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^4: タスクバーの制御
> スタイル変更後はSetWindowPos関数の呼び出しが必要です。

これって下記ではだめでしょうか? 何も変化がないのですが
    Result = SetWindowPos(myForm.hwnd, HWND_TOP, 0, 0, 0, 0, _
                            SWP_NOMOVE Or SWP_NOSIZE Or SWP_FRAMECHANGED)

投稿時間:2002/08/25(Sun) 15:16
投稿者名:MIKAN
Eメール:
URL :
タイトル:
Re^5: タスクバーの制御
> > スタイル変更後はSetWindowPos関数の呼び出しが必要です。
>
> これって下記ではだめでしょうか? 何も変化がないのですが
>     Result = SetWindowPos(myForm.hwnd, HWND_TOP, 0, 0, 0, 0, _
>                             SWP_NOMOVE Or SWP_NOSIZE Or SWP_FRAMECHANGED)

 スタイル変更後はSetWindowPos関数の呼び出しが必要な場合がありますが、この場合は、
花ちゃんさんのソースのままで、SetWindowPos関数を追加する必要はないと思います。

投稿時間:2002/08/25(Sun) 15:21
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
(お礼) タスクバーの制御
>  スタイル変更後はSetWindowPos関数の呼び出しが必要な場合がありますが、この場合は、
> 花ちゃんさんのソースのままで、SetWindowPos関数を追加する必要はないと思います。

回答、ありがとうございます。

でも、無限ループに入ってしまうので当初のような使用はできないのでしょうか?
何かいい方法があれば、ご教授願います。

投稿時間:2002/08/25(Sun) 15:50
投稿者名:よねKEN
Eメール:
URL :
タイトル:
Re^4: タスクバーの制御
> スタイル変更後はSetWindowPos関数の呼び出しが必要です。
WS_EX_APPWINDOWのスタイル変更では、
SetWindowPos関数の呼び出しでは反映されないみたいですね。申し訳ないです。

拡張スタイルについて調べると
|| WS_EX_APPWINDOW   一番上にあるウィンドウを表示するときに、強制的にタスクバーに含みます。
とあるので、MIKANさんのおっしゃるように
「表示する」というきっかけがどうも必要そうです。

投稿時間:2002/08/25(Sun) 23:53
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
(お礼) タスクバーの制御
> SetWindowPos関数の呼び出しでは反映されないみたいですね。申し訳ないです。
結局私の使用方法が悪かったようです。
いろいろお手数をおかけしました。ありがとうございました。

でも、これ、元の質問は私じゃないんだけどな!

投稿時間:2002/08/23(Fri) 07:35
投稿者名:MS
URL :
タイトル:
Re: タスクバーの制御
> 複数のフォームを開いた時に、タスクバーに複数表示されるのを
> 随時アクティブなフォームのみ表示させたいんですけど

V友のQ&A2に、ITaskbarListを使う方法が回答されてますけど。