purebasic.info

PureBasic forum
Текущее время: Ср июн 20, 2018 7:43 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Меню программы
СообщениеДобавлено: Ср сен 12, 2012 4:36 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6309
Благодарил (а): 19 раз.
Поблагодарили: 188 раз.
Пункты репутации: 48
Всё о меню

Установить вместо пункта меню изображение
Установить изображение для пункта меню (Для обычного меню, а не для ImageMenu)
Отметить пункт меню кружочком
Выровнять заголовок меню (MenuTitle) по правому краю
Выделить заголовок меню жирным
Заблокировать заголовок меню
Удалить меню у окна
Установить меню для заданного окна (полезно, когда их несколько, и их нужно менять)
Пункты меню в две колонки
Выбрать заголовок меню
Меню в любой части окна

_________________
read-only


Последний раз редактировалось kvitaliy Ср сен 12, 2012 6:16 pm, всего редактировалось 2 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср сен 12, 2012 4:50 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6309
Благодарил (а): 19 раз.
Поблагодарили: 188 раз.
Пункты репутации: 48
Установить вместо пункта меню изображение:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CreateImage(1,60,30,32)
StartDrawing(ImageOutput(1))
  Box(0,0,60,30,RGB(0,0,255))
  DrawText(10,10,"Item 1",RGB(255,255,255),RGB(0,0,255))
StopDrawing()
 
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateMenu(0,WindowID(0))
    MenuTitle("Menь")
      MenuItem(1,"Item 1",0)
      MenuItem(2,"Item 2",0)
      MenuItem(3,"Item 3",0)
      MenuItem(4,"Item 4",0)
      MenuItem(5,"Item 5",0)
  EndIf
 
  mii.MENUITEMINFO\cbSize = SizeOf(MENUITEMINFO)
  mii\fMask = #MIIM_TYPE
  mii\fType = #MFT_BITMAP
  mii\dwTypeData = ImageID(1)
  SetMenuItemInfo_(MenuID(0),1,0,mii)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf




Установить изображение для пункта меню (Для обычного меню, а не для ImageMenu):
Код:
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
 
CreateImage(1,16,16,32)
 
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
  If CreateMenu(1,WindowID(0))
    MenuTitle("File")
    MenuItem(1,"Cut")
    MenuItem(2,"Copy")
    MenuItem(3,"Paste")
    MenuBar()
    ID = OpenSubMenu("Options")
    SetMenuItemBitmaps_(MenuID(1),3,#MF_BYCOMMAND,ImageID(1),ImageID(1))
    MenuItem(4,"Window...")
    MenuItem(5,"Gadget...")
    CloseSubMenu()
    MenuBar()
    MenuItem(6,"Test-Item")
   
  EndIf
 
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf



Примечание: во втором параметре функции SetMenuItemBitmaps_() используется MenuItem, для которого устанавливаем изображение. Если нужно установить изображение для SubMenu, используем во втором параметре значение, которое возвращает функция OpenSubMenu()

Отметить пункт меню кружочком:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
#StartGroup = 1 ;Номер начального пункта в группе
#EndGroup = 3 ;Номер конечного пункта в группе
#CheckedMenuItem = 1 ;Номер "отмеченного" пункта
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateMenu(0, WindowID(0))
   MenuTitle("Menu")
   MenuItem(1,"Item1")
   MenuItem(2,"Item2")
   MenuItem(3,"Item3")
  EndIf
  CheckMenuRadioItem_(MenuID(0),#StartGroup,#EndGroup,#CheckedMenuItem,1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
 



Выровнять заголовок меню (MenuTitle) по правому краю:
Код:
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
 
Procedure MenuRight(WindowID, Index)
  Protected hMenu, info.MENUITEMINFO
 
  hMenu = GetMenu_(WindowID)
  With info
    \cbSize = SizeOf(MENUITEMINFO)
    \fMask = #MIIM_FTYPE
    GetMenuItemInfo_(hMenu, index, #True, info)
    \fType | #MFT_RIGHTJUSTIFY
  EndWith
  SetMenuItemInfo_(hMenu, index, #True, info)
  DrawMenuBar_(WindowID)
EndProcedure
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateMenu(0, WindowID(0))
    MenuTitle("&Datei")
    MenuItem(1, "Neu")
    MenuTitle("&Hilfe")
    MenuItem(2, "Ьber")  
    MenuRight(WindowID(0), 1)
  EndIf
 
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
 



Выделить заголовок меню жирным:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateMenu(1,WindowID(0))
    MenuTitle("Title1")
    MenuTitle("Title2")
    MenuTitle("Title3")
   
  EndIf
 
  SetMenuDefaultItem_(MenuID(1),1,1)
  ModifyMenu_(MenuID(1),1,#MF_BYPOSITION,1,"Title2")
  DrawMenuBar_(WindowID(0))
 
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf




Заблокировать заголовок меню:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateMenu(0,WindowID(0))
    MenuTitle("Menь 1")
      MenuItem(1,"Item",0)
    MenuTitle("Menь 2")
      MenuItem(2,"Item",0)
  EndIf
 
  EnableMenuItem_(GetMenu_(WindowID(0)),0,#MF_BYPOSITION | #MF_GRAYED)
  DrawMenuBar_(WindowID(0))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
 
 


Удалить меню у окна:
Код:
1
2
 
SetMenu_(WindowID(0),0)




Установить меню для заданного окна (полезно, когда их несколько, и их нужно менять):
Код:
1
2
 
SetMenu_(WindowID(0),MenuID(1))




Пункты меню в две колонки:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
 
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateMenu(1,WindowID(0))
    MenuTitle("Menu")
      For a=1 To 8
        MenuItem(a,"Menuitem "+Str(a),0)
      Next
  EndIf
 
  ModifyMenu_(MenuID(1),5,#MF_MENUBARBREAK,5,@"Menuitem 5")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
 



Выбрать заголовок меню (он будет "вдавлен")
Код:
1
2
 
HiliteMenuItem_(WindowID(0),MenuID(1),0,#MF_BYPOSITION| #MF_HILITE)


Здесь номер заголовка меню - третий параметр

Меню в любой части окна (просто создаём окно, в котором будет меню, внутри основного окна, с указанными координатами):
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
 
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  windowex = CreateWindowEx_(#WS_EX_CLIENTEDGE,"Button","",#WS_VISIBLE|#WS_POPUP|#BS_OWNERDRAW,100,100,100,20,WindowID(0),0,GetModuleHandle_(0),0)
 
  If CreateMenu(1,windowex)
    MenuTitle("Menь")
      MenuItem(1,"Item",0)
  EndIf
 
  SetParent_(windowex,WindowID(0))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
 



Подборка кодов и перевод Никита Однороб

_________________
read-only


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

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


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

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


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

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