最小化してタスクバーに格納されたボタンを使用不可にするには?

解決


はな  2006-04-11 02:01:02  No: 95005

お世話になっております。
VB6.0  SP5  WIN2000  で開発しております。

メインフォームから、サブフォームをshowで表示し、
メインフォームを最小化すると、サブフォームも最小化されます。

その際、サブフォームはタスクバーには入らず、タスクバーの上に
最小化ボタンとなって表示されていて、それを表示したくないのですが、
可能でしょうか。
サブメニューの「ShowInTaskbarプロパティ」はFalseにしてあります。

サブメニューの最小化ボタンを消す事が不可能であれば、
これをWクリックしても使用不可にしたいのですが、
上記2つのどちらかは可能でしょうか。

ご存知の方がおられましたら、ご教授の方お願いしたいと思います。
よろしくお願いします。


特攻隊長まるるう  2006-04-14 20:06:32  No: 95006

…途中から『サブメニュー』というフォームとは違う意味を持つ
言葉を使ってるけど「ShowInTaskbarプロパティ」があるのは
フォームだと思うからサブフォームなんだろうなぁ…。

…普通に MinButton プロパティ変更すれば?


はな  2006-04-18 18:58:06  No: 95007

特攻隊長まるるうさん、 お返事ありがとうございます。
理解してない用語を使って意味をわかりにくくして申し訳ありません。

再度質問させて頂きますと、Form1とForm2の2画面ありまして、
Form1の中で、「Form2.Show」と記述してFORM2を表示させています。

Form1を最小化した時、Form2も同時に最小化したいので、
Form1のラベルをクリックしたら、
この2つのフォームを最小化する関数へ飛ばして最小化しています。
以下、最小化する関数です。
------------------------------------------------------------
public function min()

dim  lngHndl  as  long

lngHndl = ShowWindow(ByVal Form1.hwnd, ByVal SW_MINIMIZE)
lngHndl = ShowWindow(ByVal Form2.hwnd, ByVal SW_MINIMIZE)

end function
------------------------------------------------------------
しかし、デフォルトだと、フォーム2つ共、タスクバーに入ってしまいます。
Form2は最小化時に、見えなくなって欲しい(使えなくしたい)ので、
Form2の「ShowInTaskbar」をFalseにしました。

すると、今度は最小化時にForm2はタスクバーに入らず、
タスクバーの左上に表示されました。
この現象がまず謎で、これを消せれば問題は解決するのですが、
消せなければ、このタスクバーの左上に出る最小化状態のForm2を
Wクリックしても元に戻らないように、制御不可能にしたいのです。
これを実現する方法がわからず、質問させて頂きました。

解決策もさることながら、Form2を最小化時にタスクバーの左上に出るのは
なぜかをご存知の方がいらっしゃったら教えて頂きたいと思います。

「最小化ボタン」などと紛らわしい言葉を使い、内容がわからない状態にしてしまい
申し訳ありませんでした。

上記ご存知の方、よろしくご指導願います。


GOD  2006-04-18 22:18:35  No: 95008

見えなくしたいのならForm2.Visible = False にしたらどうですか。


はな  2006-04-19 00:06:14  No: 95009

GODさん、ありがとうございます。

なるほど、難しく考えず、フォームを消すやり方があったとは。

なぜ最小化時にタスクバーの上に最小化したフォームが出るのかという
謎は残りますが、やりたい事は解決しました。

盲点でした。ありがとうございました。


特攻隊長まるるう  2006-04-19 00:47:42  No: 95010

Windows の仕様じゃないかと思うけど…。あ、以下は適当な解釈です。
内容の真偽は保証しませんのであしからずご了承ください。

例えばエクセルなんかでブックを複数開いて、各ブックを最大化せず、
複数の Window のように表示させておき、各ブックを最小化すると
エクセルの領域の左下に最小化されたバーが並んでいきます。

これが Windows の標準的な動きではないかと。

で、デスクトップにはタスクバーがあって、標準ではそこに格納される
わけですが、これが特殊な仕様で、タスクバーに入れない設定にすると、
本来の動きに戻るだけではないかと。…だって、今回の場合は、プログラム
から制御することが前提になってるけど、もし、標準のウィンドウでタスクバー
に表示されず、デスクトップにも、どこにも表示されなければ、ユーザが
最小化の操作をした時点で、どこからも操作できないウィンドウがメモリ上に
居座りつづけるわけでしょ?

…困るよね?

Visible = False なら、これは完全にプログラムから非表示で操作している
わけだし、そのまま画面が表示されずにプログラムが終了できないなら、
それはプログラムのバグだからね。


はな  2006-04-19 02:59:38  No: 95011

あー・・・
なんかやんわりと納得しました。

今回私はウィンドウを2つ用意して、その一つからもう一つをSHOWしたのが
原因かと思っていましたが、
試しにForm1だけ用意してShowInTaskbar=Falseにして最小化したら、
タスクバーの左上に最小化されました。

これが特攻隊長まるるうさんの推測するようにWindowsの仕様なのかは
私には判断出来ませんが、かなり勉強になりました。

気になっていたので大変助かりました。
特攻隊長まるるうさん、丁寧な説明ありがとうございます。


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

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






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