Что нового

Вопросы по созданию контекстного меню.

Статус
Закрыто для дальнейших ответов.

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Всем доброго времени суток.
Разбирая информацию по созданию контекстного меню, появилось ряд вопросов, пожалуйста подскажите решения.

Вот начальный код меню:

Код:
#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,...). И есть проблема быстроты появления меню. Можно ли и как сделать наподобие кеша меню, чтобы в него записывалась
- дата модификации файла из которого делается меню. (если дата поменялась, то меню создаётся заново)
- кеш меню
- кеш иконок
и пример считывания из файл-кеша
(или это не ускорит вызов меню?)

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