こんばんは、フォームをたくさん使う場合、普通にプログラミングするとタスクバーにたくさんオブジェクトが表示されますよね?そこで、今実行しているフォームだけ、タスクバーに表示させたいのですがどうすればよろしいのでしょうか?showIntaskberでやって見ましたが、実行中の読み取りは出来るのものture,falseを変えることはできないようなのです。お願いします。
ShowInTaskbarをデザイン時にTrueまたはFalseに設定すれば大丈夫だと思いますよ
あ、失礼、質問の趣旨とちがっていましたね。
普通はSetWindowLongとかAPIでやると思います。
・・・が、うちでは失敗してしまいました(恥)
SetWindowLong(Form1.hwnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW)
だと思ったんですが・・。
う〜む。
Delphiでの常套手段より抜粋します。
SetWindowLong(Application.Handle,GWL_EXSTYLE,
GetWindowLong(Application.Handle,GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
VBではハンドルを示す名前が違うのと、;がいるか要らないかだけなので、
それで十分でしょう。
ただしこれだと、ツールウィンドウになります。どうなるかは、自分の目で確かめてください。
他、もう少し消極的というか、動的にはできないですけど、
フォームを開くとき、親を指定しただけでも、それで平気だったような…。
(詳しくはヘルプを)
要はメインウィンドウがタスクバーに表示されるってだけですので。
使っていないウィンドウを隠すとか、新しいウィンドウをモーダルで表示するとか。
同時にいくつものウィンドウを使うなら思い切ってMDIにしちゃうとか(^^;
ちなみに親を指定しただけではダメみたいでした。
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が見えないだけで終了してないとかにならないように気をつけてくださいね
あ、大事なことを書き忘れました。(こういうの多いですね>自分)
Command1が消してCommand2が復活です。
なんでClngでくくってるんだろう(自爆)
lWndlng = SetWindowLong(Form1.hwnd, GWL_EXSTYLE, _
GetWindowLong(Form1.hwnd, GWL_EXSTYLE) Or WS_EX_TOOLWINDOW)
ですね。
返信送れましたすみません。
私が初心者なので違いが分からなかったのかもしれませんが
上の方法試した結果なにも起こりませんでした。
説明がわかりずらかったかもしれないのでもう一度・・
例えば
’メインフォームで
Private Sub Commnad1_Click()
call Form2.show
End Sub
’フォーム2
Private Sub Form2_Load()
End Sub
このようにしてコマンド1をクリックするとタスクバーに2個表示されます。
やりたいのは、★表示される奴を1つ★にして、この間に他のソフトとかをいじるとデスクトップからソフトの画面が隠れます。そして上の★で囲まれた奴をクリックすると元の画面に戻るようにしたいです。理想はFFFTPのような感じです。お願いします
SetWindowPos を使った方法でもいいのですが、
Activeなフォームを最小化すると、そのフォームが表示されなくなるようです。
ITaskbarListを使う方法なら、最小化してもAlt+Tabから
元に戻せるので便利かと思います。
下記URLの プログラム専用掲示板の No.191 からの一連のスレッドを見て下さい
又は ITaskbarList でWEBを検索して見て下さい。
http://www.bcap.co.jp/hanafusa/
ツイート | ![]() |