purebasic.info

PureBasic forum
Текущее время: Пн дек 10, 2018 6:35 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Иконку из shell32.dll в меню, как?
СообщениеДобавлено: Сб май 19, 2018 5:00 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 239
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Пример, на котором я всё перепробовал.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
If OpenWindow(0, 100, 150, 300, 100, "PureBasic - SysTray Example", #PB_Window_SystemMenu | #PB_Window_Invisible)
        hzz=AddSysTrayIcon(1, WindowID(0),ExtractIcon_(0,GetEnvironmentVariable("windir")+"\system32"+"\SetupAPI.dll",0))
        SysTrayIconToolTip(1, "Icon 1")
        CreatePopupMenu(0)
;       Define.l hIco
;       ExtractIconEx_("shell32.dll",4,0,@hIco,1)
;       hIcon = ExtractIcon_(hMod,Name$,0)
;       hIco = s
;       Define.l hIco
;       hIco.l = 0
;       ExtractIconEx_("shell32.dll",4,0,@hIco,1)
; ExtractIconEx_("shell32.dll",3,@hIco,0,1)
; SendMessage_(hzz,#WM_SETICON,#False, hIco)
; hIco = ExtractIcon_(0,GetEnvironmentVariable("windir")+"\system32"+"\SetupAPI.dll",0)
        MenuItem(1, "C:\Users", hIco)
        MenuItem(2, "C:\Windows\Web\Wallpaper", hIco)
        MenuItem(3, "C:\Windows\SysWOW64", hIco)
        MenuItem(4, "C:\Windows\System32", hIco)
        MenuItem(5, "C:\Windows", hIco)
        MenuBar()
        OpenSubMenu("Недавние файлы", hIco)
        MenuItem(6, "PureBasic.exe", hIco)
        MenuItem(7, "Test.txt")
        CloseSubMenu()
        MenuBar()
        MenuItem(10, "Выход")
        Q = 0
        Repeat
                Event = WaitWindowEvent()
                If Event = #PB_Event_SysTray
                        Select EventType()
                                Case #PB_EventType_LeftClick, #PB_EventType_RightClick
                                        DisplayPopupMenu(0, WindowID(0))          ; показ вспывающего меню
                        EndSelect
                EndIf
                If Event = #PB_Event_Menu
                        Select EventMenu()
                                Case 1
                                        RunProgram("explorer.exe", "C:\Users", "")
                                Case 2
                                        RunProgram("explorer.exe", "C:\Windows\Web\Wallpaper", "")
                                Case 3
                                        RunProgram("explorer.exe", "C:\Windows\SysWOW64", "")
                                Case 4
                                        RunProgram("explorer.exe", "C:\Windows\System32", "")
                                Case 5
                                        RunProgram("explorer.exe", "C:\Windows", "")
                                Case 10
                                        Q = 1
                        EndSelect
                EndIf
        Until Event = #PB_Event_CloseWindow Or Q = 1
EndIf
 
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Иконку из shell32.dll в меню, как?
СообщениеДобавлено: Сб май 19, 2018 6:50 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6412
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Через создание Image
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Procedure SetImage(iMenu, iID, ico)
  ExtractIconEx_("shell32.dll", ico, 0, @iIcon, 1)
  im=CreateImage(#PB_Any, 16, 16 ,32)
  StartDrawing(ImageOutput(im))
     Box(0, 0, 16, 16, GetSysColor_(#COLOR_MENU))
     DrawingMode(#PB_2DDrawing_AllChannels)
     DrawImage(iIcon, 0, 0, 16, 16)
  StopDrawing()
  DestroyIcon_(iIcon)
  ProcedureReturn im
EndProcedure
 
If OpenWindow(0, 0, 0, 0, 0, "", #PB_Window_Invisible)
  If  AddSysTrayIcon(0, WindowID(0),ExtractIcon_(0,GetEnvironmentVariable("windir")+"\system32"+"\SetupAPI.dll",0))
  If SysTrayIconToolTip(0, "I am a tray icon...")
   
    Repeat
    Sleep_(1)
    MyEvent = WaitWindowEvent()
   
      Select MyEvent
        Case #PB_Event_SysTray
          If EventType() = #PB_EventType_LeftClick Or #PB_EventType_RightClick
            If CreatePopupImageMenu(0)
              MenuItem(1, "About", ImageID(SetImage(GetSubMenu_(MenuID(0),0), 0, 221)))
              MenuItem(2, "Quit", ImageID(SetImage(GetSubMenu_(MenuID(0),0), 1, 219)))
              DisplayPopupMenu(0, WindowID(Ted))
            EndIf
          EndIf
        Case #PB_Event_Menu
      Select EventMenu()
        Case 1
          MessageRequester("I am a title...", "...about some stuff...")
        Case 2
          End ExitCode
      EndSelect
      EndSelect
    ForEver
  EndIf
EndIf
EndIf


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Иконку из shell32.dll в меню, как?
СообщениеДобавлено: Сб май 19, 2018 8:12 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11335
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
CreatePopupMenu не поддерживает значки в меню. Нужно создавать меню функцией CreatePopupImageMenu.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
If OpenWindow(0, 100, 150, 300, 100, "PureBasic - SysTray Example", #PB_Window_SystemMenu | #PB_Window_Invisible)
  hzz=AddSysTrayIcon(1, WindowID(0),ExtractIcon_(0,GetEnvironmentVariable("windir")+"\system32"+"\SetupAPI.dll",0))
  SysTrayIconToolTip(1, "Icon 1")
  CreatePopupImageMenu(0)
 
  ExtractIconEx_("shell32.dll",4,0,@hIco,1)
 
  MenuItem(1, "C:\Users", hIco)
  MenuItem(2, "C:\Windows\Web\Wallpaper", hIco)
  MenuItem(3, "C:\Windows\SysWOW64", hIco)
  MenuItem(4, "C:\Windows\System32", hIco)
  MenuItem(5, "C:\Windows", hIco)
  MenuBar()
  OpenSubMenu("Недавние файлы", hIco)
  MenuItem(6, "PureBasic.exe", hIco)
  MenuItem(7, "Test.txt")
  CloseSubMenu()
  MenuBar()
  MenuItem(10, "Выход")
  Q = 0
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_SysTray
      Select EventType()
        Case #PB_EventType_LeftClick, #PB_EventType_RightClick
          DisplayPopupMenu(0, WindowID(0))          ; показ вспывающего меню
      EndSelect
    EndIf
    If Event = #PB_Event_Menu
      Select EventMenu()
        Case 1
          RunProgram("explorer.exe", "C:\Users", "")
        Case 2
          RunProgram("explorer.exe", "C:\Windows\Web\Wallpaper", "")
        Case 3
          RunProgram("explorer.exe", "C:\Windows\SysWOW64", "")
        Case 4
          RunProgram("explorer.exe", "C:\Windows\System32", "")
        Case 5
          RunProgram("explorer.exe", "C:\Windows", "")
        Case 10
          Q = 1
      EndSelect
    EndIf
  Until Event = #PB_Event_CloseWindow Or Q = 1
EndIf


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Иконку из shell32.dll в меню, как?
СообщениеДобавлено: Вс май 20, 2018 6:01 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 708
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
Пётр писал(а):
CreatePopupMenu не поддерживает значки в меню.

мне попадалось в примерах, можно через апи добавить
если не ошибаюсь, это в программе WinAPI Library.exe


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB