Это хорошо. А стиль и оформление можно будет менять?Loopback писал(а):Тултип или что-то похожее скорее всего будет
Autorun
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Loopback, Понятно.
Просто меня приколол консольный вывод в тултип, а если при этом не использовать консольный шрифт, то все рушится (визуально) и не имеет большого смысла.
А что делать с тем, что Тотал перекрывает своим тултипом чужой тултип: координаты расчитывать и сдигать вверх/вниз перед выводом, или можно будет указать в параметрах, чтобы тутлтип показывался не под курсором мыши, а над ним, или что-то в этом роде?
Почитал тут, все же, 10 последних страниц. Нормально так) узнал кое-что нового. Но вот с файлом tweaks_20230825.zip (версия плагина 1.2.1.3) возникла проблема. При его подключении у меня перестает работать вызов меню по клику на заголовке ТС, т.е. команды:
Не знаю, что именно тут не срабатывает, т.к. глубже разбираться не стал - просто вернул назад старый Autorun_Tweaks.dll версии 1.2.1.1 и все снова стало работать.
А вот за подсветку к Akelpad - спасибо! Прям кайфонул
К сожалению, ваш вариан подсветки, yozhik, мне попробовать не удалось, т.к. ссылки больше не доступны. Но если хотите, можете прикрепить его сюда, в тему, в формате MIME, чтобы он всегда был с форумом.
Ну, и пару моментов напоследок: в справке написано, что Имя внутренней переменной может состоять только из латинских букв, цифр и символа подчёркивания «_». Имя внутренней переменной не может начинаться с цифры. Однако, при попытке создать переменную, имя которой начинается с подчёркивания (например, _Var), возникает ошибка Символ "_" не разрешён в этом месте.
В справке к команде SetMessageAction присутствует целый абзац, который, очевидно, принадлежит другой команде (добавьте к To-Do при следующей копмпиляции).
Просто меня приколол консольный вывод в тултип, а если при этом не использовать консольный шрифт, то все рушится (визуально) и не имеет большого смысла.
А что делать с тем, что Тотал перекрывает своим тултипом чужой тултип: координаты расчитывать и сдигать вверх/вниз перед выводом, или можно будет указать в параметрах, чтобы тутлтип показывался не под курсором мыши, а над ним, или что-то в этом роде?
Почитал тут, все же, 10 последних страниц. Нормально так) узнал кое-что нового. Но вот с файлом tweaks_20230825.zip (версия плагина 1.2.1.3) возникла проблема. При его подключении у меня перестает работать вызов меню по клику на заголовке ТС, т.е. команды:
Код: Выделить всё
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 - спасибо! Прям кайфонул
Ну, и пару моментов напоследок: в справке написано, что Имя внутренней переменной может состоять только из латинских букв, цифр и символа подчёркивания «_». Имя внутренней переменной не может начинаться с цифры. Однако, при попытке создать переменную, имя которой начинается с подчёркивания (например, _Var), возникает ошибка Символ "_" не разрешён в этом месте.
В справке к команде SetMessageAction присутствует целый абзац, который, очевидно, принадлежит другой команде (добавьте к To-Do при следующей копмпиляции).
При командной записи, если в параметрах вызываемой команды cmd есть вычисляемая строка, то она будет пересчитываться каждый раз при выполнении команды cmd. Напрямую реализовать такую логику в функциональной записи нельзя, поскольку в ней любые выражения в параметрах вычисляются только один раз в момент вызова SetHotkeyAction и не будут пересчитываться при выполнении привязанного действия. Таким образом, чтобы достигнуть результата, аналогичного использованию вычисляемых строк в командной записи, необходимо использовать в качестве команды дополнительную пользовательскую функцию, в которой выполнять требуемое выражение.
В общем тултипы таки родились. Версия предварительная, есть не всё, и что-то еще будет меняться. Справки, понятно, пока тоже нет. Добавлены две новые функции:
Универсальная функция отображения подсказки. Закрывается кликом на самой подсказке, на свободном месте окна или по ESC. Цвета берутся из настроек TC. Поддерживает темную тему и переключение командой cm_SwitchDarkmode. По умолчанию, без задания x, y, показывается под курсором.
Регистрирует подсказку по наведению на элемент окна TC. Принцип регистрации и работа переключателя /B аналогичны ControlSetMouseAction (кроме контрола "0" и соответствующих зон).
Пример: отображает подсказку при наведении на кнопке F3 Просмотр.
С этой функцией есть проблема: поскольку не происходит перехвата фокуса от ТС, не получается закрыть имеющуюся подсказку контрола. Так что пока функция бесполезна для контролов с собственной подсказкой. Пробовал находить и прятать окна со стандартным классом тултипа, но подсказка тотала не прячется. Предполагаю, что тотал оперирует чем-то самописным.
Теперь по вопросам.
Код: Выделить всё
ShowHint("text" [, x, y])Код: Выделить всё
ControlSetHint [/B:nn] <id> <text>Пример: отображает подсказку при наведении на кнопке F3 Просмотр.
Код: Выделить всё
ControlSetHint /B:1 17 "My hint"
Теперь по вопросам.
В принципе, если вводить не сразу, а обработать, то наверняка можно добиться красивого вывода и без моноширинных шрифтов. Посмотрим, очень уж много времени уходит на все эти визуальные изыски. Делать отдельные настройки цветов/шрифтов под каждую подсказку - это куча ключей, да и внутренне обработка изрядно усложняется.Orion9 писал(а):Просто меня приколол консольный вывод в тултип, а если при этом не использовать консольный шрифт, то все рушится (визуально) и не имеет большого смысла.
Для тултипа, который вызывается вручную, ничего не делать, он выходит на передний план, соответственно тоталовская подсказка гасится. Кстати, похоже это единственный способ спрятать родную подсказку. Для подсказок по наведению пока не решено.Orion9 писал(а):А что делать с тем, что Тотал перекрывает своим тултипом чужой тултип
Проверил указанный код на сегодняшней версии, вроде всё работает.Orion9 писал(а):Но вот с файлом tweaks_20230825.zip (версия плагина 1.2.1.3) возникла проблема.
Надо будет проверить, вроде должно быть допустимое сочетание. С именами функций, кстати, та же проблема.Orion9 писал(а):возникает ошибка Символ "_" не разрешён в этом месте.
Да, просто копипаст, нужно SetHotkeyAction заменить на SetMessageAction. В исходнике исправил.Orion9 писал(а):В справке к команде SetMessageAction присутствует целый абзац, который, очевидно, принадлежит другой команде
Loopback
Тултип, походу, красавцем выйдет
Но пока попытка вывести:
приводит к ошибке Отсутствует закрывающая кавычка для строки:
При этом MsgBox отрабатывает нормально. Но сам тултип я видел - классно, что он тушит тоталовский
Об остальном теперь уже завтра допишу.
Тултип, походу, красавцем выйдет
Код: Выделить всё
ProcessExecGetOutput /OEM icacl "%COMMANDER_PATH%\Plugins\uwdx\uwdx.bat" """%f%"""
ShowHint(icacl)
msgbox(icacl)
При этом MsgBox отрабатывает нормально. Но сам тултип я видел - классно, что он тушит тоталовский
В новейшей 1.2.1.4 у меня опять не работает. Судя по всему, не срабатывает ShowPopupMenu, поскольку в тело функции TitleBarMenu, вызываемой по клику, он таки входит, а дальше просто ничего не происходит. Но если послать em_ команду, то все работает:Проверил указанный код на сегодняшней версии, вроде всё работает.
Код: Выделить всё
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Код: Выделить всё
[em_title_menu]
button=
cmd=OPENBARMENU %COMMANDER_PATH%\Ini\Title\Menu.bar
iconic=1
По поводу стиля и шрифтов, не заморачивайтесь. Я просто спросил, потому как не был уверен, насколько это сложно было бы реализовать. А вдруг каким-то чудом не так сложно!
На тулбар есть ограничение на количество символов? Я тут сделал более-менее рабочий вариант, в MsgBox все окей, а вот в тулбаре явный срез. Ошибка с кавычками (выше) продолжает переодически появлятся, но не всегда. Пока не понял закономерности.
Код: Выделить всё
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
EndFuncOrion9 писал(а):приводит к ошибке Отсутствует закрывающая кавычка для строки:
Очень похоже на банальную нехватку размера буфера. Он сейчас фиксированный на 512 символов (копипаста с другой функции, где этого было достаточно). Может вывод в проблемных случаях превышать этот размер? В любом случае здесь логично переделать на динамический.Orion9 писал(а):На тулбар есть ограничение на количество символов? Я тут сделал более-менее рабочий вариант, в MsgBox все окей, а вот в тулбаре явный срез.
[s]Именно так. Как раз с меню в этих версиях и были большие изменения. Проверил на своей панели, действительно не открывается. Нужно копать, сходу непонятно.[/s]Orion9 писал(а):Судя по всему, не срабатывает ShowPopupMenu
UP: а нет, увы, это с другим связано. Вот же совпало. Тестировал на рабочей версии Autorun, а на версии 2.2.11 проблему повторить не могу.
На самом деле тут сложнее всего придумать, как и где передать эти настройки. По умолчанию шрифт, думаю, нужно брать из настройки "Шрифт диалоговых окон" (откуда берется шрифт подсказок тотала). Но вот всего лишь указать какой-то кастомный шрифт - нужно передавать много параметров (название и размер как минимум).Orion9 писал(а):По поводу стиля и шрифтов, не заморачивайтесь. Я просто спросил, потому как не был уверен, насколько это сложно было бы реализовать.
Вариант с отдельным ini совсем не нравится. Вариант указывать директивой или ввести какую-нибудь функцию Opt, как в Autoit, чуть получше, но тоже не идеально.
Еще один простенький, но довольно эффектный пример использования.
Новый тултип во всей красе с вызовом по Alt+Click и анализом файла под курсором утилитой TrID:
Заметил, правда, что через какое-то время использования тултип при вызове виснет и вешает весь ТС. Пока не понятно с чем это связано, но, надеюсь, дальнейшие тесты покажут.
С меню не совсем понятно. У меня версия 2.2.10, попробую еще поиграться с опциями, может, как-то удастся его завести и идентифицировать проблему.
По поводу стилей, это все, конечно, не обязательно, имхо. Но если вы придумаете какой-то способ, то будет красиво
Кстати, почему-то в темном режиме текст у тултипа выглядит немного блекло на фоне стандартного тоталовского. Это только у меня, или вы тоже наблюдаете?
Новый тултип во всей красе с вызовом по Alt+Click и анализом файла под курсором утилитой TrID:
Код: Выделить всё
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, попробую еще поиграться с опциями, может, как-то удастся его завести и идентифицировать проблему.
По поводу стилей, это все, конечно, не обязательно, имхо. Но если вы придумаете какой-то способ, то будет красиво
Loopback
А как задать тултипу координаты, чтобы он не у курсора мыши всплывал, а файлового курсора активной панели?
Довесил к функции, что была выше, вызов по F1: вроде удобно так - стрелка вниз->F1->ESC, стрелка вниз->F1->ESC и т.д. Только тултип появляется у стрелки мыши, а не у активного файла.
[cut]
[/cut]
А как задать тултипу координаты, чтобы он не у курсора мыши всплывал, а файлового курсора активной панели?
Довесил к функции, что была выше, вызов по F1: вроде удобно так - стрелка вниз->F1->ESC, стрелка вниз->F1->ESC и т.д. Только тултип появляется у стрелки мыши, а не у активного файла.
[cut]
Код: Выделить всё
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Версия от 14.04.2024
Количественно изменений немного, но решил выложить, поскольку есть очень важные:
- исправлен серьезный, очень давний баг, приводивший к порче памяти
- исправлена утечка памяти, потенциально могла приводить к падениям
- исправлен размер буфера (длинный текст не должен обрезаться)
- вместо системного шрифта подсказки берется шрифт из настроек ТС
Возможно, что исправятся и меню, и возможные зависания.
По поводу установки визуальных настроек тултипа. Наверно сделаю отдельную функцию, позволяющую отдельно установить шрифт и цвета. Установленные параметры будут действовать на все последующие вызовы. Разумеется, менять можно будет неоднократно.

Наверно, можно сделать какую-нибудь функцию в Runtime. Есть, конечно, враппер для SendMessage, но результатом должна быть структура RECT, которую он не поддерживает.
Количественно изменений немного, но решил выложить, поскольку есть очень важные:
- исправлен серьезный, очень давний баг, приводивший к порче памяти
- исправлена утечка памяти, потенциально могла приводить к падениям
- исправлен размер буфера (длинный текст не должен обрезаться)
- вместо системного шрифта подсказки берется шрифт из настроек ТС
Возможно, что исправятся и меню, и возможные зависания.
По поводу установки визуальных настроек тултипа. Наверно сделаю отдельную функцию, позволяющую отдельно установить шрифт и цвета. Установленные параметры будут действовать на все последующие вызовы. Разумеется, менять можно будет неоднократно.
Вполне вариант, хотя скоро такими темпами не останется комбинаций с кликамиOrion9 писал(а):Новый тултип во всей красе с вызовом по Alt+Click и анализом файла под курсором утилитой TrID
Не заметил, но в той версии использовался системный шрифт, который мог отличаться от установленного в тотале. Сейчас настройки берутся из конфигурации тотала, но даже в этом случае в теории могут быть некоторые отличия из-за разных параметров CreateFont (я же не знаю, с какими он создается в тотале).Orion9 писал(а):Кстати, почему-то в темном режиме текст у тултипа выглядит немного блекло на фоне стандартного тоталовского.
Зная индекс элемента, нужно отправить списку сообщение LB_GETITEMRECT и далее рассчитать нужные координаты. Но это точно не задача функции тултипа делать привязку к файлам.Orion9 писал(а):А как задать тултипу координаты, чтобы он не у курсора мыши всплывал, а файлового курсора активной панели?
Наверно, можно сделать какую-нибудь функцию в Runtime. Есть, конечно, враппер для SendMessage, но результатом должна быть структура RECT, которую он не поддерживает.
СпасибоВерсия от 14.04.2024
Первые тесты показывают, что стабильность выросла на порядок. Уже больши сотни раз вызывал различные хинты - и ни разу не зависло (раньше могло и нескольких раз хватить, чтобы повесить весь Тотал).Возможно, что исправятся и меню, и возможные зависания.
Текст не режется и это классно. Один недостаток, который я заметил: тултип скрывается за панелью задач, когда вызывается для файлов внизу списка. У штатного тоталовсого такой проблемы нет.
Посмотрим. как оно будет. Но, возможно, вы были правы - консольный шрифт излишество, нужно просто подогнать, подровнять вывод. Но дополнительные параметры стиля и оформления лишними от этого вряд ли станут.По поводу установки визуальных настроек тултипа. Наверно сделаю отдельную функцию, позволяющую отдельно установить шрифт и цвета. Установленные параметры будут действовать на все последующие вызовы. Разумеется, менять можно будет неоднократно.
Ну, это не страшно. Будем и дальше ломать функциональные клавиши. F1 уже сломал, F2 на подходеВполне вариант, хотя скоро такими темпами не останется комбинаций с кликами
Ну, а если серьезно, то пока идут, скорее, лишь поиски и эксперименты. Реальных альтернативных тултипов будет, наверное, 1-2, не более, а то и правда можно будет в них запутаться)
С темным режимом еще надо будет потестировать попозже, а вот функция ShowPopupMenu так и не заработала. Жаль. Она мне очень нужна. Хотелось бы видеть ее скорейшее выздоровление
Кстати, забыл в тот раз написать. Строчка кода f = StrPart(ItemAtCursor('text'), auTAB, 1) валит 32-битный Тотал, если кликнуть в пустом пространстве списка. В 64 такой проблемы нет. Проверил: виновница StrPart. Я, конечно, сделаю все необходимые проверки, чтобы она не отрабытывала на пустом значении, но не могли бы вы посмотреть, что там не так?
Спасибо за наводку. Гляну, что там к чему. Но учитывая новые вводные (возможность задавать координаты тултипу), наверное, все-таки будет нужна вспомогательна функция к Autorun, чтобы облегчить всем нам жизнь)Зная индекс элемента, нужно отправить списку сообщение LB_GETITEMRECT и далее рассчитать нужные координаты
Есть такое, посмотрю что можно сделать. Кстати, в любом случае нужно проверять границу экрана и смещать его. Иначе даже если он не спрячется за панелью, может уйти за пределы экрана.Orion9 писал(а): тултип скрывается за панелью задач, когда вызывается для файлов внизу списка
Даже не знаю, что тут ещё предположить, подставлял разные панели, меню, всё работает. Пока не получается повторить, куда копать непонятно.Orion9 писал(а):а вот функция ShowPopupMenu так и не заработала
Если попробовать убрать всё кроме вызова ShowPopupMenu, будет работать? В BarPath точно существующий путь? Если попробовать другой *.bar или меню, тоже не работает?
Да, было падение на пустых строках, исправлено в рабочей версии.Orion9 писал(а): Строчка кода f = StrPart(ItemAtCursor('text'), auTAB, 1) валит 32-битный Тотал
Loopback
Кажется, нашел в чем дело. Функции ShowPopupMenu не нравятся пробелы в пути. Пока частично решил проблему строчкой:
Но только частично. Поскольку функции, по всей видимости, не нравятся не только пробелы в пути, но и в самих пунктах меню: те пункты, которые в своем названии имеют пробелы, функция не показывает.
Кажется, нашел в чем дело. Функции ShowPopupMenu не нравятся пробелы в пути. Пока частично решил проблему строчкой:
Код: Выделить всё
If FileExist(BarPath) Then
bar = '"' & BarPath & '"'
ShowPopupMenu /D %bar%
Else
MsgBox("Не найден " & BarPath)
EndifВерсия от 18.04.2024
- исправлена работа с пробелами в путях
- тултип теперь не прячется под панелью задач
- исправлены (вроде) спонтанные падения при использовании ControlSetHint
В общем, если и в этой версии есть проблемы, то наверно нужен будет образец панели.
- исправлена работа с пробелами в путях
- тултип теперь не прячется под панелью задач
- исправлены (вроде) спонтанные падения при использовании ControlSetHint
Спасибо, действительно так. Исправил.Orion9 писал(а):Функции ShowPopupMenu не нравятся пробелы в пути.
А вот с пробелами в названии пунктов не могу подтвердить. Если это и так, то с первой проблемой никак не связано.Orion9 писал(а):Поскольку функции, по всей видимости, не нравятся не только пробелы в пути, но и в самих пунктах меню: те пункты, которые в своем названии имеют пробелы, функция не показывает.
В общем, если и в этой версии есть проблемы, то наверно нужен будет образец панели.