Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
2 / 2 / 1
Регистрация: 04.10.2010
Сообщений: 85

Проектирование меню

26.03.2011, 07:47. Показов 3106. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помощи в создании меню следующего вида(только меню; процедуры,вызываемые в ответ на выбор команды смогу написать сам):
Миниатюры
Проектирование меню  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.03.2011, 07:47
Ответы с готовыми решениями:

Проектирование программы создания текстового меню
;;include\mams32\include\windows.inc ;;include \mams32\macros\macros.asm extern CreateWindowExA extern DefWindowProcA extern...

Матрицы. Записи. Файлы. Составление Меню. Проектирование БД
Матрицы Определить: а) среднее арифметическое элементов главной диагонали квадратной матрицы; б) среднее арифметическое элементов...

Работа с меню. При клике на кнопке меню или вне его, меню должно закрываться
Добрый вечер! Изучаю JQuery. Вот ради развития решил написать меню, практически такое же как на Хабре. Два дня ломаю голову над тем, как...

18
11 / 11 / 0
Регистрация: 23.03.2011
Сообщений: 199
31.03.2011, 12:15
Цитата Сообщение от dimok5 Посмотреть сообщение
Прошу помощи в создании меню следующего вида(только меню; процедуры,вызываемые в ответ на выбор команды смогу написать сам):
Еще актуально? Вот код:
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
Private Sub Workbook_Open()
Dim cbrMenu As CommandBar
   Dim cbrcMenu As CommandBarControl     '
   Dim cbrcSubMenu As CommandBarControl
' Удаление меню, если оно уже есть
      DeleteCustomMenu
  ' Создание меню вместо стандартного
   Set cbrMenu = Application.CommandBars.Add(strMenuName, msoBarTop, _
    True, True)
  ' Создание выпадающего меню с названием "Меню1"
   Set cbrcMenu = cbrMenu.Controls.Add(msoControlPopup, , , , True)
   With cbrcMenu
      .Caption = "&Меню1"
   End With
      ' Создание подменю Меню1/меню1
   Set cbrcSubMenu = cbrcMenu.Controls.Add(Type:=msoControlPopup, _
    temporary:=True)
   With cbrcSubMenu
      .Caption = "Меню1/меню1"
      .BeginGroup = True
   End With
      ' Создание пункта меню в подменю Меню1/меню1
   With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "Меню1/меню1/меню1"
      .OnAction = "menu1"
      .Style = msoButtonIconAndCaption
      .FaceId = 1591
       End With
   ' Создание пункта меню в подменю Меню1/меню1/меню2
      With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "Меню1/меню1/меню2"
      .OnAction = "menu2"
      .Style = msoButtonIconAndCaption
      .FaceId = 1590
      End With
       ' Создание подменю Меню1/меню2
   Set cbrcSubMenu = cbrcMenu.Controls.Add(Type:=msoControlPopup, _
    temporary:=True)
   With cbrcSubMenu
      .Caption = "Меню1/меню2"
      .BeginGroup = True
   End With
      ' Создание пункта меню в подменю Меню1/меню2
   With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "Меню1/меню2/меню1"
      .OnAction = "menu5"
      .Style = msoButtonIconAndCaption
      .FaceId = 1591
       End With
          ' Создание пункта меню в подменю Меню1/меню2
   With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "Меню1/меню2/меню2"
      .OnAction = "menu6"
      .Style = msoButtonIconAndCaption
      .FaceId = 1590
       End With
        ' Создание подменю Меню1/меню3
   Set cbrcSubMenu = cbrcMenu.Controls.Add(Type:=msoControlPopup, _
    temporary:=True)
   With cbrcSubMenu
      .Caption = "Меню1/меню3"
      .BeginGroup = True
   End With
      ' Создание пункта меню в подменю Меню1/меню3
   With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "Меню1/меню3/меню1"
      .OnAction = "menu11"
      .Style = msoButtonIconAndCaption
      .FaceId = 1591
       End With
          ' Создание пункта меню в подменю Меню1/меню3
   With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "Меню1/меню3/меню2"
      .OnAction = "menu12"
      .Style = msoButtonIconAndCaption
      .FaceId = 1590
       End With
  ' Создание выпадающего меню с названием "Меню2"
   Set cbrcMenu = cbrMenu.Controls.Add(msoControlPopup, , , , True)
   With cbrcMenu
      .Caption = "&Меню2"
   End With
                     ' Создание подменю Меню2/меню1
   With cbrcMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "&Меню2/меню1"
      .OnAction = "Меню8"
       End With
             ' Создание подменю Меню2/меню2
   With cbrcMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "&Меню2/меню2"
      .OnAction = "Меню9"
 End With
             ' Создание подменю Меню2/меню3
   With cbrcMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "&Меню2/меню3"
      .OnAction = "Меню10"
 End With
             ' Создание подменю Меню2/меню4
   Set cbrcSubMenu = cbrcMenu.Controls.Add(Type:=msoControlPopup, _
    temporary:=True)
   With cbrcSubMenu
      .Caption = "Меню2/меню4"
      .BeginGroup = True
         End With
     ' Создание пункта меню в подменю Меню2/меню4/меню1
   With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "Меню2/меню4/меню1"
      .OnAction = "Menu3"
      .Style = msoButtonIconAndCaption
      .FaceId = 1591
       End With
            ' Создание пункта меню в подменю Меню2/меню4/меню2
   With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "Меню2/меню4/меню2"
      .OnAction = "Menu4"
      .Style = msoButtonIconAndCaption
      .FaceId = 1591
       End With
 ' Отображение меню
   cbrMenu.Visible = True
   Set cbrcSubMenu = Nothing
   Set cbrcMenu = Nothing
   Set cbrMenu = Nothing
End Sub
Sub DeleteCustomMenu()
   ' Удаление строки меню
   On Error Resume Next
   Application.CommandBars(strMenuName).Delete
   On Error GoTo 0
End Sub
Visual Basic
1
 .OnAction = "MenuXX"
- означает какой макрос будет запущен при нажатии на соответствующую кнопку меню.
Visual Basic
1
 .FaceId = 1591
- значок пункта меню. Можно убрать. Чтобы узнать коды значков нужен отдельный код, поищите - в интернете полно.
Весь код разместить в "ЭтаКнига".
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
31.03.2011, 14:14
'означает какой макрос будет запущен при нажатии на соответствующую кнопку меню
' .FaceId = 1591
А можно писать не цифрами какой макрос будет запущен, а указав его имя? Как? имеется ввиду, например:
"Normal.NewMacros.Марос1"
То есть, файл - Нормал, модуль - Нью Макрос, процедура - Макрос1
0
11 / 11 / 0
Регистрация: 23.03.2011
Сообщений: 199
31.03.2011, 14:20
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
'означает какой макрос будет запущен при нажатии на соответствующую кнопку меню
' .FaceId = 1591
Это означает значек пункта меню
А какой макрос будет запускаться означает следующий код:
Visual Basic
1
.OnAction = "MenuXX"
Т.е. MenuXX - это имя макроса, который нужно запускать при нажатии на пункт меню.
возможно будет работать код типа
Visual Basic
1
.OnAction = "Normal.NewMacros.Марос1"
. Но точно не знаю, не пробовал...
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
31.03.2011, 15:00
значек пункта меню? не уловил, а значек пункта меню № 1591 какой?
0
11 / 11 / 0
Регистрация: 23.03.2011
Сообщений: 199
31.03.2011, 15:25
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
значек пункта меню? не уловил, а значек пункта меню № 1591 какой?
Не совсем понял вопроса...
В общем, возьмем кусок кода измоего примера (какой-нибудь пункт меню):
Visual Basic
1
2
3
4
5
6
7
8
   ' Создание пункта меню в подменю Меню1/меню1/меню2
      With cbrcSubMenu.Controls.Add(Type:=msoControlButton, _
    temporary:=True)
      .Caption = "Меню1/меню1/меню2"
      .OnAction = "menu2"
      .Style = msoButtonIconAndCaption
      .FaceId = 1590
      End With
Имя меню:
Visual Basic
1
.Caption = "Меню1/меню1/меню2"
Выполняемый макрос по клику по этому пункту меню
Visual Basic
1
.OnAction = "menu2"
Стиль пункта меню (здесь такст и иконка)
Visual Basic
1
.Style = msoButtonIconAndCaption
Код иконки
Visual Basic
1
.FaceId = 1590
Т.е. 1590 - это выбранный нами код иконки.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
31.03.2011, 16:24
код иконки или значка! Теперь понял
Как узнать коды всевозможныз значков? Это такие файлы.bmp? где хранятся?
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
31.03.2011, 16:40
Хранятся в секции ресурсов самой программы, или, скорее всего, одной из подгружаемых ею dll. Картинки можно посмотреть и узнать их id в программе - редакторе ресурсов типа Restorator. Ну или перечислить все пункты меню и подменю, куда-нибудь на форму извлекая изображения и их идентификаторы.
0
11 / 11 / 0
Регистрация: 23.03.2011
Сообщений: 199
31.03.2011, 16:52
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
код иконки или значка! Теперь понял
Как узнать коды всевозможныз значков? Это такие файлы.bmp? где хранятся?
Держи код, очень удобно выводит все значки и их коды самом excel'e в виде меню:
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
Sub CreateMenuFaceID()
    ' создание меню ЗНАЧКИ с образцами кнопок панели инструментов
    Dim NewMenu As CommandBarPopup, MenuItem As CommandBarControl, Submenuitem As CommandBarButton
    Call DeleteMenuFaceID
    Set NewMenu = CommandBars(1).Controls.Add(Type:=msoControlPopup, Temporary:=True)
    NewMenu.Caption = "Значки": maxCount = 40: maxGroup = 8: N = maxGroup * maxCount
    For j = 0 To 20
        Set MenuItem = NewMenu.Controls.Add(Type:=msoControlPopup)
        With MenuItem: .Caption = j * N + 1 & " - " & (j + 1) * N: .BeginGroup = True:: End With
 
        For i = 0 To maxGroup - 1
            Set MenuItem2 = MenuItem.Controls.Add(Type:=msoControlPopup)
            With MenuItem2: .Caption = 1 + j * N + maxCount * i & " - " & j * N + maxCount * (i + 1): End With
            For ii = j * N + 1 + maxCount * i To j * N + maxCount * (i + 1)
                Set Submenuitem = MenuItem2.Controls.Add(Type:=msoControlButton): DoEvents
                With Submenuitem: .Caption = "FaceId = " & ii: .FaceId = ii: End With
            Next ii
        Next i
    Next j
End Sub
 
Sub DeleteMenuFaceID(): On Error Resume Next
    ' удаление меню ЗНАЧКИ с образцами кнопок панели инструментов
    Dim cbc As CommandBarControl
    For Each cbc In CommandBars(1).Controls
        If cbc.Caption = "Значки" Then cbc.Delete
    Next:
End Sub
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
31.03.2011, 17:41
ОГРОМНОЕ СПАСИБО
Но всё же
Это такие файлы.bmp? где хранятся?

Добавлено через 4 минуты
И забыл спросить горячие клавиши как в меню и подменю создаются?, например, "ч" Значки ??
0
11 / 11 / 0
Регистрация: 23.03.2011
Сообщений: 199
31.03.2011, 18:34
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Это такие файлы.bmp? где хранятся?
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
И забыл спросить горячие клавиши как в меню и подменю создаются?, например, "ч" Значки ??
На эти вопросы ответить не могу Я сам новичок совсем...
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
31.03.2011, 18:40
туплю, помоему так:
.Caption = "&Значки" '"&" перед знаком, означает, что этому знаку назначена горячая клавиша
то есть будет меню Значки
Щас проверю
0
11 / 11 / 0
Регистрация: 23.03.2011
Сообщений: 199
31.03.2011, 18:44
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Щас проверю
Отпишись потом
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
31.03.2011, 18:46
Проверил, всё ОК, как я и говорил, но сейчас узнал, этот скрипт не работает в Ворде? как быть?
0
11 / 11 / 0
Регистрация: 23.03.2011
Сообщений: 199
31.03.2011, 20:36
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Проверил, всё ОК, как я и говорил, но сейчас узнал, этот скрипт не работает в Ворде? как быть?
Какой у Вас ворд?
на 2003 работает, на 2007 тоже должен..
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
31.03.2011, 20:48
У МЕНЯ ВОРД 2003, СЕЙЧАС ПРИСМОТРЕЛСЯ
ВСЁ ТАКИ И В ВОРД ДОБАВЛЯЕТСЯ
НО ВОТ В ЧЁМ ДЕЛО
В ЭКСЕЛЕ СТАВИТСЯ КАК В МЕНЮ, ТО ЕСТЬ ПРАВЕЕ ПОСЛЕДНЕГО МЕНЮ "СПРАВКА"
В ВОРДЕ ЖЕ ПОСТАВИЛОСЬ В МЕНЮ СТАНДАРТНАЯ
ПОЧЕМУ ТАК??
0
11 / 11 / 0
Регистрация: 23.03.2011
Сообщений: 199
31.03.2011, 21:12
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
У МЕНЯ ВОРД 2003, СЕЙЧАС ПРИСМОТРЕЛСЯ
ВСЁ ТАКИ И В ВОРД ДОБАВЛЯЕТСЯ
НО ВОТ В ЧЁМ ДЕЛО
В ЭКСЕЛЕ СТАВИТСЯ КАК В МЕНЮ, ТО ЕСТЬ ПРАВЕЕ ПОСЛЕДНЕГО МЕНЮ "СПРАВКА"
В ВОРДЕ ЖЕ ПОСТАВИЛОСЬ В МЕНЮ СТАНДАРТНАЯ
ПОЧЕМУ ТАК??
Эксель тоже 2003? Если да, то этот код заменяет стандартное меню на это. Если 2007-2010, то справа повляется выпадающее меню "Надстройки" и в нем уже наше меню...
Если нужно чтобы стандартное меню тоже оставалось, то находите код
Visual Basic
1
2
3
' Создание меню вместо стандартного
   Set cbrMenu = Application.CommandBars.Add(strMenuName, msoBarTop, _
    True, True)
и меняете на
Visual Basic
1
2
Set cbrMenu = Application.CommandBars.Add(strMenuName, msoBarTop, _
    False
Во втором случае стандартное остается, а наше появляется как настраевоемое меню.
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
31.03.2011, 21:19
Set cbrMenu = Application.CommandBars.Add(strMenuName, msoBarTop, True, True
1 True это:
2 True это:
0
11 / 11 / 0
Регистрация: 23.03.2011
Сообщений: 199
31.03.2011, 21:34
Вот здесь я немного кажется накосячил:
Цитата Сообщение от emlonlife Посмотреть сообщение
Set cbrMenu = Application.CommandBars.Add(strMenuName, msoBarTop, _
False
В этом случае наше настраевоемое меню после закрытия книги и открытия любой другой так же останется, просто будет пустым. Т.е. меню/меню не будет, а будет пустая лента строки меню и стандартное меню. Чтобы этого небыло (т.е. при закрытии книги наше меню удалялось и не появлялось при открытии другой книги) пишем следующий код:
Visual Basic
1
2
Application.CommandBars.Add(strMenuName, msoBarTop, _
 False, True
False будет означать, что настраевоемое меню не замещает стандартное, а True делает наше меню временным.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2011, 21:34
Помогаю со студенческими работами здесь

Как добавить выплывающее меню к уже готовому горизонтальному меню (не меняя дизайн горизонтального меню)?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html...

Раскрывающееся меню - при открытии/закрытии вложенного меню закрывается все меню
Проблема во вложенном меню. При открытии/закрытии вложенного меню закрывается все меню. Надо, чтобы главное меню не реагировало на клики во...

Добавить меню к итему меню, который уже находится в главном меню
Как можно программно добавить подменю к итему меню, который находится в главном меню? Чтобы выглядело это как-то наподобие того, что на...

Проектирование БД
Задача по вариантам включает следующие элементы: • проектирование БД; • создание БД средствами Access и занесение в нее данных; ...

На проектирование БД
Для ремонтных мастерских спроектировать БД содержащую данную о комплектующих изделиях и данные о поставщиках этих изделий.С блок схемой.


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru