Создание нестандартных меню и панелей инструментов
Для того чтобы наши приложения приобрели законченный вид, необходимо добавить интерфейс, который выводил бы наши формы на экран. В данной лабораторной работе речь пойдет о нестандартных меню и панелях инструментов.
10.9.1.Пример создания/удаления панели инструментов
Рассмотрим пример создания пользовательской панели инструментов Вставка знака с одной кнопкой, на которой расположен нестандартный рисунок и надпись «Плюс в кружочке» (Рис. 10‑16).
Рис. 10‑16. Панель инструментов с кнопкой Плюс в кружочке
Как вы знаете, рисунок на кнопку можно поместить с помощью метода PasteFace, который вставляет его из буфера обмена (а не из предварительно созданного графического файла). Поэтому программа каждый раз должна рисовать этот рисунок заново, вырезать его в буфер обмена, а затем вставлять на кнопку. Поэтому:
1) включите макрорекордер,
2) воспользовавшись панелью инструментов Рисование, нарисуйте плюс в кружочке,
3) вырежьте его в буфер обмена,
4) остановите макрорекордер,
5) в редакторе VBA вырежьте нужный фрагмент кода и вставьте в свою программу:
Sub СозданиеПанелиИнструментов()
Dim PlusButton As CommandBarButton
Dim MyBar As CommandBar
'1. Создаем панель инструментов:
Set MyBar = Application.CommandBars.Add
With MyBar
.Visible = True'панель инструментов видна на экране
.Name = "Вставка знака" 'имя новой панели инструментов
.Position = msoBarTop 'расположена в верхнем углу
EndWith
'2. Создаем рисунок и вырезаем его в буфер обмена (этот _
фрагмент кода был предварительно записан макрорекордером):
ActiveSheet.Shapes.AddShape(msoShapeFlowchartOr, _
337.5, 77.25, 94.5, 94.5).Select
Selection.ShapeRange.Line.Weight = 6#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.Cut '- вырезаем рисунок в буфер обмена
'3. Добавляем кнопку на панель инструментов «Вставка знака»:
Set PlusButton = MyBar.Controls.Add(Type:=msoControlButton)
'На кнопке должен быть рисунок и надпись:
PlusButton.Style = msoButtonIconAndCaption
'Текст надписи:
PlusButton.Caption = "Плюс в кружочке"
'Вставляем рисунок:
PlusButton.PasteFace
'Кнопка доступна пользователю:
PlusButton.Enabled = True
'При щелчке по кнопке выполняется процедура Символ:
PlusButton.OnAction = "Символ"
End Sub
Замечание:
Если вы выполните это задание с самого начала (т.е. при включенном макрорекордере нарисуете плюс в кружочке), Ваш код будет несколько отличаться от приведенного примера, так как и размер, и месторасположения Вашего рисунка будут иными.
Задание: введите данный код в книгу Плюс в кружочке.xls и запустите его. Убедитесь, что панель инструментов Вставка знака создана.
Удаление панели инструментов
Чтобы удалить панель инструментов можно воспользоваться следующим кодом:
Sub УдалениеПанелиИнструментов()
For Each Bar In Application.CommandBars
If Bar.Name = "Вставка знака" Then
Bar.Delete
Exit For
End If
Next
End Sub
Задание: введите данный код в книгу Плюс в кружочке.xls и запустите его. Убедитесь, что панель инструментов Вставка знака удалена.
10.9.2.Пример создания/удаления меню
Теперь создадим меню Вставка знака, которое расположим в самом конце строки меню рабочего листа (после меню Справка).
Рис. 10‑17. Добавление меню Вставка знака
Листинг программы:
Sub ДобавлениеМеню()
Set myMenuBar = CommandBars("Worksheet Menu bar")
'1. Добавляем вложенное меню:
Set newMenu = myMenuBar.Controls.Add(Type:=msoControlPopup, _
Temporary:=True)
'2. Задаем текст надписи:
newMenu.Caption = "Вставка знака"
'3. Во вложенное меню добавляем кнопку:
Set ctrl1 = newMenu.Controls _
.Add(Type:=msoControlButton, ID:=1)
'4. На кнопке должна быть только надпись:
ctrl1.Style = msoButtonCaption
'5. Добавляем надпись:
ctrl1.Caption = "Плюс в кружочке"
'6. Создаем всплывающую подсказку:
ctrl1.TooltipText = "Вставка специального символа"
'7. При щелчке по кнопке выполняется процедура Символ:
ctrl1.OnAction = "Символ"
End Sub
Задание: введите данный код в книгу Плюс в кружочке.xls и запустите его. Убедитесь, что меню Вставка знака создана.
Удаление меню
Для удаления меню воспользуемся следующей программой:
Sub УдалениеМеню()
Set myMenuBar = CommandBars("Worksheet Menu bar")
For Each Меню In myMenuBar.Controls
If Меню.Caption = "Вставка знака" Then
Меню.Delete
Exit For
End If
Next
End Sub
Задание: введите данный код в книгу Плюс в кружочке.xls и запустите его. Убедитесь, что меню Вставка знака удалено.