1 (изменено: svoboden, 2017-03-11 06:14:26)

Тема: AHK: Как создать свое меню в SciTE4AutoHotkey

Добрый день! Подскажите, пожалуйста, кто знает. Как создать свое меню в редакторе SciTE4AutoHotkey, вверху, там где находится: Tools, Options и т.д? Я что-то запутался. Заранее спасибо!

2

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

А что именно непонятно?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: svoboden, 2017-03-31 00:31:59)

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Ну вот, я создал свои пункты в меню Tools, я хочу как бы отдельно создать свое меню, со своими пунктами, чтобы щелкнуть и выбрать нужный пункт, но что-то затормозился я и не могу найти инструкцию, как такое сделать.

4

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Вот пример для Блокнота:

winClass := "Notepad"
myMenuName := "MyMenu"
myItems := ["Item 1", "Item 2"]

DllCall("RegisterShellHookWindow", UInt, A_ScriptHwnd)
CreateMyMenu := Func("CreateMyMenu").Bind(myMenuName, myItems)
ShellProc := Func("ShellProc").Bind(winClass, CreateMyMenu)
OnMessage(DllCall("RegisterWindowMessage", Str, "SHELLHOOK"), ShellProc)
OnExit("Exit")
Return

~LButton::
   if item := IsMouseOverMyMenu(winClass, myItems)
      MsgBox, % item
   Return
   
CreateMyMenu(menuName, items, hWnd)  {
   hMyMenu := DllCall("CreateMenu")
   for k, v in items
      DllCall("AppendMenu", Ptr, hMyMenu, UInt, MF_STRING := 0, UInt, "", Str, v)
   
   hMenu := DllCall("GetMenu", Ptr, hWnd, Ptr)
   DllCall("AppendMenu", Ptr, hMenu, UInt, MF_POPUP := 0x10, Ptr, hMyMenu, Str, menuName)
   DllCall("DrawMenuBar", Ptr, hWnd)
}

ShellProc(myClass, myFunc, nCode, wParam)  {
   if ( nCode = (HSHELL_WINDOWCREATED := 1) )  {
      WinGetClass, winClass, ahk_id %wParam%
      if (winClass = myClass)
         myFunc.Call(wParam)
   }    
}
   
IsMouseOverMyMenu(myClass, items)  {
   WinGetClass, winClass, A
   if (winClass != myClass)
      Return
   
   MouseGetPos,,, ID
   WinGetClass, winClass, ahk_id %ID%
   if (winClass != "#32768")
      Return
   
   AccObj := AccObjectFromPoint(child)
   item := AccObj.AccName(child)
   for k, v in items
      if (v == item)
         Return item
}

AccObjectFromPoint(ByRef _idChild_ = "", x = "", y = "")  {
   static VT_DISPATCH := 9, h := DllCall("LoadLibrary", Str, "oleacc", Ptr)
   
   (x = "" || y = "") ? DllCall("GetCursorPos", Int64P, pt) : pt := x & 0xFFFFFFFF | y << 32
   VarSetCapacity(varChild, 8 + 2*A_PtrSize, 0)
   if   DllCall("oleacc\AccessibleObjectFromPoint", Int64, pt, PtrP, pAcc, Ptr, &varChild) = 0
      Return ComObjEnwrap(VT_DISPATCH, pAcc, 1), _idChild_ := NumGet(varChild, 8, "UInt")
}

Exit()  {
    DllCall("DeregisterShellHookWindow", UInt, A_ScriptHwnd)
}

Сначала запустить скрипт, потом блокнот. Названия пунктов меню должны быть уникальны.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: svoboden, 2017-03-07 04:05:25)

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Да уж, ни думал, что такой скрипт получится, а как хоть вставить свои команды в: Item 1, Item 2?

6

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Попробуйте сами догадаться. Где в коде item определяется? Там в зависимости от результата свою метку или функцию прописываете.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: svoboden, 2017-02-10 02:25:52)

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Спасибо, конечно, но через раз работает в SciTE4. Тогда уж проще свое меню создать командой Menu, муторно, но надежно.

8

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Ну, я так понял, что вопросов у вас нет, так создавайте.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9 (изменено: svoboden, 2017-06-12 08:40:09)

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Так особо никаких вопрос нет на данный момент, но еще такой вопрос есть: в команде "Menu, Tray, Default" - выделяет все жирным цветом, есть такое:

Menu, Tray, Add, &Пауза, Script
Menu, Tray, Default, &Пауза
Menu, Tray, Add, &Exit, Script1
Menu, Tray, Default, &Exit

, но &Пауза не выделяется жирным цветом, может, сам найду ответ покопаюсь, но если знаете, дайте ответ. Как выделить все пункты меню жирным шрифтом? Заранее спасибо.

10

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Default переводится "по умолчанию", а не "выделить жирным". По умолчанию может быть только какой-то один пункт, он и будет выбран при двойном щелчке по иконке в трее.

11

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

как выделить все пункты меню жирным шрифтом

Предполагаю, что код будет не менее навороченный, чем в 4 посте.

12 (изменено: svoboden, 2017-02-03 12:59:53)

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Да, согласен, "век живи - век учись", но это я для примера показал. Мне другое меню надо выделить, обычное, ни в трее которое. Да, знаю что Default переводится как "по умолчанию", но я руководствовался вот этим правилом справки:
(Применение этой команды ко всем меню, кроме того, что в области уведомлений, в настоящее время даёт лишь косметический эффект). Так, что вопрос все тот же, если какой-нибудь способ, сделать шрифты пунктов меню, жирнее, чем они есть?

13

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Изучайте:
https://autohotkey.com/board/topic/7359 … opup-menu/

14 (изменено: svoboden, 2017-03-07 04:07:30)

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Я так понимаю, это ООП или классы. В этой теме, я вообще ничего не понимаю. Думаю, лучше оставлю как есть. Спасибо всем за ответы.

15

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

teadrinker, какой командой можно добавить пункт в myItems?

16

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

becauseim, не совсем ясен вопрос. myItems — это просто название переменной.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

teadrinker, как при помощи команды FileAppend добавить пункт меню (переменную в массив myItems) в упомянутый сценарий?

18

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

При помощи FileAppend никак. Методы объектов здесь. Чтобы добавить в конец, используется Push:

myItems := ["Item 1", "Item 2"]
myItems.Push("Item 3")
MsgBox, % myItems[3]
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19 (изменено: svoboden, 2017-06-17 12:12:28)

Re: AHK: Как создать свое меню в SciTE4AutoHotkey

Решил свой вопрос редактированием SciTE.exe в программе Restorator, может, кому-нибудь понадобится.