Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
holmik
0 / 0 / 0
Регистрация: 02.05.2010
Сообщений: 61
#1

Стрелки с раскрывающимися меню в ComboBox - VB

02.05.2010, 02:40. Просмотров 1403. Ответов 10
Метки нет (Все метки)

Как настроить ComboBox так, чтобы в нём были стрелки с раскрывающимися меню? Вроде 'Пуск-программы-и т. д.'. Требуется многоуровневое меню, вроде как при нажатии на кнопку 'Пуск', где после 'Программы' справа есть стрелочка с другими пунктами.
http://www.cyberforum.ru/visual-basic/thread474863.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2010, 02:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Стрелки с раскрывающимися меню в ComboBox (VB):

Как сделать чтобы при выборе в combobox , менялись значения в других combobox? Visual Basic 6.0
Есть несколько компонентов Combobox, списки через Form_load я прописал, теперь...

Стрелки на осях графика VBA
Добрый вечер, пожалуйста подскажите как добавить на график стрелки на концах...

Имитация вращения стрелки спидометра
Люди. ето самый ламерский вопрос, нo помогите. (сам я не прграммер, это...

Нужно сделать вертикальное меню с раскрывающимися вкладками
Здравствуйте, помогите пожалуйста сделать вертикальное меню. дело в том, что на...

Свой ComboBox. Как узнать положение стрелки?
Всем доброго времени суток! Пишу свой ComboBox с возможностью выравнивания...

10
brown
02.05.2010, 10:32 #2
Думаю, что комбобокс тут вообще не поможет.
А чем тебя стандартное меню не устраивает? Создай менюшку со всеми вложениями и вызывай её как
PopMenu myMenu

Чтобы хотеть получить желаемый ответ, надо уметь задать правильный вопрос.
holmik
0 / 0 / 0
Регистрация: 02.05.2010
Сообщений: 61
05.05.2010, 08:44  [ТС] #3
Спасибо. А как сделать выпадающую менюшку не в верхней строке, а например, на кнопке?
0
Messir
05.05.2010, 15:02 #4
В 'верхней стороке' делаешь его Visible=False, а при MouseDown/MouseUp на кнопке - PopupMenu mnu_Name (mnu_Name - имя твоей менюхи)
holmik
0 / 0 / 0
Регистрация: 02.05.2010
Сообщений: 61
07.05.2010, 18:26  [ТС] #5
Ещё раз спасибо. Теперь у меня другая проблема: мне нужно создать меню из базы данных в проессе работы программы. Это реально сделать?
Я по сети шарился, ответа не нашёл. Считать данные из базы я вроде как могу ;-), но создать на их основе новое меню не получается :-(.
0
Comanche
08.05.2010, 01:31 #6
'Я по сети шарился, ответа не нашёл' - ?!?!
Значил, ОЧЕНЬ ПЛОХО искал. Примеров уйма.
holmik
0 / 0 / 0
Регистрация: 02.05.2010
Сообщений: 61
08.05.2010, 11:43  [ТС] #7
Искал, конечно, через Рамблер, но НИЧЕГО путного не нашёл.
Дайте хоть ссылочку на ОДИН нормальный пример.
0
Comanche
08.05.2010, 14:11 #8
Набираем в поисковике Google строчку:
'динамическое создание меню VB'

Шестой найденный ресурс ведёт на страничку 'Работа с меню' (адрес: http://visualbasic.km.ru/menu.html), на которой есть след. ссылка:

http://visualbasic.km.ru/menu/02.html

На ней - нужный вам код.

Если нужно больше примеров на тему - то ищите на строчку 'CreatePopupMenu VB' ('CreateMenu VB').
holmik
0 / 0 / 0
Регистрация: 02.05.2010
Сообщений: 61
08.05.2010, 23:58  [ТС] #9
Большое спасибо за ссылку. Извините чайника. Я начинающий программер, и с менюхами столкнулся второй раз в жизни.
Хоть что-то нашёл. Долго со всей этой бодягой ковырялся, но много непоняток. Постараюсь по порядку.
1. В VB, я так понимаю, можно с помощью Menu Editor создать полноценную менюшку. С помощью API-функций можно создать меню с нуля, и далее извращаться над ним по полной программе. Я полдня убил на то, чтобы попытаться в меню, созданное Menu Editor, добавить записи из своей БД, и не смог понять, как созданное меню модифицровать с помощью функции AppendMenu.
2. Посмотрел ссылку http://visualbasic.km.ru/menu/02.html, подумал,
создал меню с нуля, забацал туда записи из БД MS Access (на русском) и получил меню с кучей кракозябров.
3. Осталось загадкой, как вновь созданное меню привязать, например, к кнопке. Попытки играться с координатами кнопки как например Top, Left и т.д. не привели вообще ни к чему.

Чтобы не злоупотреблять сильно ничьим терпением, постараюсь более точно сформулировать проблему.
Есть база данных с двумя таблицами (это для этой задачи, а так их больше). В одной таблице содержатся названия групп элементов, а в другой - сами элементы. И при нажатии на кнопку должна вылетать менюха, в первом уровне которой содержатся названия групп элементов со стрелочками вправо. При наведении курсора на группу должны выскакивать элементы, этой группе принадлежащие. Вот собственно и всё.
Далее название элемента просто должно передаваться в текстовую переменную.
Вариантов я вижу только два. Либо API-функциями делать всё с нуля (тогда вопрос как сделать стрелочки и как привязать меню к кнопке), либо добавлять строчки со стрелочками в меню 'Группы', созданное в Menu Editor. Второй вариант предпочтительнее (т.к. некоторые группы могут быть забиты в програму изначально), но на крайний случай хотелось бы узнать про первый. И что делать с кракозябрами? Прошу прощения за 'чайниковые вопросы', но всё-таки хочется в этом разобраться.
0
Comanche
09.05.2010, 13:20 #10
Создай проект, в нём - форму с кнопкой Command1. В коде формы размести код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
Const MF_CHECKED = &H8&
Const MF_APPEND = &H100&
Const TPM_LEFTALIGN = &H0&
Const TPM_RETURNCMD = &H100
Const MF_DISABLED = &H2&
Const MF_GRAYED = &H1&
Const MF_SEPARATOR = &H800&
Const MF_STRING = &H0&
Const MF_POPUP = &H10
Const MF_BYPOSITION = &H400&
'
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
'
Private Declare Function GetWindowRect Lib 'user32.dll' ( _
    ByVal hWnd As Long, _
    lpRect As RECT) As Long
Private Declare Function GetMenuString Lib 'user32.dll' Alias 'GetMenuStringA' ( _
     ByVal hMenu As Long, _
     ByVal wIDItem As Long, _
     ByVal lpString As String, _
     ByVal nMaxCount As Long, _
     ByVal wFlag As Long) As Long
Private Declare Function CreatePopupMenu Lib 'user32' () As Long
Private Declare Function InsertMenu Lib 'user32.dll' Alias 'InsertMenuA' ( _
     ByVal hMenu As Long, _
     ByVal nPosition As Long, _
     ByVal wFlags As Long, _
     ByVal wIDNewItem As Long, _
     ByVal lpNewItem As Any) As Long
Private Declare Function TrackPopupMenu Lib 'user32' ( _
    ByVal hMenu As Long, _
    ByVal wFlags As Long, _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal nReserved As Long, _
    ByVal hWnd As Long, _
    ByVal lprc As Any) As Long
Private Declare Function AppendMenu Lib 'user32' Alias 'AppendMenuA' ( _
    ByVal hMenu As Long, _
    ByVal wFlags As Long, _
    ByVal wIDNewItem As Long, _
    ByVal lpNewItem As Any) As Long
Private Declare Function DestroyMenu Lib 'user32' (ByVal hMenu As Long) As Long
'
Dim hMenu As Long
'
Private Sub Command1_Click()
    Const maxLen As Long = 255&
    Dim cmdRect As RECT
    Dim menuX As Long, menuY As Long
    Dim menuId As Long, menuText As String
'
    ' Получаем координаты нижнего левого угла кнопки Command1:
    GetWindowRect Command1.hWnd, cmdRect
    menuX = cmdRect.Left
    menuY = cmdRect.Bottom
'
    'Показываем всплывающие меню и определяем, по какому элементу щёлкнули:
    menuId = TrackPopupMenu(hMenu, TPM_LEFTALIGN Or TPM_RETURNCMD, menuX, menuY, 0, Me.hWnd, ByVal 0&)
    If menuId <> 0& Then
        ' был сделан щелчок по элементу с id = menuId
        menuText = Space$(maxLen)
        GetMenuString hMenu, menuId, menuText, maxLen, 0&
        menuText = Left$(menuText, InStr(1, menuText, vbNullChar) - 1)
        MsgBox 'Вы выбрали пункт меню:' + vbCr + menuText, vbInformation, 'Информация:'
    End If
End Sub
'
Private Sub Form_Load()
    Dim dataArr(1 To 2, 0 To 3) As String
    Dim i As Integer, j As Integer
    Dim groupMenu As Long, elementMenu As Long
'
    Command1.Caption = 'Список элементов'
    Command1.Width = 2000
    Command1.Height = 500
'
    ' Создаём пустое всплывающее меню
    hMenu = CreatePopupMenu()
'
    ' Заполняем меню двухуровневой иерархией ваших элементов. Для определённости
    ' предполагаем, что все элементы читаются из БД в двумерный строковый массив,
    ' в нулевом элементе второго индекса которого хранится имя группы элементов.
    ' Чтобы не писать здесь код работы с базой (формат которой неизвестен), просто
    ' присвоим значения элементам массива напрямую:
'
    dataArr(1, 0) = 'Каши'
    dataArr(1, 1) = 'Овсяная'
    dataArr(1, 2) = 'Гречневая'
holmik
0 / 0 / 0
Регистрация: 02.05.2010
Сообщений: 61
15.05.2010, 00:45  [ТС] #11
Огромадное спасибо!!! Всё работает, всё понятно, даже с API функциями немного разобрался. Ещё раз большое спасибо!!! Вопросов больше нет.
0
15.05.2010, 00:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2010, 00:45
Привет! Вот еще темы с решениями:

Стрелки в меню
Доброго времени суток, господа! Суть вопроса вот в чём - есть меню. Надо...

Меню через стрелки
Нужно написать меню через стрелки вверх низ. Меню формата: 1.Vuvestu...

Изменились стрелки в контекстном меню
Изменились стрелки в контекстном меню Есть подозрения на программу ReGet...

Меню в программе должно реагировать только на стрелки
Доброго времени суток форумчане, кто может, помогите пожалуйста, нужно что бы в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru