Использовать изображение в заголовке пользовательской формы - PullRequest
0 голосов
/ 26 апреля 2019

Я работаю над пользовательской формой и пытаюсь использовать логотип IE / Chrome и т. Д. В свойстве caption пользовательской формы, чтобы логотип отображался в рамке окна с последующим текстом.

Я просмотрел несколько страниц и обнаружил в сети следующий код, но в строке, связанной с ExtractIcon, обнаружена ошибка неопределяемой подфункции / функции.

Код пользовательской формы

Private Sub UserForm_Initialize 

    Dim strIconPath As String
     Dim lngIcon As Long
     Dim lnghWnd As Long

     ' Change to the path and filename of an icon file
     strIconPath = "C:\Users\suttond\Desktop\Picture2.gif"
     ' Get the icon from the source
     lngIcon = ExtractIcon(0, strIconPath, 0)
     ' Get the window handle of the userform
     lnghWnd = FindWindow("ThunderDFrame", UserForm1.Caption)
     'Set the big (32x32) and small (16x16) icons
     SendMessage lnghWnd, WM_SETICON, True, lngIcon
     SendMessage lnghWnd, WM_SETICON, False, lngIcon

End Sub

Код модуля

Private Declare Function FindWindow _
     Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, _
     ByVal lpWindowName As String) As Long

 Private Declare Function ExtractIcon _
     Lib "shell32.dll" Alias "ExtractIconA" _
    (ByVal hInst As Long, _
     ByVal lpszExeFileName As String, _
     ByVal nIconIndex As Long) As Long

 Private Declare Function SendMessage _
     Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As Long, _
     ByVal wMsg As Long, _
     ByVal wParam As Integer, _
     ByVal lParam As Long) As Long

 Private Const WM_SETICON = &H80

По сути, небольшой логотип IE Explorer будет отображаться наслева от текста уже в заголовке.

Редактировать

Функции кода модуля обновлены для общего доступа, чтобы их можно было вызывать из кода инициализации.Больше не появляется ошибка извлечения, но изображение не отображается в заголовке пользовательской формы.

1 Ответ

1 голос
/ 26 апреля 2019

Как отметили Мистелла и Рори в комментариях к вашим вопросам, функции и константы должны быть объявлены как Public. Если вы объявите их как Private, они известны только в Модуле, но не в Форме.

Во-вторых, вам нужно прочитать Icon из ICO-файла, а не из GIF, поэтому вам нужно конвертировать его. Я использую IrfanView для подобных задач, но есть тонны доступных инструментов (даже онлайн). Я сделал быстрый тест, и это сработало:

enter image description here

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