View previous topic :: View next topic |
Author |
Message |
Orion9
Joined: 01 Jan 2024 Posts: 365
|
(Separately) Posted: Fri Apr 12, 2024 01:00 Post subject: |
|
|
Loopback wrote: | Тултип или что-то похожее скорее всего будет |
Это хорошо. А стиль и оформление можно будет менять? |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1378
|
(Separately) Posted: Fri Apr 12, 2024 10:44 Post subject: |
|
|
Orion9
Предполагается, что настройки темы будут браться из соответствующих настроек тотала. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 365
|
(Separately) Posted: Fri Apr 12, 2024 20:02 Post subject: |
|
|
Loopback, Понятно.
Просто меня приколол консольный вывод в тултип, а если при этом не использовать консольный шрифт, то все рушится (визуально) и не имеет большого смысла.
А что делать с тем, что Тотал перекрывает своим тултипом чужой тултип: координаты расчитывать и сдигать вверх/вниз перед выводом, или можно будет указать в параметрах, чтобы тутлтип показывался не под курсором мыши, а над ним, или что-то в этом роде?
Почитал тут, все же, 10 последних страниц. Нормально так) узнал кое-что нового. Но вот с файлом tweaks_20230825.zip (версия плагина 1.2.1.3) возникла проблема. При его подключении у меня перестает работать вызов меню по клику на заголовке ТС, т.е. команды:
Code: | ControlSetMouseAction /R /H:2 0 TitleBarMenu
ControlSetMouseAction /L /K:C /H:2 0 TitleBarMenu
Func TitleBarMenu()
If FileExist(BarPath) Then
ShowPopupMenu /D %BarPath%
Else
MsgBox("Не найден " & BarPath)
Endif
EndFunc
|
Не знаю, что именно тут не срабатывает, т.к. глубже разбираться не стал - просто вернул назад старый Autorun_Tweaks.dll версии 1.2.1.1 и все снова стало работать.
А вот за подсветку к Akelpad - спасибо! Прям кайфонул К сожалению, ваш вариан подсветки, yozhik, мне попробовать не удалось, т.к. ссылки больше не доступны. Но если хотите, можете прикрепить его сюда, в тему, в формате MIME, чтобы он всегда был с форумом.
Ну, и пару моментов напоследок: в справке написано, что Имя внутренней переменной может состоять только из латинских букв, цифр и символа подчёркивания «_». Имя внутренней переменной не может начинаться с цифры. Однако, при попытке создать переменную, имя которой начинается с подчёркивания (например, _Var), возникает ошибка Символ "_" не разрешён в этом месте.
В справке к команде SetMessageAction присутствует целый абзац, который, очевидно, принадлежит другой команде (добавьте к To-Do при следующей копмпиляции).
Quote: |
При командной записи, если в параметрах вызываемой команды cmd есть вычисляемая строка, то она будет пересчитываться каждый раз при выполнении команды cmd. Напрямую реализовать такую логику в функциональной записи нельзя, поскольку в ней любые выражения в параметрах вычисляются только один раз в момент вызова SetHotkeyAction и не будут пересчитываться при выполнении привязанного действия. Таким образом, чтобы достигнуть результата, аналогичного использованию вычисляемых строк в командной записи, необходимо использовать в качестве команды дополнительную пользовательскую функцию, в которой выполнять требуемое выражение. |
|
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1378
|
(Separately) Posted: Fri Apr 12, 2024 23:55 Post subject: |
|
|
В общем тултипы таки родились. Версия предварительная, есть не всё, и что-то еще будет меняться. Справки, понятно, пока тоже нет. Добавлены две новые функции:
Code: | ShowHint("text" [, x, y]) |
Универсальная функция отображения подсказки. Закрывается кликом на самой подсказке, на свободном месте окна или по ESC. Цвета берутся из настроек TC. Поддерживает темную тему и переключение командой cm_SwitchDarkmode. По умолчанию, без задания x, y, показывается под курсором.
Code: | ControlSetHint [/B:nn] <id> <text> |
Регистрирует подсказку по наведению на элемент окна TC. Принцип регистрации и работа переключателя /B аналогичны ControlSetMouseAction (кроме контрола "0" и соответствующих зон).
Пример: отображает подсказку при наведении на кнопке F3 Просмотр.
Code: |
ControlSetHint /B:1 17 "My hint"
|
С этой функцией есть проблема: поскольку не происходит перехвата фокуса от ТС, не получается закрыть имеющуюся подсказку контрола. Так что пока функция бесполезна для контролов с собственной подсказкой. Пробовал находить и прятать окна со стандартным классом тултипа, но подсказка тотала не прячется. Предполагаю, что тотал оперирует чем-то самописным.
Теперь по вопросам.
Orion9 wrote: | Просто меня приколол консольный вывод в тултип, а если при этом не использовать консольный шрифт, то все рушится (визуально) и не имеет большого смысла. |
В принципе, если вводить не сразу, а обработать, то наверняка можно добиться красивого вывода и без моноширинных шрифтов. Посмотрим, очень уж много времени уходит на все эти визуальные изыски. Делать отдельные настройки цветов/шрифтов под каждую подсказку - это куча ключей, да и внутренне обработка изрядно усложняется.
Orion9 wrote: | А что делать с тем, что Тотал перекрывает своим тултипом чужой тултип |
Для тултипа, который вызывается вручную, ничего не делать, он выходит на передний план, соответственно тоталовская подсказка гасится. Кстати, похоже это единственный способ спрятать родную подсказку. Для подсказок по наведению пока не решено.
Orion9 wrote: | Но вот с файлом tweaks_20230825.zip (версия плагина 1.2.1.3) возникла проблема. |
Проверил указанный код на сегодняшней версии, вроде всё работает.
Orion9 wrote: | возникает ошибка Символ "_" не разрешён в этом месте. |
Надо будет проверить, вроде должно быть допустимое сочетание. С именами функций, кстати, та же проблема.
Orion9 wrote: | В справке к команде SetMessageAction присутствует целый абзац, который, очевидно, принадлежит другой команде |
Да, просто копипаст, нужно SetHotkeyAction заменить на SetMessageAction. В исходнике исправил. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 365
|
(Separately) Posted: Sat Apr 13, 2024 01:17 Post subject: |
|
|
Loopback
Тултип, походу, красавцем выйдет Но пока попытка вывести:
Code: | ProcessExecGetOutput /OEM icacl "%COMMANDER_PATH%\Plugins\uwdx\uwdx.bat" """%f%"""
ShowHint(icacl)
msgbox(icacl)
|
приводит к ошибке Отсутствует закрывающая кавычка для строки:
При этом MsgBox отрабатывает нормально. Но сам тултип я видел - классно, что он тушит тоталовский Об остальном теперь уже завтра допишу. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 365
|
(Separately) Posted: Sat Apr 13, 2024 14:17 Post subject: |
|
|
Quote: | Проверил указанный код на сегодняшней версии, вроде всё работает. |
В новейшей 1.2.1.4 у меня опять не работает. Судя по всему, не срабатывает ShowPopupMenu, поскольку в тело функции TitleBarMenu, вызываемой по клику, он таки входит, а дальше просто ничего не происходит. Но если послать em_ команду, то все работает:
Code: | ControlSetMouseAction /R /H:2 0 TitleBarMenu
ControlSetMouseAction /L /K:C /H:2 0 TitleBarMenu
Func TitleBarMenu()
CommandExec em_title_menu
If FileExist(BarPath) Then
ShowPopupMenu /D %BarPath%
Else
MsgBox("Не найден " & BarPath)
Endif
EndFunc |
Code: | [em_title_menu]
button=
cmd=OPENBARMENU %COMMANDER_PATH%\Ini\Title\Menu.bar
iconic=1
|
Но меня такой вариант не сильно устраивает, т.к. команда OPENBARMENU имеет свойство открывать меню не совсем там, где надо
По поводу стиля и шрифтов, не заморачивайтесь. Я просто спросил, потому как не был уверен, насколько это сложно было бы реализовать. А вдруг каким-то чудом не так сложно! Хотя, судя по тому, как это делают на AutoHotkey, работы там прилично.
На тулбар есть ограничение на количество символов? Я тут сделал более-менее рабочий вариант, в MsgBox все окей, а вот в тулбаре явный срез. Ошибка с кавычками (выше) продолжает переодически появлятся, но не всегда. Пока не понял закономерности.
Code: | ControlSetMouseAction /L /K:C 3 ShowConsoleHint 0
ControlSetMouseAction /L /K:C /K:S 3 ShowConsoleHint 1
Func ShowConsoleHint(pMsg)
Local f, p, out, hint
Local uwdx = %COMMANDER_PATH% & "\Plugins\uwdx\uwdx.exe"
If Not FileExist(uwdx) Then
MsgBox("Не найден " & uwdx)
Return
Endif
f = StrPart(ItemAtCursor('text'), auTAB, 1)
p = SendMessage(RequestInfo(ItemAtCursor('panel') + 8), 13, 500, "" , 2)
p = StrLeft(p, StrPos(p, "\", -1))
f = p & f
If Not FileExist(f) Then
MsgBox("Файл не существует " & f)
Return
Endif
ProcessExecGetOutput /OEM icacls %COMSPEC% "/c icacls ""%f%"" /q" %p%
out = icacls
ProcessExecGetOutput links %uwdx% "/C:1251 /E /I /X:Obj_RealPath /X:Obj_RealSize NTLinks.wdx ""%f%"""
out = out & auLF & links
ProcessExecGetOutput stream %uwdx% "/C:1251 /I NTFSFileStreams.wdx ""%f%"" ""Streams Count"""
If stream > 0 Then
ProcessExecGetOutput streams %uwdx% "/C:1251 /I /E /X:8 /X:9 NTFSFileStreams.wdx ""%f%"""
Else
streams = "-------- No NTFS Streams -------- "
EndIf
out = out & auLF & streams
ProcessExecGetOutput filex %uwdx% "/C:1251 /E /I /X:2 /X:8 /X:9 /X:10 /X:11 /X:12 /X:19 /X:20 /X:21 /X:22 FileX.wdx ""%f%"""
out = out & auLF & filex
i=1
while 1
line=StrPart(out, auLF, i)
If ERROR = 1 Then Break
If StrLen(StrTrim(line)) = 0 Or StrPos(line, 'All non-empty') > 0 _
Or StrPos(line, 'не удалось') > 0 Or StrPos(line, ' All') > 0 Then
i = i + 1
Continue
Endif
hint = hint & line & auLF
i = i + 1
Wend
If Not pMsg Then
ShowHint(hint)
Else
MsgBox(hint)
Endif
EndFunc |
|
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1378
|
(Separately) Posted: Sat Apr 13, 2024 22:26 Post subject: |
|
|
Orion9 wrote: | приводит к ошибке Отсутствует закрывающая кавычка для строки: |
Orion9 wrote: | На тулбар есть ограничение на количество символов? Я тут сделал более-менее рабочий вариант, в MsgBox все окей, а вот в тулбаре явный срез. |
Очень похоже на банальную нехватку размера буфера. Он сейчас фиксированный на 512 символов (копипаста с другой функции, где этого было достаточно). Может вывод в проблемных случаях превышать этот размер? В любом случае здесь логично переделать на динамический.
Orion9 wrote: | Судя по всему, не срабатывает ShowPopupMenu |
Именно так. Как раз с меню в этих версиях и были большие изменения. Проверил на своей панели, действительно не открывается. Нужно копать, сходу непонятно.
UP: а нет, увы, это с другим связано. Вот же совпало. Тестировал на рабочей версии Autorun, а на версии 2.2.11 проблему повторить не могу.
Orion9 wrote: | По поводу стиля и шрифтов, не заморачивайтесь. Я просто спросил, потому как не был уверен, насколько это сложно было бы реализовать. |
На самом деле тут сложнее всего придумать, как и где передать эти настройки. По умолчанию шрифт, думаю, нужно брать из настройки "Шрифт диалоговых окон" (откуда берется шрифт подсказок тотала). Но вот всего лишь указать какой-то кастомный шрифт - нужно передавать много параметров (название и размер как минимум).
Вариант с отдельным ini совсем не нравится. Вариант указывать директивой или ввести какую-нибудь функцию Opt, как в Autoit, чуть получше, но тоже не идеально. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 365
|
(Separately) Posted: Sun Apr 14, 2024 00:12 Post subject: |
|
|
Еще один простенький, но довольно эффектный пример использования.
Новый тултип во всей красе с вызовом по Alt+Click и анализом файла под курсором утилитой TrID:
Code: | ControlSetMouseAction /L /K:A 3 ShowAltHint 0
ControlSetMouseAction /L /K:A /K:S 3 ShowAltHint 1
Func ShowAltHint(nMsg)
Local f, p, out, line, hint
Local trid = %COMMANDER_PATH% & "\Plugins\wdx\TrID\TrID\trid.exe"
If Not FileExist(trid) Then
MsgBox("Не найден " & trid)
Return
Endif
f = StrPart(ItemAtCursor('text'), auTAB, 1)
p = SendMessage(RequestInfo(ItemAtCursor('panel') + 8), 13, 500, "" , 2)
p = StrLeft(p, StrPos(p, "\", -1))
f = p & f
If Not FileExist(f) Then
MsgBox("Файл не существует " & f)
Return
Endif
ProcessExecGetOutput out %trid% '"%f%"'
i=1
while 1
line=StrPart(out, auLF, i)
If ERROR = 1 Then Break
If StrLen(StrTrim(line)) = 0 Then
i = i + 1
Continue
Endif
hint = hint & line
i = i + 1
Wend
If Not nMsg Then
ShowHint(hint)
Else
MsgBox(hint)
Endif
EndFunc
|
Заметил, правда, что через какое-то время использования тултип при вызове виснет и вешает весь ТС. Пока не понятно с чем это связано, но, надеюсь, дальнейшие тесты покажут.
С меню не совсем понятно. У меня версия 2.2.10, попробую еще поиграться с опциями, может, как-то удастся его завести и идентифицировать проблему.
По поводу стилей, это все, конечно, не обязательно, имхо. Но если вы придумаете какой-то способ, то будет красиво Кстати, почему-то в темном режиме текст у тултипа выглядит немного блекло на фоне стандартного тоталовского. Это только у меня, или вы тоже наблюдаете? |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 365
|
(Separately) Posted: Sun Apr 14, 2024 19:37 Post subject: |
|
|
Loopback
А как задать тултипу координаты, чтобы он не у курсора мыши всплывал, а файлового курсора активной панели?
Довесил к функции, что была выше, вызов по F1: вроде удобно так - стрелка вниз->F1->ESC, стрелка вниз->F1->ESC и т.д. Только тултип появляется у стрелки мыши, а не у активного файла.
Hidden text Code: | ControlSetMouseAction /L /K:A 3 ShowAltHint 0
ControlSetMouseAction /L /K:A /K:S 3 ShowAltHint 1
SetHotkeyAction /H:F1 ShowAltHint 2
Func ShowAltHint(nMsg)
Local f, p, out, line, hint
Local trid = %COMMANDER_PATH% & "\Plugins\wdx\TrID\TrID\trid.exe"
If Not FileExist(trid) Then
MsgBox("Не найден " & trid)
Return
Endif
If nMsg < 2 Then
f = StrPart(ItemAtCursor('text'), auTAB, 1)
p = SendMessage(RequestInfo(ItemAtCursor('panel') + 8), 13, 500, "" , 2)
Else
f = StrPart(GetCurrentItem(3), auTAB, 1)
p = SendMessage(RequestInfo(RequestInfo(1000) + 8), 13, 500, "" , 2)
EndIf
p = StrLeft(p, StrPos(p, "\", -1))
f = p & f
If Not FileExist(f) Then
MsgBox("Файл не существует " & f)
Return
Endif
ProcessExecGetOutput out %trid% '"%f%"'
i=1
while 1
line=StrPart(out, auLF, i)
If ERROR = 1 Then Break
If StrLen(StrTrim(line)) = 0 Then
i = i + 1
Continue
Endif
hint = hint & line
i = i + 1
Wend
If nMsg=1 Then
MsgBox(hint)
Else
ShowHint(hint)
Endif
EndFunc |
|
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1378
|
(Separately) Posted: Sun Apr 14, 2024 21:56 Post subject: |
|
|
Версия от 14.04.2024
Количественно изменений немного, но решил выложить, поскольку есть очень важные:
- исправлен серьезный, очень давний баг, приводивший к порче памяти
- исправлена утечка памяти, потенциально могла приводить к падениям
- исправлен размер буфера (длинный текст не должен обрезаться)
- вместо системного шрифта подсказки берется шрифт из настроек ТС
Возможно, что исправятся и меню, и возможные зависания.
По поводу установки визуальных настроек тултипа. Наверно сделаю отдельную функцию, позволяющую отдельно установить шрифт и цвета. Установленные параметры будут действовать на все последующие вызовы. Разумеется, менять можно будет неоднократно.
Orion9 wrote: | Новый тултип во всей красе с вызовом по Alt+Click и анализом файла под курсором утилитой TrID |
Вполне вариант, хотя скоро такими темпами не останется комбинаций с кликами
Orion9 wrote: | Кстати, почему-то в темном режиме текст у тултипа выглядит немного блекло на фоне стандартного тоталовского. |
Не заметил, но в той версии использовался системный шрифт, который мог отличаться от установленного в тотале. Сейчас настройки берутся из конфигурации тотала, но даже в этом случае в теории могут быть некоторые отличия из-за разных параметров CreateFont (я же не знаю, с какими он создается в тотале).
Orion9 wrote: | А как задать тултипу координаты, чтобы он не у курсора мыши всплывал, а файлового курсора активной панели? |
Зная индекс элемента, нужно отправить списку сообщение LB_GETITEMRECT и далее рассчитать нужные координаты. Но это точно не задача функции тултипа делать привязку к файлам.
Наверно, можно сделать какую-нибудь функцию в Runtime. Есть, конечно, враппер для SendMessage, но результатом должна быть структура RECT, которую он не поддерживает. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 365
|
(Separately) Posted: Tue Apr 16, 2024 20:21 Post subject: |
|
|
Quote: | Версия от 14.04.2024 |
Спасибо
Quote: | Возможно, что исправятся и меню, и возможные зависания. |
Первые тесты показывают, что стабильность выросла на порядок. Уже больши сотни раз вызывал различные хинты - и ни разу не зависло (раньше могло и нескольких раз хватить, чтобы повесить весь Тотал).
Текст не режется и это классно. Один недостаток, который я заметил: тултип скрывается за панелью задач, когда вызывается для файлов внизу списка. У штатного тоталовсого такой проблемы нет.
Quote: | По поводу установки визуальных настроек тултипа. Наверно сделаю отдельную функцию, позволяющую отдельно установить шрифт и цвета. Установленные параметры будут действовать на все последующие вызовы. Разумеется, менять можно будет неоднократно. |
Посмотрим. как оно будет. Но, возможно, вы были правы - консольный шрифт излишество, нужно просто подогнать, подровнять вывод. Но дополнительные параметры стиля и оформления лишними от этого вряд ли станут.
Quote: | Вполне вариант, хотя скоро такими темпами не останется комбинаций с кликами |
Ну, это не страшно. Будем и дальше ломать функциональные клавиши. F1 уже сломал, F2 на подходе
Ну, а если серьезно, то пока идут, скорее, лишь поиски и эксперименты. Реальных альтернативных тултипов будет, наверное, 1-2, не более, а то и правда можно будет в них запутаться)
С темным режимом еще надо будет потестировать попозже, а вот функция ShowPopupMenu так и не заработала. Жаль. Она мне очень нужна. Хотелось бы видеть ее скорейшее выздоровление
Кстати, забыл в тот раз написать. Строчка кода f = StrPart(ItemAtCursor('text'), auTAB, 1) валит 32-битный Тотал, если кликнуть в пустом пространстве списка. В 64 такой проблемы нет. Проверил: виновница StrPart. Я, конечно, сделаю все необходимые проверки, чтобы она не отрабытывала на пустом значении, но не могли бы вы посмотреть, что там не так?
Quote: | Зная индекс элемента, нужно отправить списку сообщение LB_GETITEMRECT и далее рассчитать нужные координаты |
Спасибо за наводку. Гляну, что там к чему. Но учитывая новые вводные (возможность задавать координаты тултипу), наверное, все-таки будет нужна вспомогательна функция к Autorun, чтобы облегчить всем нам жизнь) |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1378
|
(Separately) Posted: Tue Apr 16, 2024 22:23 Post subject: |
|
|
Orion9 wrote: | тултип скрывается за панелью задач, когда вызывается для файлов внизу списка |
Есть такое, посмотрю что можно сделать. Кстати, в любом случае нужно проверять границу экрана и смещать его. Иначе даже если он не спрячется за панелью, может уйти за пределы экрана.
Orion9 wrote: | а вот функция ShowPopupMenu так и не заработала |
Даже не знаю, что тут ещё предположить, подставлял разные панели, меню, всё работает. Пока не получается повторить, куда копать непонятно.
Если попробовать убрать всё кроме вызова ShowPopupMenu, будет работать? В BarPath точно существующий путь? Если попробовать другой *.bar или меню, тоже не работает?
Orion9 wrote: | Строчка кода f = StrPart(ItemAtCursor('text'), auTAB, 1) валит 32-битный Тотал |
Да, было падение на пустых строках, исправлено в рабочей версии. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 365
|
(Separately) Posted: Wed Apr 17, 2024 00:53 Post subject: |
|
|
Loopback
Обещал поэксперементировать с ShowPopupMenu, но руки так и не дошли. Теперь буду делать второй заход на попытку.) |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 365
|
(Separately) Posted: Thu Apr 18, 2024 11:39 Post subject: |
|
|
Loopback
Кажется, нашел в чем дело. Функции ShowPopupMenu не нравятся пробелы в пути. Пока частично решил проблему строчкой:
Code: | If FileExist(BarPath) Then
bar = '"' & BarPath & '"'
ShowPopupMenu /D %bar%
Else
MsgBox("Не найден " & BarPath)
Endif |
Но только частично. Поскольку функции, по всей видимости, не нравятся не только пробелы в пути, но и в самих пунктах меню: те пункты, которые в своем названии имеют пробелы, функция не показывает. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1378
|
(Separately) Posted: Thu Apr 18, 2024 23:18 Post subject: |
|
|
Версия от 18.04.2024
- исправлена работа с пробелами в путях
- тултип теперь не прячется под панелью задач
- исправлены (вроде) спонтанные падения при использовании ControlSetHint
Orion9 wrote: | Функции ShowPopupMenu не нравятся пробелы в пути. |
Спасибо, действительно так. Исправил.
Orion9 wrote: | Поскольку функции, по всей видимости, не нравятся не только пробелы в пути, но и в самих пунктах меню: те пункты, которые в своем названии имеют пробелы, функция не показывает. |
А вот с пробелами в названии пунктов не могу подтвердить. Если это и так, то с первой проблемой никак не связано.
В общем, если и в этой версии есть проблемы, то наверно нужен будет образец панели. |
|
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
|