Как добавить иконки в меню

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
HotKitten
Дятил
Дятил
Аватара пользователя
 
Сообщения: 400
Зарегистрирован: 24.01.2005 (Пн) 21:48
Откуда: из дома

Как добавить иконки в меню

Сообщение HotKitten » 29.06.2005 (Ср) 15:44

В VBStreets -> Популярные вопросы RayShade писал:

Создайте новый проект с формой и кнопкой на ней. Добавьте picturebox (установите Autosize=True) с картинкой bmp (не иконкой ico!), размер картинки должен быть 13х13. Скопируйте в проект код примера.

Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long

Public Const MF_BITMAP = &H4&

Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type

Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As Boolean

Public Const MIIM_ID = &H2
Public Const MIIM_TYPE = &H10
Public Const MFT_STRING = &H0&

Private Sub Command1_Click()
'Get the menuhandle of your app
hMenu& = GetMenu(Form1.hwnd)
'Get the handle of the first submenu (Hello)
hSubMenu& = GetSubMenu(hMenu&, 0)
'Get the menuId of the first entry (Bitmap)
hID& = GetMenuItemID(hSubMenu&, 0)
'Add the bitmap
SetMenuItemBitmaps hMenu&, hID&, MF_BITMAP, Picture1.Picture, Picture1.Picture
End Sub

===========================================
а чё-то ругается у меня VB на Public Const и на hMenu, может я чё не так сделал?
вообше, я уже давно ищу - как засунуть иконку в меню трея
Изображение

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 29.06.2005 (Ср) 16:08

Я бы тоже ругался если бы вместо того чтобы обьявлять в коде формы всё как Private или вынести обьявления в отдельный модуль мы маемся дурью :twisted: :P :D
Если всё делать своими ручками, они скоро отвалятся !

HotKitten
Дятил
Дятил
Аватара пользователя
 
Сообщения: 400
Зарегистрирован: 24.01.2005 (Пн) 21:48
Откуда: из дома

Сообщение HotKitten » 01.07.2005 (Пт) 9:34

а если вынести Private в модуль то ругается на hMenu, может, я чё-то не догоняю, подправьте кодик плиз :)
Изображение

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 01.07.2005 (Пт) 12:58

Код: Выделить всё
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long

Private Const MF_BITMAP = &H4&

Private Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type

Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As Boolean

Private Const MIIM_ID = &H2
Private Const MIIM_TYPE = &H10
Private Const MFT_STRING = &H0&

Private Sub Command1_Click()
'Get the menuhandle of your app
hMenu& = GetMenu(Form1.hwnd)
'Get the handle of the first submenu (Hello)
hSubMenu& = GetSubMenu(hMenu&, 0)
'Get the menuId of the first entry (Bitmap)
hID& = GetMenuItemID(hSubMenu&, 0)
'Add the bitmap
SetMenuItemBitmaps hMenu&, hID&, MF_BITMAP, Picture1.Picture, Picture1.Picture
End Sub

Всё в коде формы 8)
Если всё делать своими ручками, они скоро отвалятся !

HotKitten
Дятил
Дятил
Аватара пользователя
 
Сообщения: 400
Зарегистрирован: 24.01.2005 (Пн) 21:48
Откуда: из дома

Сообщение HotKitten » 02.07.2005 (Сб) 10:36

ругается на hMenu&, hSubMenu&, hID& я их описал так
Dim hMenu&
Dim hSubMenu&
Dim hID&
и вроде заработало, только картинка в меню, оличается от картинки в picturebox - она тускнее
Изображение
чё нибудь мона сделать??
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 02.07.2005 (Сб) 12:13

Вообще какая-то необычная палитра. Настройки Windows?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.07.2005 (Сб) 13:21

Непременное упоминание: PopupMenu2
Изображение

HotKitten
Дятил
Дятил
Аватара пользователя
 
Сообщения: 400
Зарегистрирован: 24.01.2005 (Пн) 21:48
Откуда: из дома

Сообщение HotKitten » 03.07.2005 (Вс) 15:10

люди, а может у кого нибудь есть кодик на добавление иконок в меню, мне бы маленький, ато у меня есть килобайт по 30-40, а мне надо бы на килобайт 5-10 как у RayShade
Изображение

Wolfsider
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 19.08.2006 (Сб) 13:37

Сообщение Wolfsider » 30.10.2006 (Пн) 13:30

Народ... оцените, плз. что не так. На форме : Command1 , Picture1 с впихнутой 13x13 bmp .

Код: Выделить всё
Const MF_CHECKED = &H8&
Const MF_APPEND = &H100&
Const TPM_LEFTALIGN = &H0&
Private Const MIIM_ID = &H2
Private Const MIIM_TYPE = &H10
Private Const MFT_STRING = &H0&
Const MF_DISABLED = &H2&
Const MF_GRAYED = &H1&
Const MF_SEPARATOR = &H800&
Const MF_STRING = &H0&
Const TPM_RETURNCMD = &H100&
Const TPM_RIGHTBUTTON = &H2&
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function CreatePopupMenu Lib "user32" () As Long
Private Declare Function TrackPopupMenuEx Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal hwnd As Long, ByVal lptpm As Any) As Long
Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Dim hMenu As Long




Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long

Private Const MF_BITMAP = &H4&

Private Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type

Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As Boolean


Private Sub Command1_Click()
'Get the handle of the first submenu (Hello)
hSubMenu& = GetSubMenu(hMenu, 0)
'Get the menuId of the first entry (Bitmap)
hID& = GetMenuItemID(hSubMenu&, 0)
'Add the bitmap
SetMenuItemBitmaps hMenu&, hID&, MF_BITMAP, Picture1.Picture, Picture1.Picture
End Sub

Private Sub Form_Click()
Dim Pt As POINTAPI
Dim ret As Long


GetCursorPos Pt

ret = TrackPopupMenuEx(hMenu, TPM_LEFTALIGN Or TPM_RETURNCMD Or TPM_RIGHTBUTTON, Pt.x, Pt.y, Me.hwnd, ByVal 0&)

Debug.Print ret
End Sub

Private Sub Form_Load()

hMenu = CreatePopupMenu()
AppendMenu hMenu, MF_STRING, 1, "Hello !"
AppendMenu hMenu, MF_GRAYED Or MF_DISABLED, 2, "Testing ..."
AppendMenu hMenu, MF_SEPARATOR, 3, ByVal 0&
AppendMenu hMenu, MF_CHECKED, 4, "TrackPopupMenu"

End Sub


Цель - добавление иконки в програмно созданное контекстное меню. При вызове меню картинка не отображается. Если можете, помогите рабочим примером.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.10.2006 (Пн) 13:47

Находит все старые темы, кроме нужной...
http://bbs.vbstreets.ru/viewtopic.php?p=56536#56536
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Wolfsider
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 19.08.2006 (Сб) 13:37

Сообщение Wolfsider » 30.10.2006 (Пн) 14:00

ДА НАФИГ МНЕ ВАШ КОНТРОЛ НУЖЕН! Я уже его видел сто раз... дайте мне API.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.10.2006 (Пн) 14:12

Не ори, мой юный 13-летний друг.
Если ты не в состоянии посмотреть "контролу" (хотя где ты его нашёл? там нет контрола) внутрь и увидеть там те самые API, то мы не сможем тебе помочь. Забаним за ор просто и всё.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Wolfsider
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 19.08.2006 (Сб) 13:37

Сообщение Wolfsider » 30.10.2006 (Пн) 16:12

Тип верно ответил насчет возможности определения возраста по поведению... и я еще ни разу не видел такого, что рунетчик брал цитату из буржуйского башорга. Это выглядит так, как будто они умнее нас...
Это раз. Во вторых, я не гоыорил "контрола"... тебе, верноятно, приснилось. Я сказал Control -__- ЗЫ. объясни мне все таки (пофиг, что оффтоп) причем тут сия цитата? Вашу кучу, под названием mnu30.rar я посмотрел... и нашел там кучу ненужного. Буду выуживать... раз уж тако сложно написать рабочий вариант. Меня никто не убедит в том, что у вас его нет.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 30.10.2006 (Пн) 16:15

По-моему, по совокупности, данный субъект (Wolfsider) вполне уже наорал на баню с люлями... :twisted:
Последний раз редактировалось Viper 30.10.2006 (Пн) 16:43, всего редактировалось 1 раз.
Весь мир матрица, а мы в нем потоки байтов!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.10.2006 (Пн) 16:22

Wolfsider писал(а):Тип верно ответил насчет возможности определения возраста по поведению...

Это да.

Wolfsider писал(а):и я еще ни разу не видел такого, что рунетчик брал цитату из буржуйского башорга.

Минут 15 в инете, небось?..
Или может только по славянофильским сайтам, где без буквы "ять" - моветон, мизерабль и мовежанр?

Wolfsider писал(а):Это выглядит так, как будто они умнее нас...

Английский bash.org является оригиналом. Русский - копией. Это первое; и второе - если бы более подходящая случаю цитата наличествовала в русском, я взял бы её.

Wolfsider писал(а):Это раз. Во вторых, я не гоыорил "контрола"... тебе, верноятно, приснилось. Я сказал Control -__-

Забавно, забавно...
Протри глазки, что ль :?
И узри цитату из себя постом выше:
Wolfsider писал(а):ДА НАФИГ МНЕ ВАШ КОНТРОЛ НУЖЕН!



Wolfsider писал(а):ЗЫ. объясни мне все таки (пофиг, что оффтоп) причем тут сия цитата?

Исключительно по поводу ВАШЕГО ОРА, милейший, исключительно по поводу оного.
Или тот факт, что БОЛЬШИЕ БУКВЫ в инете воспринимаются как крик, ускользнул от взора вашего, поисками картинок в меню занятого?..

Wolfsider писал(а):Вашу кучу, под названием mnu30.rar я посмотрел... и нашел там кучу ненужного. Буду выуживать... раз уж тако сложно написать рабочий вариант. Меня никто не убедит в том, что у вас его нет.

Там, в куче ненужного, всё разбито по кусочкам, надо просто нужный кусочек взять, остальное проигнорировав. Проявить, так сказать, усилие мысли...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 30.10.2006 (Пн) 16:46

Wolfsider писал(а):Вашу кучу, под названием mnu30.rar я посмотрел... и нашел там кучу ненужного. Буду выуживать... раз уж тако сложно написать рабочий вариант.


...зернышко разумного в этом есть... По моему стоит труды GSerg и Tyomitch довести до "кирпичного" состояния...
Весь мир матрица, а мы в нем потоки байтов!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.10.2006 (Пн) 16:47

А оно кирпичное... Включай в проект и пользуйся... Завершённое, отдельное... Просто лежит в проектах, по доброй памяти...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 30.10.2006 (Пн) 16:55

я то пользуюсь... :) причем именно нужными мне частями (собственно там уже есть собственные фишки давно). Просто в "Кирпичах" размещение данного проекта было бы логичнее.
Весь мир матрица, а мы в нем потоки байтов!

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 30.10.2006 (Пн) 17:07

GSerg писал(а):А оно кирпичное... Включай в проект и пользуйся... Завершённое, отдельное... Просто лежит в проектах, по доброй памяти...


Еще как кирпичное! Доводить "для всеобщего обозрения" тут ничего не нужно - если надо, каждый по своим потребностям доведет.

Я давно предлагал оную тему из проектов перетащить в кирпичи - народ частенько спрашивает насчет PopUpMenu.
Вчера кстати такая тема была.
http://bbs.vbstreets.ru/viewtopic.php?t=28911
(Хм... и автор, кстати, Wolfsider) :shock:

И частенько темы, касаемые PopUpMenu, заканчаваются казусами. Вчерашняя и сегоднящняя - не исключение. Поэтому, срочно в кирпичи :!:

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 30.10.2006 (Пн) 22:58

Wolfsider
Нервные клетки не восстанавливаются, так что спокойнее, спокойнее.
SetMenuItemBitmaps надо напрямую делать. + Ограничение на картинку, о нем думаю сам прочитаешь.
Код: Выделить всё
SetMenuItemBitmaps hMenu&, 1, MF_BITMAP, Picture1.Picture, Picture1.Picture
Если всё делать своими ручками, они скоро отвалятся !


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 91

    TopList