VB 6.0のボーダレスフォームにポップアップメニューを追加するにはどうすればよいですか?
メニューを追加するたびに、BorderStyle
がに設定されvbBSNone
ていてメニューが非表示になっている場合でも、境界線が再表示されます。
それは実行可能ですが、(私にとっては)やや不満です。フォームにメニュー プロパティを設定すると、境界線がデフォルトで表示されるようになります。ただし、いくつかの回避策があります。
1) あなたが好むと思う方法は、実際には決して「使用」したり見たりすることのない 2 番目のフォームを作成することです。その 2 番目のフォームにメニューを配置し、実際に使用するフォームからそのメニューを呼び出します。Form_MouseDown
これを呼び出すために使用していると仮定すると、コードは次のとおりです。
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And vbRightButton Then PopupMenu Form2.mnuYourMenu
End sub
ただし、この 2 番目のフォームをメモリからアンロードすることを忘れないでください。
2) 最初のフォームのみを使用する別の方法は、フォームのControlBox
toを設定しFalse
、Caption
プロパティを空白のままにすることです。が 0 に設定されている場合、これは境界線を「削除」しBorderStyle
ます...残念ながら 1 ピクセルの黒い線が残るため、removes を引用符で囲みます。見た目は悪くありませんが、実行可能なソリューションではない可能性があります。
3) 私が読んだものの、自分で何もしていない最後の方法は、http://allapi.mentalis.org/apilist/CreatePopupMenu.shtmlCreatePopupMenu
にあるAPIを使用することです。
お役に立てれば!
この問題に対する答えを探してここに来る他の人の利益のために、機能する非常に単純な API メソッドを次に示します。
宣言:
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 GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Const GWL_STYLE = -16, WS_BORDER = &H800000
Form_Load で:
SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) And Not WS_BORDER
これは可能です。フォームの BorderStyle を None に、Caption を空の文字列に、ControlBox を、MaxButton MinButton を False に設定します。次に、VB6 のメニュー エディターを使用して、「mnuPopup」という名前の最上位メニューを作成し、その Visible プロパティを False に設定します。メニューの残りの部分をその最上位メニューのサブメニューとして作成し、それらの Visible プロパティを True に設定します。次に、フォームのコードで、 を使用してメニューを表示できますPopupMenu menuPopup
。次のようになります。