Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Autorun
Goto page Previous  1, 2, 3 ... 132, 133, 134, 135  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Orion9



Joined: 01 Jan 2024
Posts: 189

Post (Separately) Posted: Fri Apr 12, 2024 01:00    Post subject: Reply with quote

Loopback wrote:
Тултип или что-то похожее скорее всего будет

Это хорошо. А стиль и оформление можно будет менять?
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Fri Apr 12, 2024 10:44    Post subject: Reply with quote

Orion9
Предполагается, что настройки темы будут браться из соответствующих настроек тотала.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 189

Post (Separately) Posted: Fri Apr 12, 2024 20:02    Post subject: Reply with quote

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 - спасибо! Прям кайфонул Smile К сожалению, ваш вариан подсветки, yozhik, мне попробовать не удалось, т.к. ссылки больше не доступны. Но если хотите, можете прикрепить его сюда, в тему, в формате MIME, чтобы он всегда был с форумом.

Ну, и пару моментов напоследок: в справке написано, что Имя внутренней переменной может состоять только из латинских букв, цифр и символа подчёркивания «_». Имя внутренней переменной не может начинаться с цифры. Однако, при попытке создать переменную, имя которой начинается с подчёркивания (например, _Var), возникает ошибка Символ "_" не разрешён в этом месте.

В справке к команде SetMessageAction присутствует целый абзац, который, очевидно, принадлежит другой команде (добавьте к To-Do при следующей копмпиляции).
Quote:

При командной записи, если в параметрах вызываемой команды cmd есть вычисляемая строка, то она будет пересчитываться каждый раз при выполнении команды cmd. Напрямую реализовать такую логику в функциональной записи нельзя, поскольку в ней любые выражения в параметрах вычисляются только один раз в момент вызова SetHotkeyAction и не будут пересчитываться при выполнении привязанного действия. Таким образом, чтобы достигнуть результата, аналогичного использованию вычисляемых строк в командной записи, необходимо использовать в качестве команды дополнительную пользовательскую функцию, в которой выполнять требуемое выражение.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Fri Apr 12, 2024 23:55    Post subject: Reply with quote

В общем тултипы таки родились. Версия предварительная, есть не всё, и что-то еще будет меняться. Справки, понятно, пока тоже нет. Добавлены две новые функции:

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
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 189

Post (Separately) Posted: Sat Apr 13, 2024 01:17    Post subject: Reply with quote

Loopback
Тултип, походу, красавцем выйдет Smile Но пока попытка вывести:
Code:
ProcessExecGetOutput /OEM icacl "%COMMANDER_PATH%\Plugins\uwdx\uwdx.bat" """%f%"""
   ShowHint(icacl)
   msgbox(icacl)

приводит к ошибке Отсутствует закрывающая кавычка для строки:

При этом MsgBox отрабатывает нормально. Но сам тултип я видел - классно, что он тушит тоталовский Smile Об остальном теперь уже завтра допишу.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 189

Post (Separately) Posted: Sat Apr 13, 2024 14:17    Post subject: Reply with quote

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 имеет свойство открывать меню не совсем там, где надо Smile

По поводу стиля и шрифтов, не заморачивайтесь. Я просто спросил, потому как не был уверен, насколько это сложно было бы реализовать. А вдруг каким-то чудом не так сложно! Smile Хотя, судя по тому, как это делают на 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
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Sat Apr 13, 2024 22:26    Post subject: Reply with quote

Orion9 wrote:
приводит к ошибке Отсутствует закрывающая кавычка для строки:

Orion9 wrote:
На тулбар есть ограничение на количество символов? Я тут сделал более-менее рабочий вариант, в MsgBox все окей, а вот в тулбаре явный срез.

Очень похоже на банальную нехватку размера буфера. Он сейчас фиксированный на 512 символов (копипаста с другой функции, где этого было достаточно). Может вывод в проблемных случаях превышать этот размер? В любом случае здесь логично переделать на динамический.

Orion9 wrote:
Судя по всему, не срабатывает ShowPopupMenu

Именно так. Как раз с меню в этих версиях и были большие изменения. Проверил на своей панели, действительно не открывается. Нужно копать, сходу непонятно.
UP: а нет, увы, это с другим связано. Вот же совпало. Тестировал на рабочей версии Autorun, а на версии 2.2.11 проблему повторить не могу.

Orion9 wrote:
По поводу стиля и шрифтов, не заморачивайтесь. Я просто спросил, потому как не был уверен, насколько это сложно было бы реализовать.

На самом деле тут сложнее всего придумать, как и где передать эти настройки. По умолчанию шрифт, думаю, нужно брать из настройки "Шрифт диалоговых окон" (откуда берется шрифт подсказок тотала). Но вот всего лишь указать какой-то кастомный шрифт - нужно передавать много параметров (название и размер как минимум).

Вариант с отдельным ini совсем не нравится. Вариант указывать директивой или ввести какую-нибудь функцию Opt, как в Autoit, чуть получше, но тоже не идеально.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 189

Post (Separately) Posted: Sun Apr 14, 2024 00:12    Post subject: Reply with quote

Еще один простенький, но довольно эффектный пример использования.

Новый тултип во всей красе с вызовом по 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, попробую еще поиграться с опциями, может, как-то удастся его завести и идентифицировать проблему.

По поводу стилей, это все, конечно, не обязательно, имхо. Но если вы придумаете какой-то способ, то будет красиво Smile Кстати, почему-то в темном режиме текст у тултипа выглядит немного блекло на фоне стандартного тоталовского. Это только у меня, или вы тоже наблюдаете?
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 189

Post (Separately) Posted: Sun Apr 14, 2024 19:37    Post subject: Reply with quote

Loopback
А как задать тултипу координаты, чтобы он не у курсора мыши всплывал, а файлового курсора активной панели?

Довесил к функции, что была выше, вызов по F1: вроде удобно так - стрелка вниз->F1->ESC, стрелка вниз->F1->ESC и т.д. Только тултип появляется у стрелки мыши, а не у активного файла.
 Hidden text
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Sun Apr 14, 2024 21:56    Post subject: Reply with quote

Версия от 14.04.2024

Количественно изменений немного, но решил выложить, поскольку есть очень важные:
- исправлен серьезный, очень давний баг, приводивший к порче памяти
- исправлена утечка памяти, потенциально могла приводить к падениям
- исправлен размер буфера (длинный текст не должен обрезаться)
- вместо системного шрифта подсказки берется шрифт из настроек ТС

Возможно, что исправятся и меню, и возможные зависания.

По поводу установки визуальных настроек тултипа. Наверно сделаю отдельную функцию, позволяющую отдельно установить шрифт и цвета. Установленные параметры будут действовать на все последующие вызовы. Разумеется, менять можно будет неоднократно.

Orion9 wrote:
Новый тултип во всей красе с вызовом по Alt+Click и анализом файла под курсором утилитой TrID

Вполне вариант, хотя скоро такими темпами не останется комбинаций с кликами Smile

Orion9 wrote:
Кстати, почему-то в темном режиме текст у тултипа выглядит немного блекло на фоне стандартного тоталовского.

Не заметил, но в той версии использовался системный шрифт, который мог отличаться от установленного в тотале. Сейчас настройки берутся из конфигурации тотала, но даже в этом случае в теории могут быть некоторые отличия из-за разных параметров CreateFont (я же не знаю, с какими он создается в тотале).

Orion9 wrote:
А как задать тултипу координаты, чтобы он не у курсора мыши всплывал, а файлового курсора активной панели?

Зная индекс элемента, нужно отправить списку сообщение LB_GETITEMRECT и далее рассчитать нужные координаты. Но это точно не задача функции тултипа делать привязку к файлам.
Наверно, можно сделать какую-нибудь функцию в Runtime. Есть, конечно, враппер для SendMessage, но результатом должна быть структура RECT, которую он не поддерживает.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 189

Post (Separately) Posted: Tue Apr 16, 2024 20:21    Post subject: Reply with quote

Quote:
Версия от 14.04.2024

Спасибо Very Happy
Quote:
Возможно, что исправятся и меню, и возможные зависания.

Первые тесты показывают, что стабильность выросла на порядок. Уже больши сотни раз вызывал различные хинты - и ни разу не зависло (раньше могло и нескольких раз хватить, чтобы повесить весь Тотал).

Текст не режется и это классно. Один недостаток, который я заметил: тултип скрывается за панелью задач, когда вызывается для файлов внизу списка. У штатного тоталовсого такой проблемы нет.
Quote:
По поводу установки визуальных настроек тултипа. Наверно сделаю отдельную функцию, позволяющую отдельно установить шрифт и цвета. Установленные параметры будут действовать на все последующие вызовы. Разумеется, менять можно будет неоднократно.

Посмотрим. как оно будет. Но, возможно, вы были правы - консольный шрифт излишество, нужно просто подогнать, подровнять вывод. Но дополнительные параметры стиля и оформления лишними от этого вряд ли станут.
Quote:
Вполне вариант, хотя скоро такими темпами не останется комбинаций с кликами Smile

Ну, это не страшно. Будем и дальше ломать функциональные клавиши. F1 уже сломал, F2 на подходе Mr. Green

Ну, а если серьезно, то пока идут, скорее, лишь поиски и эксперименты. Реальных альтернативных тултипов будет, наверное, 1-2, не более, а то и правда можно будет в них запутаться)

С темным режимом еще надо будет потестировать попозже, а вот функция ShowPopupMenu так и не заработала. Жаль. Она мне очень нужна. Хотелось бы видеть ее скорейшее выздоровление Smile

Кстати, забыл в тот раз написать. Строчка кода f = StrPart(ItemAtCursor('text'), auTAB, 1) валит 32-битный Тотал, если кликнуть в пустом пространстве списка. В 64 такой проблемы нет. Проверил: виновница StrPart. Я, конечно, сделаю все необходимые проверки, чтобы она не отрабытывала на пустом значении, но не могли бы вы посмотреть, что там не так?
Quote:
Зная индекс элемента, нужно отправить списку сообщение LB_GETITEMRECT и далее рассчитать нужные координаты

Спасибо за наводку. Гляну, что там к чему. Но учитывая новые вводные (возможность задавать координаты тултипу), наверное, все-таки будет нужна вспомогательна функция к Autorun, чтобы облегчить всем нам жизнь)
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Tue Apr 16, 2024 22:23    Post subject: Reply with quote

Orion9 wrote:
тултип скрывается за панелью задач, когда вызывается для файлов внизу списка

Есть такое, посмотрю что можно сделать. Кстати, в любом случае нужно проверять границу экрана и смещать его. Иначе даже если он не спрячется за панелью, может уйти за пределы экрана.

Orion9 wrote:
а вот функция ShowPopupMenu так и не заработала

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

Если попробовать убрать всё кроме вызова ShowPopupMenu, будет работать? В BarPath точно существующий путь? Если попробовать другой *.bar или меню, тоже не работает?

Orion9 wrote:
Строчка кода f = StrPart(ItemAtCursor('text'), auTAB, 1) валит 32-битный Тотал

Да, было падение на пустых строках, исправлено в рабочей версии.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 189

Post (Separately) Posted: Wed Apr 17, 2024 00:53    Post subject: Reply with quote

Loopback
Обещал поэксперементировать с ShowPopupMenu, но руки так и не дошли. Теперь буду делать второй заход на попытку.)
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 189

Post (Separately) Posted: Thu Apr 18, 2024 11:39    Post subject: Reply with quote

Loopback
Кажется, нашел в чем дело. Функции ShowPopupMenu не нравятся пробелы в пути. Пока частично решил проблему строчкой:
Code:
If FileExist(BarPath) Then
     bar = '"' & BarPath & '"'
     ShowPopupMenu /D %bar%
   Else   
      MsgBox("Не найден " & BarPath)
   Endif

Но только частично. Поскольку функции, по всей видимости, не нравятся не только пробелы в пути, но и в самих пунктах меню: те пункты, которые в своем названии имеют пробелы, функция не показывает.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1291

Post (Separately) Posted: Thu Apr 18, 2024 23:18    Post subject: Reply with quote

Версия от 18.04.2024
- исправлена работа с пробелами в путях
- тултип теперь не прячется под панелью задач
- исправлены (вроде) спонтанные падения при использовании ControlSetHint

Orion9 wrote:
Функции ShowPopupMenu не нравятся пробелы в пути.

Спасибо, действительно так. Исправил.

Orion9 wrote:
Поскольку функции, по всей видимости, не нравятся не только пробелы в пути, но и в самих пунктах меню: те пункты, которые в своем названии имеют пробелы, функция не показывает.

А вот с пробелами в названии пунктов не могу подтвердить. Если это и так, то с первой проблемой никак не связано.

В общем, если и в этой версии есть проблемы, то наверно нужен будет образец панели.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 132, 133, 134, 135  Next
Page 133 of 135

 
Jump to:  
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