Есть всплывающее меню в форме без полей - PullRequest
3 голосов
/ 21 марта 2011

Как добавить всплывающее меню в форму без полей VB 6.0?

Каждый раз, когда я добавляю меню, граница появляется снова, даже если для BorderStyle установлено значение vbBSNone и меню скрыто.

Ответы [ 3 ]

5 голосов
/ 21 марта 2011

Это выполнимо, но несколько неудовлетворительно (для меня).Имея какие-либо свойства меню в форме, граница по умолчанию снова станет видимой.Однако есть несколько обходных путей:

1) Метод, который, я думаю, вы предпочтете, включает создание второй формы, которую вы никогда не будете «использовать» или видеть.Поместите меню в эту вторую форму, а затем вызовите это меню из формы, которую вы действительно хотите использовать.Предполагая, что вы используете 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) Другой способ, используя только первую форму, можно установить ControlBox формы False и оставить свойство Caption пустым.Это «удаляет» границу, когда BorderStyle установлен на 0 ... Я поставил remove в кавычках, потому что она, к сожалению, оставит черную линию в 1 пиксель.Это не выглядит плохо, но это не может быть жизнеспособным решением для вас.

3) Последний способ, о котором я читал, но ничего не сделал с собой, это использовать CreatePopupMenu API, найденный на http://allapi.mentalis.org/apilist/CreatePopupMenu.shtml

Надеюсь, это поможет!

0 голосов
/ 17 апреля 2012

Для удобства всех, кто приходит сюда и ищет ответ на эту проблему, вот очень простой метод 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
0 голосов
/ 21 марта 2011

Это возможно. Установите для BorderStyle формы значение None, для Caption - пустую строку, ControlBox, для MaxButton MinButton - значение False. Затем с помощью редактора меню VB6 создайте меню верхнего уровня с именем «mnuPopup» и установите для его свойства Visible значение False. Создайте остальную часть меню как подменю этого меню верхнего уровня, установив для их свойств Visible значение True. Затем в коде формы вы можете отобразить меню с помощью PopupMenu menuPopup. Это выглядит так:

enter image description here

...