Всем доброго времени суток.
Разбирая информацию по созданию контекстного меню, появилось ряд вопросов, пожалуйста подскажите решения.
Вот начальный код меню:
А вот сами вопросы:
1. Можно в меню задать 2-й цвет фона текста?
- есть функция _SetMenuTextColor(), а можно ли задать как для значков + _SetMenuIconBkGrdColor()
2. Как увеличить шрифт/начертание текста меню?
- так и не нашёл подобной функции, хотя везде в интернете написано "Решено".
3. Как увеличить размер значков в меню (16х16, 24х24 ...)
- нигде не встретилась информация.
4. Как установить прозрачность меню?
5. Как прикрепить меню к определённой программе (к примеру notepad) к правой стороне и чтобы оно не пропадало и с изменением позиции окна программы так же следовало за ним?
6. Как вызвать меню по нажатию правой кнопкой мыши в определённой области программы?
7. И последнее. Этот код только пример. У меня меню создаётся из ini файла (mnu,...). И есть проблема быстроты появления меню. Можно ли и как сделать наподобие кеша меню, чтобы в него записывалась
- дата модификации файла из которого делается меню. (если дата поменялась, то меню создаётся заново)
- кеш меню
- кеш иконок
и пример считывания из файл-кеша
(или это не ускорит вызов меню?)
Просьба не давать примеры для трея. Хотелось бы выяснить всё про контекстное меню.
Даже если часть вопросов решится, будет очень здорово!
Разбирая информацию по созданию контекстного меню, появилось ряд вопросов, пожалуйста подскажите решения.
Вот начальный код меню:
Код:
#include <ModernMenuRaw.au3>
#include <GUIConstantsEx.au3>
$hGUI = GUICreate("", 0, 0, -32767, -32767, 0, 0, _TCHGetScriptProcHandle())
$ContMenu = GUICtrlCreateContextMenu()
Dim $ih[20]
For $i = 0 To 15
$ih[$i] = _GUICtrlCreateODMenuItem('Пункт '&$i, $ContMenu, "shell32.dll", $i)
Next
$ih[5] = _GUICtrlCreateODMenu('ПодПункт ', $ContMenu, "shell32.dll", -2)
GUICtrlSetState(-1, $GUI_DEFBUTTON) ; жирный пункт
GUISetState()
$mpos = MouseGetPos()
SetOLBlueColors()
_TrackPopupMenu($hGUI, GUICtrlGetHandle($ContMenu), $mpos[0], $mpos[1])
While 1
If _IsPressed(1) Then Exit
$ww=GUIGetMsg()
For $i = 0 To UBound($ih)-1
If $ww=$ih[$i] Then
MsgBox(0, "", "Пункт "&$i)
Exit
EndIf
Next
WEnd
Func _TrackPopupMenu($hWnd, $ContMenu, $x, $y)
DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $ContMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hWnd, "ptr", 0)
EndFunc
Func _IsPressed($nKey)
$aR = DllCall("user32", "int", "GetAsyncKeyState", "int", "0x" & Hex($nKey, 2))
If BitAND($aR[0], 0x8000) Then Return True
Return False
EndFunc
Func _TCHGetScriptProcHandle()
Local $sTitle = "ScriptWinRandomTitle"
For $i = 0 To 31
$sTitle &= Chr(Random(0x41, 0x5A))
Next
AutoItWinSetTitle($sTitle)
Return WinGetHandle($sTitle)
EndFunc
Func SetOLBlueColors()
_SetMenuBkColor(0xFFFFFF)
_SetMenuIconBkColor(0xFFEFE3)
_SetMenuIconBkGrdColor(0xE4AD87)
_SetMenuSelectBkColor(0xC2EEFF)
_SetMenuSelectRectColor(0x800000)
_SetMenuSelectTextColor(0x000000)
_SetMenuTextColor(0x000000)
EndFunc
А вот сами вопросы:
1. Можно в меню задать 2-й цвет фона текста?
- есть функция _SetMenuTextColor(), а можно ли задать как для значков + _SetMenuIconBkGrdColor()
2. Как увеличить шрифт/начертание текста меню?
- так и не нашёл подобной функции, хотя везде в интернете написано "Решено".
3. Как увеличить размер значков в меню (16х16, 24х24 ...)
- нигде не встретилась информация.
4. Как установить прозрачность меню?
5. Как прикрепить меню к определённой программе (к примеру notepad) к правой стороне и чтобы оно не пропадало и с изменением позиции окна программы так же следовало за ним?
6. Как вызвать меню по нажатию правой кнопкой мыши в определённой области программы?
7. И последнее. Этот код только пример. У меня меню создаётся из ini файла (mnu,...). И есть проблема быстроты появления меню. Можно ли и как сделать наподобие кеша меню, чтобы в него записывалась
- дата модификации файла из которого делается меню. (если дата поменялась, то меню создаётся заново)
- кеш меню
- кеш иконок
и пример считывания из файл-кеша
(или это не ускорит вызов меню?)
Просьба не давать примеры для трея. Хотелось бы выяснить всё про контекстное меню.
Даже если часть вопросов решится, будет очень здорово!