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

Вход

Регистрация

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

 

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

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

Excel 2010
Друзья!

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

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

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


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


Кросс: 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


Яндекс-деньги: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
Группа: Друзья
Ранг: Ветеран
Сообщений: 984
Репутация: 213 ±
Замечаний: 0% ±

Excel 2016
а событие при нажатии на 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
Репутация: 894 ±
Замечаний: 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
Группа: Админы
Ранг: Местный житель
Сообщений: 13305
Репутация: ±
Замечаний: ±

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

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

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


Яндекс-деньги: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
Группа: Админы
Ранг: Местный житель
Сообщений: 13305
Репутация: ±
Замечаний: ±

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


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

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

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


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

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

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


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

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

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


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

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

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

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


Яндекс-деньги: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
Группа: Админы
Ранг: Местный житель
Сообщений: 13305
Репутация: ±
Замечаний: ±

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


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

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

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