Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Добавить иконку справки в заголовок формы - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавить иконку справки в заголовок формы (Макросы/Sub)
Добавить иконку справки в заголовок формы
Serge_007 Дата: Воскресенье, 05.07.2015, 11:35 | Сообщение № 1
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
Друзья!

Кто знает, возможно ли вообще добавить в заголовок формы иконку (мне нужна конкретно иконка справки, но вообще - вопрос шире), помимо трех стандартных (Свернуть, Развернуть и Закрыть)?
И если это возможно, то как именно?

Для простоты понимания прикладываю картинки и файл

Так есть сейчас:


Так необходимо:


Кросс: http://forum.msexcel.ru/index.php/topic,11032.0.html
http://www.programmersforum.ru/showthread.php?p=1515259#post1515259
http://www.planetaexcel.ru/forum....ostform
http://www.excel-vba.ru/forum/index.php?topic=3935.msg21211#msg21211
http://www.sql.ru/forum....k-formy


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеДрузья!

Кто знает, возможно ли вообще добавить в заголовок формы иконку (мне нужна конкретно иконка справки, но вообще - вопрос шире), помимо трех стандартных (Свернуть, Развернуть и Закрыть)?
И если это возможно, то как именно?

Для простоты понимания прикладываю картинки и файл

Так есть сейчас:


Так необходимо:


Кросс: http://forum.msexcel.ru/index.php/topic,11032.0.html
http://www.programmersforum.ru/showthread.php?p=1515259#post1515259
http://www.planetaexcel.ru/forum....ostform
http://www.excel-vba.ru/forum/index.php?topic=3935.msg21211#msg21211
http://www.sql.ru/forum....k-formy

Автор - Serge_007
Дата добавления - 05.07.2015 в 11:35
KSV Дата: Воскресенье, 05.07.2015, 14:43 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
А это не подходит?
[vba]
Код
    UserForm.WhatsThisButton = True
[/vba]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеА это не подходит?
[vba]
Код
    UserForm.WhatsThisButton = True
[/vba]

Автор - KSV
Дата добавления - 05.07.2015 в 14:43
DJ_Marker_MC Дата: Воскресенье, 05.07.2015, 15:02 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
а событие при нажатии на WhatsThisButton можно как то отследить? ато нигде не нашел этого.
Не совсем то, но нашел вот такую вот штуку, малоли, вдруг что то придумаешь с этого., на эту панельку можно как я понял в процессе вешать любый значки.
К сообщению приложен файл: 0467651.xls (53.0 Kb)
 
Ответить
Сообщениеа событие при нажатии на WhatsThisButton можно как то отследить? ато нигде не нашел этого.
Не совсем то, но нашел вот такую вот штуку, малоли, вдруг что то придумаешь с этого., на эту панельку можно как я понял в процессе вешать любый значки.

Автор - DJ_Marker_MC
Дата добавления - 05.07.2015 в 15:02
Udik Дата: Воскресенье, 05.07.2015, 16:05 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Вот нашёл, где подобный вопрос обсуждают, но самому разобраться сил не хватило :)
http://www.sql.ru/forum/846212/forma-v-vba-i-vb-ne-odno-i-tozhe
[vba]
Код

'Пример добавляет иконку в заголовок формы, кнопку свернуть и
'отображает форму на панель задач.
'
'Для работы примера поместите на Лист1 рисунок Image1 с подходящей
'картинкой для иконки формы.

Private Declare Function GetWindowLong Lib "user32" Alias _
                 "GetWindowLongA" (ByVal hWnd As Long, _
                 ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias _
                 "SetWindowLongA" (ByVal hWnd As Long, _
                 ByVal nIndex As Long, _
                 ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
                 ByVal hWndInsertAfter As Long, _
                 ByVal X As Long, ByVal Y As Long, _
                 ByVal cx As Long, ByVal cy As Long, _
                 ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
                 (ByVal lpClassName As String, _
                 ByVal lpWindowName As String) As Long
Private Declare Function GetActiveWindow Lib "user32.dll" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
                 (ByVal hWnd As Long, ByVal wMsg As Long, _
                 ByVal wParam As Long, _
                 lParam As Any) As Long
Private Declare Function DrawMenuBar Lib "user32" _
                 (ByVal hWnd As Long) As Long

Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const GWL_EXSTYLE = (-20)
Private Const HWND_TOP = 0
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_HIDEWINDOW = &H80
Private Const SWP_SHOWWINDOW = &H40
Private Const WS_EX_APPWINDOW = &H40000
Private Const GWL_STYLE = (-16)
Private Const WS_MINIMIZEBOX = &H20000
Private Const SWP_FRAMECHANGED = &H20
Private Const WM_SETICON = &H80
Private Const ICON_SMALL = 0&
Private Const ICON_BIG = 1&

Private Sub UserForm_Activate()
     AddIcon
     AddMinimiseButton
     AppTasklist Me
End Sub
'--------------------------------------------------------------------------------------
Private Sub AddIcon()
'добавляет иконку в заголовок формы
     Dim hWnd As Long
     Dim lngRet As Long
     Dim hIcon As Long
     hIcon = Лист1.Image1.Picture.Handle
     hWnd = FindWindow(vbNullString, Me.Caption)
     lngRet = SendMessage(hWnd, WM_SETICON, ICON_SMALL, ByVal hIcon)
     lngRet = SendMessage(hWnd, WM_SETICON, ICON_BIG, ByVal hIcon)
     lngRet = DrawMenuBar(hWnd)
End Sub
'--------------------------------------------------------------------------------------
Private Sub AddMinimiseButton()
'добавляет кнопку свернуть в заголовок формы
     Dim hWnd As Long
     hWnd = GetActiveWindow
     Call SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) Or WS_MINIMIZEBOX)
     Call SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE)
End Sub
'--------------------------------------------------------------------------------------
Private Sub AppTasklist(myForm)
'отображает форму на панели задач
     Dim WStyle As Long
     Dim Result As Long
     Dim hWnd As Long

     hWnd = FindWindow(vbNullString, myForm.Caption)
     WStyle = GetWindowLong(hWnd, GWL_EXSTYLE)
     WStyle = WStyle Or WS_EX_APPWINDOW
     Result = SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_HIDEWINDOW)
     Result = SetWindowLong(hWnd, GWL_EXSTYLE, WStyle)
     Result = SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW)
End Sub
[/vba]


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеВот нашёл, где подобный вопрос обсуждают, но самому разобраться сил не хватило :)
http://www.sql.ru/forum/846212/forma-v-vba-i-vb-ne-odno-i-tozhe
[vba]
Код

'Пример добавляет иконку в заголовок формы, кнопку свернуть и
'отображает форму на панель задач.
'
'Для работы примера поместите на Лист1 рисунок Image1 с подходящей
'картинкой для иконки формы.

Private Declare Function GetWindowLong Lib "user32" Alias _
                 "GetWindowLongA" (ByVal hWnd As Long, _
                 ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias _
                 "SetWindowLongA" (ByVal hWnd As Long, _
                 ByVal nIndex As Long, _
                 ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
                 ByVal hWndInsertAfter As Long, _
                 ByVal X As Long, ByVal Y As Long, _
                 ByVal cx As Long, ByVal cy As Long, _
                 ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
                 (ByVal lpClassName As String, _
                 ByVal lpWindowName As String) As Long
Private Declare Function GetActiveWindow Lib "user32.dll" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
                 (ByVal hWnd As Long, ByVal wMsg As Long, _
                 ByVal wParam As Long, _
                 lParam As Any) As Long
Private Declare Function DrawMenuBar Lib "user32" _
                 (ByVal hWnd As Long) As Long

Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const GWL_EXSTYLE = (-20)
Private Const HWND_TOP = 0
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_HIDEWINDOW = &H80
Private Const SWP_SHOWWINDOW = &H40
Private Const WS_EX_APPWINDOW = &H40000
Private Const GWL_STYLE = (-16)
Private Const WS_MINIMIZEBOX = &H20000
Private Const SWP_FRAMECHANGED = &H20
Private Const WM_SETICON = &H80
Private Const ICON_SMALL = 0&
Private Const ICON_BIG = 1&

Private Sub UserForm_Activate()
     AddIcon
     AddMinimiseButton
     AppTasklist Me
End Sub
'--------------------------------------------------------------------------------------
Private Sub AddIcon()
'добавляет иконку в заголовок формы
     Dim hWnd As Long
     Dim lngRet As Long
     Dim hIcon As Long
     hIcon = Лист1.Image1.Picture.Handle
     hWnd = FindWindow(vbNullString, Me.Caption)
     lngRet = SendMessage(hWnd, WM_SETICON, ICON_SMALL, ByVal hIcon)
     lngRet = SendMessage(hWnd, WM_SETICON, ICON_BIG, ByVal hIcon)
     lngRet = DrawMenuBar(hWnd)
End Sub
'--------------------------------------------------------------------------------------
Private Sub AddMinimiseButton()
'добавляет кнопку свернуть в заголовок формы
     Dim hWnd As Long
     hWnd = GetActiveWindow
     Call SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) Or WS_MINIMIZEBOX)
     Call SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE)
End Sub
'--------------------------------------------------------------------------------------
Private Sub AppTasklist(myForm)
'отображает форму на панели задач
     Dim WStyle As Long
     Dim Result As Long
     Dim hWnd As Long

     hWnd = FindWindow(vbNullString, myForm.Caption)
     WStyle = GetWindowLong(hWnd, GWL_EXSTYLE)
     WStyle = WStyle Or WS_EX_APPWINDOW
     Result = SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_HIDEWINDOW)
     Result = SetWindowLong(hWnd, GWL_EXSTYLE, WStyle)
     Result = SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW)
End Sub
[/vba]

Автор - Udik
Дата добавления - 05.07.2015 в 16:05
Manyasha Дата: Воскресенье, 05.07.2015, 17:31 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Добавить иконку получилось (правда слева, а не справа). Но вот как на нее макрос повесить - для меня загадка (1-й файл).
Предложу еще вот какой вариант: сам заголовок формы убрать совсем, а вверху формы нарисовать все, что нужно (2-й файл), в примере только кнопка справки и крестик для закрытия.
К сообщению приложен файл: 9301741.xls (49.5 Kb) · 9805118.xls (48.0 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеДобавить иконку получилось (правда слева, а не справа). Но вот как на нее макрос повесить - для меня загадка (1-й файл).
Предложу еще вот какой вариант: сам заголовок формы убрать совсем, а вверху формы нарисовать все, что нужно (2-й файл), в примере только кнопка справки и крестик для закрытия.

Автор - Manyasha
Дата добавления - 05.07.2015 в 17:31
Serge_007 Дата: Воскресенье, 05.07.2015, 17:43 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
это не подходит?
Не совсем. Стиль WS_EX_CONTEXTHELP несовместим со стилями WS_MAXIMIZEBOX и WS_MINIMIZEBOX

Да и как при WS_EX_CONTEXTHELP назначить макрос кнопке?

подобный вопрос обсуждают
И что в нем подобного?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
это не подходит?
Не совсем. Стиль WS_EX_CONTEXTHELP несовместим со стилями WS_MAXIMIZEBOX и WS_MINIMIZEBOX

Да и как при WS_EX_CONTEXTHELP назначить макрос кнопке?

подобный вопрос обсуждают
И что в нем подобного?

Автор - Serge_007
Дата добавления - 05.07.2015 в 17:43
Serge_007 Дата: Воскресенье, 05.07.2015, 17:53 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
Manyasha, спасибо, классно!
Хотелось, конечно, штатными средствами, но как запасной вариант пойдет и так :)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеManyasha, спасибо, классно!
Хотелось, конечно, штатными средствами, но как запасной вариант пойдет и так :)

Автор - Serge_007
Дата добавления - 05.07.2015 в 17:53
RAN Дата: Воскресенье, 05.07.2015, 18:06 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Серег, если не секрет, зачем тебе весь этот гемор? Чем кнопка в углу формы не подходит?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеСерег, если не секрет, зачем тебе весь этот гемор? Чем кнопка в углу формы не подходит?

Автор - RAN
Дата добавления - 05.07.2015 в 18:06
Serge_007 Дата: Воскресенье, 05.07.2015, 18:15 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
зачем тебе весь этот гемор?
Заказчик хочет :)
[p.s.]
Да и мне самому интересно, я ведь видел такие формы виндоус, значит так сделать можно. Или нет?[/p.s.]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
зачем тебе весь этот гемор?
Заказчик хочет :)
[p.s.]
Да и мне самому интересно, я ведь видел такие формы виндоус, значит так сделать можно. Или нет?[/p.s.]

Автор - Serge_007
Дата добавления - 05.07.2015 в 18:15
RAN Дата: Воскресенье, 05.07.2015, 18:24 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Оно вероятно, через API можно, но и гемора может возникнуть масса. Основное - стабильность работы. И стоит ее менять на псевдокрасивость?
Обычно, при упоминании возможности нестабильности работы, заказчик тут же понимает, что эта красивость ему не так уж и нужна.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеОно вероятно, через API можно, но и гемора может возникнуть масса. Основное - стабильность работы. И стоит ее менять на псевдокрасивость?
Обычно, при упоминании возможности нестабильности работы, заказчик тут же понимает, что эта красивость ему не так уж и нужна.

Автор - RAN
Дата добавления - 05.07.2015 в 18:24
Serge_007 Дата: Воскресенье, 05.07.2015, 18:39 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
Оно вероятно, через API можно
Но вот как? Я так и не нашел ответа

заказчик тут же понимает
Не тот случай :)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Оно вероятно, через API можно
Но вот как? Я так и не нашел ответа

заказчик тут же понимает
Не тот случай :)

Автор - Serge_007
Дата добавления - 05.07.2015 в 18:39
KSV Дата: Воскресенье, 05.07.2015, 22:04 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Да и как при WS_EX_CONTEXTHELP назначить макрос кнопке?

например, так
К сообщению приложен файл: 1032548.xlsm (24.2 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
Да и как при WS_EX_CONTEXTHELP назначить макрос кнопке?

например, так

Автор - KSV
Дата добавления - 05.07.2015 в 22:04
Serge_007 Дата: Понедельник, 06.07.2015, 22:17 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
Да, Сергей, спасибо
Если не найду решения топика в исходном виде, то придется делать именно так :)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеДа, Сергей, спасибо
Если не найду решения топика в исходном виде, то придется делать именно так :)

Автор - Serge_007
Дата добавления - 06.07.2015 в 22:17
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавить иконку справки в заголовок формы (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!