Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: basicproduction.nm.ru/
 Профиль | | #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-сайт: basicproduction.nm.ru/
 Профиль | | #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-сайт: basicproduction.nm.ru/
 Профиль | | #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-сайт: basicproduction.nm.ru/
 Профиль | | #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-сайт: basicproduction.nm.ru/
 Профиль | | #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-сайт: basicproduction.nm.ru/
 Профиль | | #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-сайт: basicproduction.nm.ru/
 Профиль | | #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)


А как вернуть прежнюю при уходе мыши с кнопки?

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам