View previous topic :: View next topic |
Author |
Message |
Orion9
Joined: 01 Jan 2024 Posts: 398
|
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 398
|
(Separately) Posted: Fri Jun 07, 2024 14:27 Post subject: |
|
|
Loopback
Была уже схожая проблема с открытым списком параметров, но тут обнаружил, что пример из справки
Hidden text Code: | MyFunc("text")
MyFunc("text", "My title")
Func MyFunc(var1, var2 = "Default title")
MsgBox(var1) # --> text --> text
MsgBox(var2) # --> Default title --> My title
EndFunc |
тоже приводит к сообщению об ошибке "Слишком много актуальных параметров в вызове "MyFunc"", хотя сама функция потом отрабатывает нормально, т.е. как и должна. Жаль. Хотел использовать фичу "Параметр со значением по умолчанию" в одной из функций, но теперь придется, видимо, через глобальную переменную как-то решать. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1399
|
(Separately) Posted: Fri Jun 07, 2024 23:42 Post subject: |
|
|
Всё давно исправлено, надеюсь что версия не за горами. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 398
|
(Separately) Posted: Sat Jun 08, 2024 11:36 Post subject: |
|
|
Loopback
Похоже, есть еще проблема с функцией Abs. Пример из справки возвращает ноль на числе с дробной частью:
Code: | MsgBox(Abs(-5)) # --> 5
MsgBox(Abs(1.25)) # --> 1.25 |
Кстати, навело на мысль, что Autorun нужна функция типа IsInteger, чтобы проверять число, целое оно или нет.
Еще бы хотелось, чтобы ShowPopupMenu могла вызывать внутренние функции Autorun, а не только em_ команды из bar и mnu файлов.
Можно такое реализовать? |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1399
|
(Separately) Posted: Sat Jun 08, 2024 14:45 Post subject: |
|
|
Orion9 wrote: | Похоже, есть еще проблема с функцией Abs. |
Да, это всё связано с этим багом. Уже исправлено.
Orion9 wrote: | нужна функция типа IsInteger |
И не только целое, может и IsNumber понадобиться. Но нужно понимать, что поскольку переменные - строки, такая функция будет сообщать не "тип переменной", а только то, может ли быть данная строка приведена к числу.
Orion9 wrote: | ShowPopupMenu могла вызывать внутренние функции Autorun |
В теории и сейчас можно, с помощью костыля в виде регистрации сообщения и отправки тоталу em-команды, которая в свою очередь будет отправлять зарегистрированное сообщение
А так что-то наверное можно. Самый простой вариант - сделать какой-то специальный маркер команды, например au_xxxxx (с надеждой, что Гислер в будущем не захочет сделать такой тип команд ) и использовать его в меню. Но это в определенном смысле ломает совместимость, т.к. при использовании меню в тотале такие пункты будут при нажатии выдавать ошибку. Еще минус, что в отличие от тотала, я не вижу где эти команды могут быть применимы, кроме меню. А ведь придется делать обвес для привязки внутренней функции к этой псевдокоманде (ну или для простоты сделать то что за au_ - именем функции). В общем это нужно обдумать, но идея на первый взгляд выглядит стоящей. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 398
|
(Separately) Posted: Sat Jun 08, 2024 18:25 Post subject: |
|
|
Loopback wrote: | Да, это всё связано с этим багом. Уже исправлено. |
Отлично!
Loopback wrote: | поскольку переменные - строки, такая функция будет сообщать не "тип переменной", а только то, может ли быть данная строка приведена к числу. |
Именно это и нужно, в принципе. Но только чтобы была еще проверка на отсутствие или присутствие дробной части, т.е. чтобы было понятно, целое это число или вещественное.
Loopback wrote: | В теории и сейчас можно, с помощью костыля в виде регистрации сообщения и отправки тоталу em-команды, которая в свою очередь будет отправлять зарегистрированное сообщение |
Я так и делаю.) Проблем нет, если это всего несколько команд, но когда их больше двух десятков, да еще и однотипных, как-то уже не фонтан. Да и потом, для вызова функций Autorun нужна внешняя утилита, а это еще одно лишнее звено. В итоге, чтобы запустить функцию Autorun из меню, нужно иметь не только саму функцию, но и отдельную em_ команду, прописанную специально для нее в usercmd.ini, а также утилиту TCFS2 или что-то другое, что пошлет сообщение окну ТС. Как-то слишком много посредников тут набирается
Loopback wrote: | Самый простой вариант - сделать какой-то специальный маркер команды, например au_xxxxx (с надеждой, что Гислер в будущем не захочет сделать такой тип команд ) и использовать его в меню. |
Хороший вариант. А на счет au_xxxxx не беспокойтесь: вряд ли Маэстро захочет на старости лет что-то радикально менять.))
Loopback wrote: | Но это в определенном смысле ломает совместимость, т.к. при использовании меню в тотале такие пункты будут при нажатии выдавать ошибку. |
Наверное, тут больше подразумевается, что меню, вызывающее внутренние функции Autorun, будет создаваться в самом скрипте с ключом /F. А если использовать внешние mnu файлы, то действительно можно наткнуться на неприятности, теоретически.
Loopback wrote: | Еще минус, что в отличие от тотала, я не вижу где эти команды могут быть применимы, кроме меню. А ведь придется делать обвес для привязки внутренней функции к этой псевдокоманде (ну или для простоты сделать то что за au_ - именем функции). |
Именно так! И логично, и информативно.
Loopback wrote: | В общем это нужно обдумать, но идея на первый взгляд выглядит стоящей. |
Еще более стоящая идея, которая давно напрашивается, - чтобы Маэстро хотя бы чуток подсобил и сделал отдельный интерфейс для взаимодействия с Autorun либо какой-то специальной командой, либо посылкой из ТС сообщения самому себе. Причём второй вариант гораздо хуже первого |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1399
|
(Separately) Posted: Sat Jun 08, 2024 22:54 Post subject: |
|
|
Orion9 wrote: | И логично, и информативно. |
Вроде бы просто и логично, но вылезает проблема - значки. Для внутренних команд они берутся из маппинга *.inc, em-команды сами содержат пути к значкам. А где их брать для условных au-команд?
Orion9 wrote: | чтобы Маэстро хотя бы чуток подсобил и сделал отдельный интерфейс для взаимодействия с Autorun |
Очень сомневаюсь, что Кристиан будет заниматься таким взаимодействием со сторонними плагинами или приложениями. Мне кажется, тема сторонней автоматизации для него по интересу где-то ближе к концу списка.
И кстати, что именно подразумевается под таким взаимодействием? |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 398
|
(Separately) Posted: Sun Jun 09, 2024 12:45 Post subject: |
|
|
Loopback wrote: | Вроде бы просто и логично, но вылезает проблема - значки. |
Да это не проблема. Можно и без значков обойтись, если на то уж пошло. А если они все-таки будут нужны, то вариант с em_ командой всегда есть в запасе.
Кстати, а если попробовать в параметрах au_ команды в самом mnu перадавать путь к значку, то не получится что-нибудь сделать? Сейчас подобная запись просто игнорируется:
Code: | txt = txt & 'MENUITEM "Настройки...", au_fConfig, %COMMANDER_PATH%\Icons\File.dll,20' & auCRLF
|
Loopback wrote: | Мне кажется, тема сторонней автоматизации для него по интересу где-то ближе к концу списка. |
Боюсь, не только сторонней
Loopback wrote: | И кстати, что именно подразумевается под таким взаимодействием? |
Точно сказать не могу, тут надо более глубокие системные знания иметь, но если речь идет об избавлении от всех костылей и о прямом вызове функций Autorun из самого ТС, то, думаю, предложенный вами вариант au_ команд вполне может подойти. Другими словами, при создании кнопки в качестве команды указывается не cm_ или em_, а au_ команда с именем функции Autorun. Или в ТС должна быть своя команда, которая будет принимать в качестве параметров имя такой функции. А уж как этот интерфейс будет внутренне устроен и реализован - это другой, чисто технический вопрос. Но понятно, что Autorun должен будет каким-то образом предоставлять список всех доступых к вызову функций, объявленных при загрузке плагина. Другой вопрос, что без самого Гислера такие вопросы не решить и никакие интерфейсы не наладить. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1399
|
(Separately) Posted: Mon Jun 10, 2024 00:55 Post subject: |
|
|
Orion9 wrote: | Можно и без значков обойтись, если на то уж пошло. |
Без значков грустно
Orion9 wrote: | Кстати, а если попробовать в параметрах au_ команды в самом mnu перадавать путь к значку |
Это один из вариантов, хотя не очень хотелось бы расширять парсер под нестандартный формат. Другой вариант - отдельная функция, задающая привязку au-команды к значку, но это тоже не идеальный вариант, к тому же вызывать ее придется до создания меню. Надо думать дальше. Впрочем, всё равно до следующей беты я это скорее всего не начну.
Orion9 wrote: | Другими словами, при создании кнопки в качестве команды указывается не cm_ или em_, а au_ команда с именем функции Autorun. |
Ясно. Но это уже, конечно, из области фантастики. В общем вариант с регистрацией сообщений остаётся основным рабочим вариантом. По-сути единственный его минус - в необходимости дополнительного приложения, отправляющего сообщения. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 398
|
(Separately) Posted: Mon Jun 10, 2024 12:20 Post subject: |
|
|
Loopback wrote: | Это один из вариантов, хотя не очень хотелось бы расширять парсер под нестандартный формат. |
Да, могут быть проблемы, особенно если Гислер вдруг решит обрабатывать строку за запятой, т.е. за командой. Это удивительно, как он до сих пор не сделал что-то вроде:
Code: | MENUITEM "Reboot", cm_Exit, 9 |
Казалось бы, если есть возможность передавать параметры командам, то логично иметь такую поддержку в MNU файлах. Но даже и такой вариант можно было бы учесть в парсере каким-нибудь дополнительным ключом или маркером.
Loopback wrote: | Другой вариант - отдельная функция, задающая привязку au-команды к значку, но это тоже не идеальный вариант, к тому же вызывать ее придется до создания меню. |
С одной стороны, в шапке будут сразу видны объявления и связи всех значков, но с другой стороны, если значков ожидается десятки, то это лишняя груда строк, причем в самом начале скрипта.)
Loopback wrote: | Но это уже, конечно, из области фантастики. |
Знаю... Но как красиво было бы!
Loopback wrote: | В общем вариант с регистрацией сообщений остаётся основным рабочим вариантом. По-сути единственный его минус - в необходимости дополнительного приложения, отправляющего сообщения. |
Небольшой минус, согласен. Тем более, что такие утилиты, как TCFS2, не только ведь для отправки сообщений используется, а значит, в любом случае должны быть в наборе.
Более реалистичный случай, если автор ТС сделает собственную команду SendMessage для отправки сообщений окнам, в том числе и своему. Но не похоже, чтобы это было ему интересно. Тема автоматизации там действительно не в приоритетах, судя по всему, а вернее:
Hidden text судя последним 30 годам |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1399
|
(Separately) Posted: Tue Jun 11, 2024 01:19 Post subject: |
|
|
Orion9 wrote: | особенно если Гислер вдруг решит обрабатывать строку за запятой |
Это уже не будет иметь значения, он раньше споткнётся на неподдерживаемом идентификаторе.
Orion9 wrote: | Казалось бы, если есть возможность передавать параметры командам, то логично иметь такую поддержку в MNU файлах. |
Возможно, не хочет ломать десятилетиями надежно работающий код. А может ему просто никто это не предлагал.
Orion9 wrote: | то это лишняя груда строк, причем в самом начале скрипта |
Не обязательно в начале, но где-нибудь до момента вызова меню. Но да, куча строк обеспечена.
Еще есть простой вариант: завести какой-нибудь единый ini-файл с соответствиями. Но этот вариант как-то тоже не очень, появляется еще одна точка редактирования.
Orion9 wrote: | Тем более, что такие утилиты, как TCFS2, не только ведь для отправки сообщений используется, а значит, в любом случае должны быть в наборе. |
Как вариант, можно попробовать сделать отправку сообщения через запуск rundll32 (которая гарантированно есть в любой винде) и субплагин Autorun-a, например Runtime. Вызов может выглядеть как-нибудь так:
rundll32.exe <Путь к плагину>Autorun_Runtime.dll,SendMessage "MyMessage 0 0".
Но это по-сути всё равно вызов через внешнее приложение.
Но на самом деле тоже не вижу проблемы иметь утилиту в комплекте, тем более столь несущественного размера.
Orion9 wrote: | Более реалистичный случай, если автор ТС сделает собственную команду SendMessage для отправки сообщений окнам, в том числе и своему. |
Да, такого варианта вполне хватило бы, что-то типа cm_SendMessage. Несколько параметров внутренние команды поддерживают. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 398
|
(Separately) Posted: Tue Jun 11, 2024 13:13 Post subject: |
|
|
Loopback wrote: | Возможно, не хочет ломать десятилетиями надежно работающий код. А может ему просто никто это не предлагал. |
Может, и есть смыл попросить его рассматривать запятую после команды в MNU как начало параметров или вообще игнорировать все, что идет за запятой (потому что сейчас это приводит к ошибке и недоступности пунктов меню), но я не большой ходок на зарубежный форум челом бить.)
Loopback wrote: | Еще есть простой вариант: завести какой-нибудь единый ini-файл с соответствиями. Но этот вариант как-то тоже не очень, появляется еще одна точка редактирования. |
Ни в коем случае! Пусть уж лучше в .aucfg будет куча строк
Loopback wrote: |
rundll32.exe <Путь к плагину>Autorun_Runtime.dll,SendMessage "MyMessage 0 0". |
Интересная идея. Если есть возможность, то, думаю, такой вызов не помешал бы. Хорошо иметь под рукой разные инструменты.
Loopback wrote: | Да, такого варианта вполне хватило бы, что-то типа cm_SendMessage. Несколько параметров внутренние команды поддерживают. |
Сделает - хорошо. Не сделает - проживем. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1399
|
(Separately) Posted: Wed Jun 12, 2024 00:08 Post subject: |
|
|
Orion9 wrote: | Сделает - хорошо. Не сделает - проживем. |
Вряд ли дождёмся, так что сами, всё сами Проблему решил, получилось довольно красиво, полностью используя имеющиеся средства ТС.
Можно будет просто использовать свои числовые номера команд, главное, чтобы они не пересекались с имеющимися номерами cm-команд. Вызывать можно точно так же, как обычные cm-команды, как из панели, так и из меню. И для них можно добавить маппинг значков в WCMICONS.INC, как и для внутренних команд. Формат меню менять не нужно.
Осталось дождаться следующей версии, т.к. решил включить этот функционал в основной плагин. Больше пока ничего не добавляю, пишу справку. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 398
|
(Separately) Posted: Wed Jun 12, 2024 11:40 Post subject: |
|
|
Loopback wrote: | Вряд ли дождёмся, так что сами, всё сами |
Ну как тут не вспомнить золотые слова Зорга:
Hidden text
Loopback wrote: | Можно будет просто использовать свои числовые номера команд, главное, чтобы они не пересекались с имеющимися номерами cm-команд. Вызывать можно точно так же, как обычные cm-команды, как из панели, так и из меню. И для них можно добавить маппинг значков в WCMICONS.INC, как и для внутренних команд. Формат меню менять не нужно. |
Звучит немного загадочно, но похоже, вам действительно удалось найти красивое решение. Хотелось бы увидеть примеры такого использования.)
Loopback wrote: | Осталось дождаться следующей версии, т.к. решил включить этот функционал в основной плагин. Больше пока ничего не добавляю, пишу справку. |
Отлично! Рад слышать, что процесс вошёл в заключительную стадию. Новая версия плагина давно уже заждалась. Я тоже сегодня постараюсь доделать скрипт на заголовок. Там файл .aucfg уже 1200 строк пробил, но вроде неплохо получилось.) |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1399
|
(Separately) Posted: Thu Jun 13, 2024 00:01 Post subject: |
|
|
Orion9 wrote: | Звучит немного загадочно |
Никакой мистики. По-сути не сильно отличается от SetMessageAction, но с нюансами. К слову, вариация этой же методики используется в TCFS2Tools.
Сначала в скрипте регистрируем команду c функцией:
Code: |
RegisterCommand 60000 MyCommand
Func MyCommand(lParam)
EndFunc
|
Зарегистрированное число (в данном случае 60000) - выглядит и действует как обычная внутренняя команда TC, только вызывающая функцию Autorun. Соответственно, практически всё, что применимо к внутренней команде TC, применимо и к этой. Правда, вызов из главного меню пришлось делать на костылях, т.к. при вызове из него тотал, оказывается, не отправляет сообщение с командой.
Единственный здесь момент - не пересекаться с имеющимися командами TC. Его внутренние команды условно располагаются в диапазоне от 1 до 9999. Начиная с 10000 идут автогенерируемые номера команд для пунктов меню с em-командами. Сколько их может быть, не используются ли внутренне еще какие-нибудь диапазоны - неизвестно. Поэтому специально ограничил возможность регистрировать числа < 60000, но это условно, если появится дополнительная информация, можно будет скорректировать. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|