タスクバーにたくさんオブジェクトを表示させないようにするためには?


あめ  2003-04-22 08:17:12  No: 106816

こんばんは、フォームをたくさん使う場合、普通にプログラミングするとタスクバーにたくさんオブジェクトが表示されますよね?そこで、今実行しているフォームだけ、タスクバーに表示させたいのですがどうすればよろしいのでしょうか?showIntaskberでやって見ましたが、実行中の読み取りは出来るのものture,falseを変えることはできないようなのです。お願いします。


Loreley  2003-04-22 12:22:26  No: 106817

ShowInTaskbarをデザイン時にTrueまたはFalseに設定すれば大丈夫だと思いますよ


Loreley  2003-04-22 12:23:00  No: 106818

あ、失礼、質問の趣旨とちがっていましたね。


Loreley  2003-04-22 13:15:45  No: 106819

普通はSetWindowLongとかAPIでやると思います。
・・・が、うちでは失敗してしまいました(恥)
SetWindowLong(Form1.hwnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW)
だと思ったんですが・・。
う〜む。


たかみちえ  URL  2003-04-22 15:16:45  No: 106820

Delphiでの常套手段より抜粋します。
SetWindowLong(Application.Handle,GWL_EXSTYLE,
  GetWindowLong(Application.Handle,GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
  VBではハンドルを示す名前が違うのと、;がいるか要らないかだけなので、
それで十分でしょう。
  ただしこれだと、ツールウィンドウになります。どうなるかは、自分の目で確かめてください。

  他、もう少し消極的というか、動的にはできないですけど、
フォームを開くとき、親を指定しただけでも、それで平気だったような…。
(詳しくはヘルプを)
  要はメインウィンドウがタスクバーに表示されるってだけですので。


nanashi  2003-04-22 19:12:04  No: 106821

使っていないウィンドウを隠すとか、新しいウィンドウをモーダルで表示するとか。
同時にいくつものウィンドウを使うなら思い切ってMDIにしちゃうとか(^^;

ちなみに親を指定しただけではダメみたいでした。


Loreley  2003-04-23 00:28:46  No: 106822

SetWindowLong(Form1.hwnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW)
ですが今日はなぜだかうまくいきました。
なんか宣言間違えてたのかな(^^;;;;

うまくいったので(笑)
−−標準モジュール
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_EXSTYLE = (-20)
Public Const GWL_STYLE = (-16)
Public Const WS_EX_TOOLWINDOW  As Long = &H80
Public Const WS_EX_APPWINDOW As Long = &H40000 
Public Const WS_EX_WINDOWEDGE As Long = &H100& 
Public lWndlng as long

−−
フォーム1
private sub Commnad1_Click()
lWndlng = CLng(SetWindowLong(Form1.hwnd, GWL_EXSTYLE, _
GetWindowLong(Form1.hwnd, GWL_EXSTYLE) Or WS_EX_TOOLWINDOW))

'lWndlng=CLng(SetWindowLong(Form1.hwnd, GWL_EXSTYLE, _
'GetWindowLong(Form1.hwnd, GWL_EXSTYLE) XOr WS_EX_APPWINDOW))
'こちらでもよいが最小化ボタンが残るので・・・
end Sub

private sub Commnad2_Click()
lWndlng = CLng(SetWindowLong(Form1.hwnd, GWL_EXSTYLE, _
WS_EX_WINDOWEDGE Or WS_EX_APPWINDOW))
end Sub

という感じでしょうか。
うーん、なんで昨日できなかったんだろう。
TOOLWINDOWとTOPMOST間違えてたかなぁ(笑)

きちんと戻せるようになってから使うことをお勧めします。
Formが見えないだけで終了してないとかにならないように気をつけてくださいね


Loreley  2003-04-23 00:33:59  No: 106823

あ、大事なことを書き忘れました。(こういうの多いですね>自分)
Command1が消してCommand2が復活です。

なんでClngでくくってるんだろう(自爆)

lWndlng = SetWindowLong(Form1.hwnd, GWL_EXSTYLE, _
GetWindowLong(Form1.hwnd, GWL_EXSTYLE) Or WS_EX_TOOLWINDOW)

ですね。


あめ  2003-05-11 12:05:29  No: 106824

返信送れましたすみません。
私が初心者なので違いが分からなかったのかもしれませんが
上の方法試した結果なにも起こりませんでした。
説明がわかりずらかったかもしれないのでもう一度・・
例えば

’メインフォームで
Private Sub Commnad1_Click()
call Form2.show
End Sub

’フォーム2
Private Sub Form2_Load()
End Sub

このようにしてコマンド1をクリックするとタスクバーに2個表示されます。
やりたいのは、★表示される奴を1つ★にして、この間に他のソフトとかをいじるとデスクトップからソフトの画面が隠れます。そして上の★で囲まれた奴をクリックすると元の画面に戻るようにしたいです。理想はFFFTPのような感じです。お願いします


VBレスキュ-(花ちゃん)  URL  2003-05-11 22:02:19  No: 106825

SetWindowPos を使った方法でもいいのですが、
Activeなフォームを最小化すると、そのフォームが表示されなくなるようです。

ITaskbarListを使う方法なら、最小化してもAlt+Tabから
元に戻せるので便利かと思います。

  下記URLの プログラム専用掲示板の No.191 からの一連のスレッドを見て下さい
  又は ITaskbarList でWEBを検索して見て下さい。

  http://www.bcap.co.jp/hanafusa/


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

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






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