- Сообщения
- 3,557
- Репутация
- 628
- Версия AutoIt
- 3.3.12.0
- Версия
- 0.2
AutoIT 3.3.12.0+
SDMenuPopup.au3 это библиотека для создания кастомного контекстного меню. Возможность устанавливать свой шрифт для каждого подменю, цвет фона меню и отдельно строчек меню. По умолчанию строки создаются с прозрачностью.
Можно назначать функции пунктам меню непосредственно при создании меню, а можно привязать функции позднее. Возможно создавать меню с иконками и без них в одном вызове
Выборочная подсветка пунктов
функция _GetStringDimensions взята с этого форума.
в архиве библиотека и пример
Список пользовательских функций
_SD_MenuCreate()
_SD_MenuCreateItem()
_SD_CreatePopupMenu()
_SD_CallFuncFromItem()
обновление библиотеки
добавлена настраиваемая подсветка пунктов при наведении мышью
добавлена возможность создавать разделитель между пунктами одного меню
исправлены некоторые ошибки
исправлен пример
SDMenuPopup.au3 это библиотека для создания кастомного контекстного меню. Возможность устанавливать свой шрифт для каждого подменю, цвет фона меню и отдельно строчек меню. По умолчанию строки создаются с прозрачностью.
Можно назначать функции пунктам меню непосредственно при создании меню, а можно привязать функции позднее. Возможно создавать меню с иконками и без них в одном вызове
Выборочная подсветка пунктов
функция _GetStringDimensions взята с этого форума.
в архиве библиотека и пример
Список пользовательских функций
_SD_MenuCreate()
_SD_MenuCreateItem()
_SD_CreatePopupMenu()
_SD_CallFuncFromItem()
Код:
#include <SDMenuPopup.au3>
Global $stext = '', $iIDItemMenu, $iIDItemMenu2, $iFL, $iIDItemMenu11
Global $Form1 = GUICreate('Form1', 500, 200, -1, -1, $WS_POPUP)
GUICtrlCreateLabel(' Title', 0, 0, 480, 20, $SS_CENTERIMAGE, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetBkColor(-1, 0x808080)
GUICtrlSetColor(-1, 0xF0F8Ff)
GUICtrlSetFont(-1, 12, 400, 0, 'Ravie')
Global $Close = GUICtrlCreateLabel('X', 480, 0, 20, 20, $SS_CENTERIMAGE)
GUICtrlSetBkColor(-1, 0x808080)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, 12, 400, 0, 'Ravie')
Global $BT = GUICtrlCreateButton('Кнопка раз', 10, 40, 100, 20)
Global $BT1 = GUICtrlCreateLabel('Строка', 10, 70, 100, 20)
_GuiSetDropShadow($Form1)
GUISetState()
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUIRegisterMsg($WM_SETCURSOR, 'WM_SETCURSOR')
While 1
;~ If $iFL Then; к варианту 2
;~ $iFL = 0
;~ _flsf()
;~ EndIf
_SD_CallFuncFromItem();вариант 1
Switch GUIGetMsg()
Case -3
Exit
Case $Close
Exit
Case $BT
_Menu()
EndSwitch
WEnd
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
Local $nID = BitAND($wParam, 0x0000FFFF) ; _WinAPI_LoWord
;~ Local $iItemId = _SD_CallFuncFromItem($nID, 1); вариант 2
;~ If $iItemId Then
;~ Switch $iItemId
;~ Case $iIDItemMenu
;~ ConsoleWrite('func 1 exec var 3 from item $iIDItemMenu' & @LF)
;~ Case $iIDItemMenu2
;~ $iFL = 1
;~ EndSwitch
;~ Else
;~ EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func WM_SETCURSOR($hWnd, $Msg, $wParam, $lParam)
Local $MouseMsg = BitShift($lParam, 16) ; _WinAPI_HiWord
If $hWnd = $Form1 Then
Switch $MouseMsg
Case 517, 520;клик колесиком мыши или правой кнопкой в окне Form1
_Menu()
EndSwitch
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SETCURSOR
Func _Menu()
Local $Menu, $item, $Menu1, $Menu2, $Menu3, $iIDItemMenu1, $NT
$Menu = _SD_MenuCreate(1, '', '', '', '10,400,0,Ravie')
_SD_MenuCreateItem($Menu, 'Разделитель - 1', '', '', '', '#')
_SD_MenuCreateItem($Menu, 'Пункт 1', 0xff0000, -2, 'shell32.dll,25')
_SD_MenuCreateItem($Menu, 'Пункт 2', '', -2, 'shell32.dll,26')
$iIDItemMenu = _SD_MenuCreateItem($Menu, '$iIDItemMenu вариант WM_', 0xff0000, -2, 'shell32.dll,28')
_SD_MenuCreateItem($Menu, '', '', '', '', '#')
_SD_MenuCreateItem($Menu, 'Item menu', 0xff0000, -2, 'shell32.dll,27')
$item = _SD_MenuCreateItem($Menu, 'Next Menu Popup', 0xFFFFFF, 0xff0000, 'shell32.dll,20')
_SD_MenuCreateItem($Menu, 'NewItem 3', 0xff0000, -2, 'shell32.dll,28')
If $stext <> '' Then
_SD_MenuCreateItem($Menu, $stext, 0xff0000, -2, 'shell32.dll,22', '_FLPD')
Else
_SD_MenuCreateItem($Menu, 'NewItem 4 + func', 0xff0000, -2, 'shell32.dll,22', '_FLPD')
EndIf
$Menu1 = _SD_MenuCreate(0, $Menu, $item); подменю без иконок
$NT = _SD_MenuCreateItem($Menu1, 'Пункт с подменю 1', 0xff0000, '', 'shell32.dll,12')
_SD_MenuCreateItem($Menu1, '', '', '', '', '#')
$iIDItemMenu1 = _SD_MenuCreateItem($Menu1, 'Пункт с подменю 2', 0x0000ff, -2, 'shell32.dll,10')
$Menu2 = _SD_MenuCreate(1, $Menu1, $NT); подменю без иконок. иконки не указаны, хотя и установлен флаг 1 в параметре функции
_SD_MenuCreateItem($Menu2, 'Первый пункт второго подменю', 0xFFFFFF, 0x0000ff)
_SD_MenuCreateItem($Menu2, 'Item with func варианты ', 0xFFFFFF, 0xff0000, '', '_func')
_SD_MenuCreateItem($Menu2, 'Item + func варианты ', 0xFFFFFF, 0x000000, '', '_func')
$Menu3 = _SD_MenuCreate(1, $Menu1, $iIDItemMenu1);, '', '12,400,0,arial')
$iIDItemMenu2 = _SD_MenuCreateItem($Menu3, '$iIDItemMenu2 вариант WM_', 0xFFFFAA, 0xB22222, 'shell32.dll,54')
_SD_MenuCreateItem($Menu3, 'Item with func варианты ', 0xFFFFFF, 0xFF6347, 'shell32.dll,45', '_msg')
_SD_MenuCreateItem($Menu3, 'Item + func варианты ', 0xDCDCDC, 0x4B0082, '', '_msg')
For $i = 1 To 20
If $i = 1 Then
_SD_MenuCreateItem($Menu3, 'Пункты 1', 0xCC8080, '', '', '#')
ContinueLoop
EndIf
If $i = 11 Then
_SD_MenuCreateItem($Menu3, '', 0x0000FF, '', '', '#')
ContinueLoop
EndIf
Switch $i
Case 13, 15, 17, 19
_SD_MenuCreateItem($Menu3, 'Item ' & $i, '', '', 'shell32.dll,' & $i, '_func')
Case 12
_SD_MenuCreateItem($Menu3, 'Пункты 2', 0xFF0000, '', '', '#')
Case 14, 16, 18, 20
_SD_MenuCreateItem($Menu3, 'Item ' & $i, '', '', '', '_func')
Case Else
_SD_MenuCreateItem($Menu3, 'Item ' & $i, '', '', 'shell32.dll,' & $i, '_func')
EndSwitch
Next
_SD_CreatePopupMenu($Form1, $Menu)
EndFunc ;==>_Menu
Func _flsf()
Local $fslf = FileSelectFolder('', '', 0, '', $Form1)
If @error Then Return
EndFunc ;==>_flsf
Func _func()
ConsoleWrite('execute func ctrl menu ' & Random(1, 200, 1) & @LF)
EndFunc ;==>_func
Func _FLPD()
$stext = FileOpenDialog('', '', '(*.*)', 0, '', $Form1)
If @error Then $stext = ''
EndFunc ;==>_FLPD
Func _msg()
MsgBox(64, '', 'execute func ctrl menu', 0, $Form1)
EndFunc ;==>_msg
Сообщение автоматически объединено:
обновление библиотеки
добавлена настраиваемая подсветка пунктов при наведении мышью
добавлена возможность создавать разделитель между пунктами одного меню
исправлены некоторые ошибки
исправлен пример
- Автор
- joiner
- Источник
- Ссылка на источник
Вложения
Последнее редактирование: