Добавлено: Пт апр 12, 2024 00:00
Это хорошо. А стиль и оформление можно будет менять?Loopback писал(а):Тултип или что-то похожее скорее всего будет
Это хорошо. А стиль и оформление можно будет менять?Loopback писал(а):Тултип или что-то похожее скорее всего будет
Код: Выделить всё
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
При командной записи, если в параметрах вызываемой команды cmd есть вычисляемая строка, то она будет пересчитываться каждый раз при выполнении команды cmd. Напрямую реализовать такую логику в функциональной записи нельзя, поскольку в ней любые выражения в параметрах вычисляются только один раз в момент вызова SetHotkeyAction и не будут пересчитываться при выполнении привязанного действия. Таким образом, чтобы достигнуть результата, аналогичного использованию вычисляемых строк в командной записи, необходимо использовать в качестве команды дополнительную пользовательскую функцию, в которой выполнять требуемое выражение.
Код: Выделить всё
ShowHint("text" [, x, y])Код: Выделить всё
ControlSetHint [/B:nn] <id> <text>Код: Выделить всё
ControlSetHint /B:1 17 "My hint"
В принципе, если вводить не сразу, а обработать, то наверняка можно добиться красивого вывода и без моноширинных шрифтов. Посмотрим, очень уж много времени уходит на все эти визуальные изыски. Делать отдельные настройки цветов/шрифтов под каждую подсказку - это куча ключей, да и внутренне обработка изрядно усложняется.Orion9 писал(а):Просто меня приколол консольный вывод в тултип, а если при этом не использовать консольный шрифт, то все рушится (визуально) и не имеет большого смысла.
Для тултипа, который вызывается вручную, ничего не делать, он выходит на передний план, соответственно тоталовская подсказка гасится. Кстати, похоже это единственный способ спрятать родную подсказку. Для подсказок по наведению пока не решено.Orion9 писал(а):А что делать с тем, что Тотал перекрывает своим тултипом чужой тултип
Проверил указанный код на сегодняшней версии, вроде всё работает.Orion9 писал(а):Но вот с файлом tweaks_20230825.zip (версия плагина 1.2.1.3) возникла проблема.
Надо будет проверить, вроде должно быть допустимое сочетание. С именами функций, кстати, та же проблема.Orion9 писал(а):возникает ошибка Символ "_" не разрешён в этом месте.
Да, просто копипаст, нужно SetHotkeyAction заменить на SetMessageAction. В исходнике исправил.Orion9 писал(а):В справке к команде SetMessageAction присутствует целый абзац, который, очевидно, принадлежит другой команде
Код: Выделить всё
ProcessExecGetOutput /OEM icacl "%COMMANDER_PATH%\Plugins\uwdx\uwdx.bat" """%f%"""
ShowHint(icacl)
msgbox(icacl)
В новейшей 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
Код: Выделить всё
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
На самом деле тут сложнее всего придумать, как и где передать эти настройки. По умолчанию шрифт, думаю, нужно брать из настройки "Шрифт диалоговых окон" (откуда берется шрифт подсказок тотала). Но вот всего лишь указать какой-то кастомный шрифт - нужно передавать много параметров (название и размер как минимум).Orion9 писал(а):По поводу стиля и шрифтов, не заморачивайтесь. Я просто спросил, потому как не был уверен, насколько это сложно было бы реализовать.
Код: Выделить всё
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
Код: Выделить всё
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Вполне вариант, хотя скоро такими темпами не останется комбинаций с кликамиOrion9 писал(а):Новый тултип во всей красе с вызовом по Alt+Click и анализом файла под курсором утилитой TrID
Не заметил, но в той версии использовался системный шрифт, который мог отличаться от установленного в тотале. Сейчас настройки берутся из конфигурации тотала, но даже в этом случае в теории могут быть некоторые отличия из-за разных параметров CreateFont (я же не знаю, с какими он создается в тотале).Orion9 писал(а):Кстати, почему-то в темном режиме текст у тултипа выглядит немного блекло на фоне стандартного тоталовского.
Зная индекс элемента, нужно отправить списку сообщение LB_GETITEMRECT и далее рассчитать нужные координаты. Но это точно не задача функции тултипа делать привязку к файлам.Orion9 писал(а):А как задать тултипу координаты, чтобы он не у курсора мыши всплывал, а файлового курсора активной панели?
СпасибоВерсия от 14.04.2024
Первые тесты показывают, что стабильность выросла на порядок. Уже больши сотни раз вызывал различные хинты - и ни разу не зависло (раньше могло и нескольких раз хватить, чтобы повесить весь Тотал).Возможно, что исправятся и меню, и возможные зависания.
Посмотрим. как оно будет. Но, возможно, вы были правы - консольный шрифт излишество, нужно просто подогнать, подровнять вывод. Но дополнительные параметры стиля и оформления лишними от этого вряд ли станут.По поводу установки визуальных настроек тултипа. Наверно сделаю отдельную функцию, позволяющую отдельно установить шрифт и цвета. Установленные параметры будут действовать на все последующие вызовы. Разумеется, менять можно будет неоднократно.
Ну, это не страшно. Будем и дальше ломать функциональные клавиши. F1 уже сломал, F2 на подходеВполне вариант, хотя скоро такими темпами не останется комбинаций с кликами
Спасибо за наводку. Гляну, что там к чему. Но учитывая новые вводные (возможность задавать координаты тултипу), наверное, все-таки будет нужна вспомогательна функция к Autorun, чтобы облегчить всем нам жизнь)Зная индекс элемента, нужно отправить списку сообщение LB_GETITEMRECT и далее рассчитать нужные координаты
Есть такое, посмотрю что можно сделать. Кстати, в любом случае нужно проверять границу экрана и смещать его. Иначе даже если он не спрячется за панелью, может уйти за пределы экрана.Orion9 писал(а): тултип скрывается за панелью задач, когда вызывается для файлов внизу списка
Даже не знаю, что тут ещё предположить, подставлял разные панели, меню, всё работает. Пока не получается повторить, куда копать непонятно.Orion9 писал(а):а вот функция ShowPopupMenu так и не заработала
Да, было падение на пустых строках, исправлено в рабочей версии.Orion9 писал(а): Строчка кода f = StrPart(ItemAtCursor('text'), auTAB, 1) валит 32-битный Тотал
Код: Выделить всё
If FileExist(BarPath) Then
bar = '"' & BarPath & '"'
ShowPopupMenu /D %bar%
Else
MsgBox("Не найден " & BarPath)
EndifСпасибо, действительно так. Исправил.Orion9 писал(а):Функции ShowPopupMenu не нравятся пробелы в пути.
А вот с пробелами в названии пунктов не могу подтвердить. Если это и так, то с первой проблемой никак не связано.Orion9 писал(а):Поскольку функции, по всей видимости, не нравятся не только пробелы в пути, но и в самих пунктах меню: те пункты, которые в своем названии имеют пробелы, функция не показывает.