Страница: 1 | 2 |
Вопрос: Смена значков на кнопках API ToolBar
Добавлено: 20.07.04 00:18
Автор вопроса: Lister | ICQ: 298621256
Всем привет!!!
На vbnet.ru по адресу http://vbnet.ru/sample/sampledownload.asp?id=391
имеется пример создания ToolBar средствами API.
Пример великолепен, но у меня возник небольшой вопрос и автору и всем знающим людям:
у меня не получается сменить значок на кнопке этого ToolBar при наведении на нее мышью...
Я использовал функцию SendMessage с параметром TB_CHANGEBITMAP:
lRetval = SendMessage (hToolBar, TB_CHANGEBITMAP, lBtnNumber, lImageNumber)
где lBtnNumber, lImageNumber - номер кнопки и номер картинки для замены, соответственно...
Одним словом у меня ничего не получается...
Что я делаю не правильно?
Ответы
Всего ответов: 27
Номер ответа: 1
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #1
Добавлено: 20.07.04 02:01
Вот блин. Себе не смог сделать, а тебе получилось
Const TB_CHANGEBITMAP = (WM_USER + 43)
SendMessage hToolBar, TB_CHANGEBITMAP, idButton, ByVal iBitmap
Номер ответа: 2
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #2
Добавлено: 20.07.04 02:18
))
Всего лишь надо было ByVal поставить...
Спасибо! Очень выручил!
Номер ответа: 3
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #3
Добавлено: 20.07.04 02:35
Ага. В SendMessage lParam по умолчанию ByRef.
Меня просто эта хрень смущала
lParam = (LPARAM) MAKELPARAM(iBitmap, 0);
Там нужно было LoWord посылать. Но и целый Long тоже сработал.
Из за того что я с ней возился и пропустил ByVal
Номер ответа: 4
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #4
Добавлено: 20.07.04 02:39
Вот-вот!!! И я попался вот на это:
wParam = (WPARAM) idButton; // идентификатор кнопки
lParam = (LPARAM) MAKELPARAM(iBitmap, 0); // номер нового
// изображения
Бился, бился... Думаю, нет не одолеть - надо народ спросить ))
Номер ответа: 5
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #5
Добавлено: 20.07.04 03:35
Кстати мне смена изображений и не понадобилась.
Достаточно было сделать недоступным с помощью TB_ENABLEBUTTON
Номер ответа: 6
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #6
Добавлено: 20.07.04 14:53
Мне понадобилось потому что у WindowsXP такой интерфейс и чтобы его не
нарушать лучше создавать панели с активными кнопками. Довольно давно
Майкрософт выпустила рекомендации по созданию 32-битных значков к
панелям инструментов. Там был описан и процесс создания значков
активных кнопок. Значки-то я сделал, а вот применить не смог...
Поэтому и ломал голову теперь все разъяснилось!!!
Кстати, у меня еще довольно важный вопрос: ты не пробовал
принудительно менять размеры кнопок на панели с помощью
TB_SETBUTTONSIZE. У меня опять же ничего не получалось...
Для СИ написана такая ерунда:
---------------------------------------------
TB_SETBUTTONSIZE
С помощью сообщения TB_SETBUTTONSIZE приложение может установить размер кнопки.
lParam = (LPARAM) MAKELONG(dxButton, dyButton); // размеры
Значение параметра wParam должно быть равно нулю.
Через параметры dxButton и dyButton передается, соответственно, ширина и высота кнопки.
-----------------------------------------------
А как быть в VB? Что передавать в lParam?
Номер ответа: 7
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #7
Добавлено: 20.07.04 16:01
Тьфу ) Сам спросил - сам ответил...
Опять ByVal виноват!!!
Вот что нужно делать:
lRetval = SendMessage(hToolBar, TB_SETBUTTONSIZE, 0, ByVal (MakLng(dxButton, dyButton)))
Через параметры dxButton и dyButton передается, соответственно, ширина
и высота кнопки, а MakLng - это такая функция:
Private Function MakLng(dxButton As Integer, dyButton As Integer) As Long
MakLng = X + (Y * &H10000)
End Function
Урррраа!!! Получилось! ))
Номер ответа: 8
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #8
Добавлено: 20.07.04 16:42
Это есть в исходниках Тулбара. Только закоментировано.
Номер ответа: 9
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #9
Добавлено: 20.07.04 23:05
Кстати, если смотреть тулбар с ребаром в ХР - выглядит не очень...
Тулбар не прозрачен...
До сегодняшнего дня я ломал голову и над этим вопросом. Оказалось все
очень просто: надо было указать TBSTYLE_FLAT Or TBSTYLE_TRANSPARENT
За сегодняшний день я разобрался с тремя не решаемыми для меня
toolbar-проблемами. Это прогресс! )
Номер ответа: 10
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #10
Добавлено: 20.07.04 23:53
Может тогда теперь для всех модуль тулбара перепишешь.
А то мой модуль одновременно всего один тулбар может создавать.
Я конечно его давно перписал, но оформлять некогда.
Номер ответа: 11
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #11
Добавлено: 21.07.04 03:38
Можно... но как только появится свободное время
Номер ответа: 12
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #12
Добавлено: 21.07.04 03:47
Не спится?
Номер ответа: 13
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #13
Добавлено: 21.07.04 03:59
Какое тут спать )
Я сегодня много нового узнал о toolbar и coolbar - вот сижу,
причесываю и разбираю по полочкам твои исходники
я с ними впервые столкнулся в январе или феврале (не помню) и до
сегодняшнего дня было несколько вопросов, на которые сегодня (или уже
точнее 'вчера') получил все ответы, поэтому мысли не дают спать
У меня, кстати, тоже не получалось разместить два тулбара на одной
форме.
Я даже создал UserControl, откомпилировал его в ocx и пытался
добавить на форму два тулбара с разными картинками. Ничего не
получалось... и не получается до сих пор.
Но в принципе, два тулбара - это довольно редкий случай, хотя и
возможный...
Номер ответа: 14
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #14
Добавлено: 21.07.04 04:23
У меня в LASM IDE два тулбара на форме.
В PB Navigator 3 тулбара (1 на форму)
Я модуль переделывать не стал. Просто дописал пару функций и отдельный CallBack. работает нормально.
Стучи в аську короче. У мамы день рождения. Ищу ей картинки.
Номер ответа: 15
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #15
Добавлено: 21.07.04 14:49
Нужна еще небольшая помощь:
Нужно при TBN_HOTITEMCHANGE сменить картинку на кнопке. Менять-то я с
твоей помощью картинки научился, а вот вернуть прежнюю - пока не могу
для смены картинки я делаю следующее:
Case TBN_HOTITEMCHANGE
Dim idButton As Long
Dim iBitmap As Long
Dim nmhi As NMTBHOTITEM
CopyMemory nmhi, ByVal lParam, Len(nmhi)
idButton = nmhi.dwFlags
iBitmap = (idButton - 49) * 2
Call SendMessage(hToolBar, TB_CHANGEBITMAP, idButton, ByVal iBitmap)
А как вернуть прежнюю при уходе мыши с кнопки?