Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 02.05.2010
Сообщений: 61

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

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

Студворк — интернет-сервис помощи студентам
Как настроить ComboBox так, чтобы в нём были стрелки с раскрывающимися меню? Вроде 'Пуск-программы-и т. д.'. Требуется многоуровневое меню, вроде как при нажатии на кнопку 'Пуск', где после 'Программы' справа есть стрелочка с другими пунктами.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.05.2010, 02:40
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

Если нужно больше примеров на тему - то ищите на строчку 'CreatePopupMenu VB' ('CreateMenu VB').
0 / 0 / 0
Регистрация: 02.05.2010
Сообщений: 61
08.05.2010, 23:58  [ТС]
Большое спасибо за ссылку. Извините чайника. Я начинающий программер, и с менюхами столкнулся второй раз в жизни.
Хоть что-то нашёл. Долго со всей этой бодягой ковырялся, но много непоняток. Постараюсь по порядку.
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
Создай проект, в нём - форму с кнопкой 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) = 'Гречневая'
0 / 0 / 0
Регистрация: 02.05.2010
Сообщений: 61
15.05.2010, 00:45  [ТС]
Огромадное спасибо!!! Всё работает, всё понятно, даже с API функциями немного разобрался. Ещё раз большое спасибо!!! Вопросов больше нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2010, 00:45
Помогаю со студенческими работами здесь

Меню через стрелки
Нужно написать меню через стрелки вверх низ. Меню формата: 1.Vuvestu informaciy pro cex na ekran 2.Vuvestu vsy info ...

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

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

При наведении стрелки мыши на выпадающее меню кнопки выделить белым цветом
выпадающее меню на html и css скачать в архиве, для просмотра html -кода отрыть файл главная с помощью блокнота

Во сколько раз угловая скорость минутной стрелки часов больше угловой скорости часовой стрелки
Во сколько раз угловая скорость минутной стрелки часов больше угловой скорости часовой стрелки?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru