Как Вы отлично знаете, при создании пользовательских меню (будь-то панель на ленте или контекстное меню) пункты можно украшать симпатичными значками, назначая свойство FaceId.
Вопрос - можно ли к каким-либо "строительным блокам" пользовательских форм (особенно интересны Label и CommandButton, но и не только они) использовать эти же менюшные иконки? Пересмотрел все стандартные элементы из ToolBox - и как-то свойства FaceId ни у одного из них обнаружить не удалось.
Хочу написать надстройку для быстрого и удобного просмотра всех этих иконок. Знаю, много подобных макросов можно найти в Интернете (некоторые из них написаны уважаемыми ветеранами этого форума), но все они реализованы в виде панелей в меню Excel. Я же хочу сделать это в виде диалогового окна.
Sanja, Разумеется, мне нужно все эти 7 тысяч значков на форму добавлять автоматизировано и показывать не все сразу, а порциями по несколько сотен. Каждый значок должен быть на форме отдельным элементом, дабы показывать его номер при наведении, во всплывающей подсказке, например.
Преобразование иконок в картинки (и последующее конвеерное добавление Image-ов на форму) в принципе возможно, хотя мне и не нравится этот путь. Как Вы конвертировали значки в графические файлы?
У меня есть файл с, примерно, 10 тысячами значков выведенных на лист Excel с их ID-номерами. Файл более 4 Mb - здесь не выложить. Напишите в личку Вашу почту - вышлю.
Согласие есть продукт при полном непротивлении сторон
Преобразование иконок в картинки (и последующее конвеерное добавление Image-ов на форму) в принципе возможно, хотя мне и не нравится этот путь. Как Вы конвертировали значки в графические файлы?
А собственно зачем их преобразовывать?
Код
With CommandButton1
.PicturePosition = fmPicturePositionLeftCenter
.Picture = Application.CommandBars.FindControl(ID:=18).Picture
End With
With Label1
.PicturePosition = fmPicturePositionLeftCenter
.Picture = Application.CommandBars.FindControl(ID:=4).Picture
.TextAlign = fmTextAlignLeft
End With
Таким кодом можно получить коды Id для текущей версии Excel для элементов, имеющих отличный от ноля FaceId, а там уже можно организовать их вывод на форму по группам для выбора.
Скрытый текст
Код
Private pDict As Object
Private Sub PrintFaceId(ByVal thisControls As CommandBarControls)
On Error Resume Next
Dim pItem As CommandBarControl, vFaceId As Long
For Each pItem In thisControls
vFaceId = 0
vFaceId = pItem.FaceId
If vFaceId > 0 Then pDict(vFaceId) = pItem.ID
If TypeOf pItem Is CommandBarPopup Then PrintFaceId pItem.Controls
Next
End Sub
Public Sub ScanFaceId()
Dim pBar As CommandBar, pItem
Set pDict = CreateObject("Scripting.Dictionary")
For Each pBar In Application.CommandBars
PrintFaceId pBar.Controls
Next
For Each pItem In pDict.Items
Debug.Print pItem
Next
End Sub
Для Excel, начиная с 2007, можно воспользоваться и GetImageMso. Список имён idMso легко находится в инете. Успехов.