Страница 137 из 243

Добавлено: Вт май 14, 2024 16:14
sa
yozhik
Это

Код: Выделить всё

Set hintF3 "View File"
ControlSetHint /B:1 17 hintF3
показывает hintF3, а это

Код: Выделить всё

ControlSetHint /B:1 17 "My Hint" & auLF & "line 2"
как у вас - половину.
Так что всё, как у вас!
У меня x32.
Orion9 писал(а):срабатывает даже не через раз, а больше
Мне показалось, что для уверенного срабатывания указатель мыши надо подводить к нижней половине кнопки...

Добавлено: Вт май 14, 2024 18:05
Loopback
yozhik писал(а):Эх, похоже да, не работают в ControlSetHint с ф-ми кнопками ни переменные, ни вывод пользовательских Func, ни спец-символы (auTAB, etc.), ни даже конкатенация (&). А как же теперь?
Можно по аналогии с ShowPopupMenu использовать функцию с ключом /F.

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

Код: Выделить всё

ControlSetHint /B:1 17 %'"My Hint" & auLF & "line 2"'
yozhik писал(а):А вот такое показывает только половину, т.е. всё после "My Hint" уже не показывает:
Да, потому что первый же пробел за ним в командной записи трактуется разделителем параметров.

Добавлено: Вт май 14, 2024 19:05
Orion9
Loopback
Еще раз спасибо за фикс в Runtime.dll, эксперимент удался! Всё работает, как я и ожидал :D

Код: Выделить всё

If Not IsPressed (0x11) Then 
   TitleLaunch
Else
   ShowTitle = 0   
EndIf   
Ништяк просто.) Эти строчка позволяет отключать заголовок при запуске ТС с зажатым CTRL.)

И более того:

Код: Выделить всё

ControlSetHint /F /B:1 17 "FButtonsHintText"
ControlSetHint /F /B:2 17 "FButtonsHintText"

Func FButtonsHintText()
Local tip = "No Info"
   
   If IsPressed (0x11) Then 
      tip = "CTRL"
   else
      tip = "CTRL выключен"
   EndIf
   Return tip
EndFunc
Выводит разный текст тултипа при заходе мыши на контрол при зажатом или отпущенном CTRL! Развить эту тему далее - дело техники.)

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

Можно еще к функции добавить обработку параметра, хотя бы одного?
ControlSetHint /F /B:2 17 "FButtonsHintText" "param"
Loopback писал(а):Не могу подтвердить. Фокус тотала ничто не перехватывает? Подсказки не будут отображаться на несфокусированном окне.
Пробую сейчас на Win11 Pro, может, в этом дело. Но на другой системе сейчас не могу проверить. Но, вероятно, какая-то проблема все же есть, поскольку как верно заметил sa при заходе "снизу" вероятность появления тултипа возрастает :)

Добавлено спустя 6 минут:
Вариант подсветки для AkelPad. Скромная-сырая-недоделанная — но поскольку это состояние перманентно, то что есть, то есть:
Спасибо, забрал.) Сегодня вечером как раз и заценю :)

Добавлено: Вт май 14, 2024 19:14
yozhik
Loopback писал(а):надо обернуть в вычисляемую строку
Ой-ё-ёй, забыл совсем за давностью. Прошу великодушного пардону за напрасный шум :oops: Всё работает просто замечательно.

Добавлено: Вт май 14, 2024 20:05
sa
Orion9 писал(а):при заходе "снизу" вероятность появления тултипа возрастает
Откуда идёт заход не имеет значения: важно, где остановить указатель – в верхней (плохо) или нижней (хорошо) половине кнопки.

Добавлено: Вт май 14, 2024 21:44
Loopback
Orion9 писал(а):Вот что еще хотелось бы по этому поводу отметить: если функция возвращает пустой текст, то хинт по идее не должен всплывать совсем.
Соглашусь, надо добавить проверку.
Orion9 писал(а):Можно еще к функции добавить обработку параметра, хотя бы одного?
Наверно можно, только этим закрывается потенциальная возможность добавить еще параметры в ControlSetHint, останутся только ключи. В принципе никто ведь не мешает сделать под каждый вызов свою функцию.
Orion9 писал(а):Пробую сейчас на Win11 Pro, может, в этом дело.
Вероятно нет, у меня в виртуалке на Win11 23H2 никаких аномалий. На основной системе с Win10 нормально, на другой с высоким разрешением и масштабом 200% тоже, так что даже разным масштабным коэффициентом не объяснить. Вообще, если на этих кнопках работает ControlSetMouseAction, то должно работать и здесь, код определения окна и прямоугольника кнопки идентичный.

Добавлено: Ср май 15, 2024 00:15
Orion9
sa писал(а):Откуда идёт заход не имеет значения: важно, где остановить указатель – в верхней (плохо) или нижней (хорошо) половине кнопки.
Да, уже убедился. Достаточно чуть-чуть сдвинуть указатель в нижней части и хинт всплывает исправно даже с клавишами модификаторами.
Сделал на скорую руку скрипт с неплохим потенциалом дальнейшего развития, может кому пригодится (только переменные AutoHotkeyPath и ConfigPath нужно будет определить, а то я в спешке на рабочем конфиге эксперимент ставил)
[cut="Shortcuts.ahk"]

Код: Выделить всё

#Requires AutoHotkey v2

#SingleInstance Prompt

 tc_ini := EnvGet("COMMANDER_INI")
tc_path := EnvGet("COMMANDER_PATH")

if StrLen(tc_ini) = 0
{
   MsgBox "Переменная %COMMANDER_INI% не определена",, "Iconx"
   Return
}

ini := IniRead(tc_ini, "Shortcuts")

Ready := ""
Loop Parse, ini, "`n", "`r" 
{
   aVals:=StrSplit(A_LoopField, "="," `t")
   aKeys:=StrSplit(aVals[1], "+"," `t")
   OutputVar := aKeys[1]
   OutputVar := StrReplace(OutputVar, "C", "Ctrl+")
   OutputVar := StrReplace(OutputVar, "A", "Alt+")
   OutputVar := StrReplace(OutputVar, "S", "Shift+")
   Ready .= OutputVar . (aKeys.Length > 1 ? aKeys[2] : "") . " = " . aVals[2] . "`n"
}

if A_Args.Length > 0
{
   fb := ""
   Loop Parse, Ready, "`n"
   {
      if InStr(A_LoopField, A_Args[1])
      {
         fb .= A_LoopField . "`n"
      }
   }
   Ready := fb
}
Ready := Sort(Ready)
try FileAppend Ready, "*"   
[/cut]
[cut="Title.aucfg"]

Код: Выделить всё

ControlSetHint /F /B:1 17 "FButtonsHintText"
ControlSetHint /F /B:2 17 "FButtonsHintText"

Func FButtonsHintText()
Local script, hotkey
Local pipe, tip = "No Info"

   if IsPressed (0x10) Then hotkey = "Shift"
   if IsPressed (0x11) Then hotkey = "Ctrl"
   if IsPressed (0x12) Then hotkey = "Alt"          
  
   script = %COMMANDER_PATH% & ConfigPath & "Shortcuts.ahk"
   
   If Not FileExist(AutoHotkeyPath) Then
   
      MsgBox("Не найден " & AutoHotkeyPath, "Title.ini")
      
      tip = "Не найден AutoHotkey " & AutoHotkeyPath
      Return tip
      
   Endif
   
   If Not FileExist(script) Then
   
      MsgBox("Не найден " & script, "Title.ini")
      
      tip = "Не найден скрипт " & script      
      Return inf
      
   Endif
   
   If StrLen(hotkey) = 0 Then
      ProcessExecGetOutput pipe %AutoHotkeyPath% '"%script%"'
   Else
      ProcessExecGetOutput pipe %AutoHotkeyPath% '"%script%" %hotkey%'
   EndIf   
   
   If StrLen(pipe) = 0 Then Return tip
   
   Return pipe
EndFunc

[/cut]
Считывается информация о назначенных клавишах из конфига ТС и показывается в полном сортированном виде при наведении на F3 и F4. Если при этом зажат Ctrl, Alt или Shift, то фильтруются только комбинации с этой клавишей.

Добавлено спустя 3 минуты:

yozhik
ариант подсветки для AkelPad. Скромная-сырая-недоделанная — но поскольку это состояние перманентно, то что есть, то есть:
Да нормальная подсветка.) Только мне показалось, что зря жирным сделаны функции, непривычно как-то.

Добавлено спустя 3 минуты:

Loopback
Наверно можно, только этим закрывается потенциальная возможность добавить еще параметры в ControlSetHint, останутся только ключи. В принципе никто ведь не мешает сделать под каждый вызов свою функцию.
Да, не нужно это, согласен. Можно через обертку. А с хинтом надо смотреть...

Добавлено: Ср май 15, 2024 06:15
yozhik
Orion9 писал(а):зря жирным сделаны функции, непривычно как-то
Помимо вкуса это ещё ж и от шрифта зависит. Если разница в толщине между начертаниями невелика и сбалансирована, то норм. У меня, к примеру, Iosevka Curly.

—————————

Пока подготавливается справка, пускай конспект повисит здесь:

Плагин Tweaks, всплывающие подсказки

ShowHint

Код: Выделить всё

ShowHint("text" [, x, y])
Универсальная функция отображения подсказки. Закрывается кликом на самой подсказке, на свободном месте окна или по ESC. Цвета берутся из настроек TC. Поддерживает темную тему и переключение командой cm_SwitchDarkmode. По умолчанию, без задания x, y, показывается под курсором.

ControlSetHint

Код: Выделить всё

ControlSetHint [/F] [/O] [/R] [/D:<ms>] [/H:<area>] [/B:<1..7>] <id> <text>
Регистрирует подсказку по наведению на элемент окна TC.

При /F параметр <text> — имя функции, возвращающей текст подсказки. По аналогии с ShowPopupMenu.
/O — позволяет избавиться от родной подсказки TC путем временного перевода фокуса на подсказку плагина.
/R — не скрывать подсказку при перемещении мыши в пределах поля подсказки и поля элемента, для которого она создаётся. Несовместим с /O.
/D:<ms> — дополнительная задержка в мс.
/H:<area> — сумма флагов зон окна. Используется только с <id> = 0. Подробнее см. в ControlSetMouseAction.
/B:<1..7> — кнопка нижней панели. Используется только с <id> = 17. Подробнее см. в ControlSetMouseAction.

Примеры:

Код: Выделить всё

ControlSetHint /B:1 17 "My hint"
ControlSetHint /B:1 17 %'"My hint" & auLF & "Line 2"'

ControlSetHint /F /B:1 17 "MyFunc"
Func MyFunc()
  Local s = "My hint" & auLF & "Line 2"
  Return s
EndFunc
— отображает подсказку при наведении на кнопку F3 Просмотр.

SetHintParam

Код: Выделить всё

SetHintParam("CSH" | "SH", <param_id>, <param1> [, <param2> ... <param5>])
Первый параметр SH или CSH — для какой функции будут заданы параметры: ShowHint или ControlSetHint

Далее: <param_id> — его параметр(ы):
  • Reload — перезагружает параметры из конфига TC заново
  • Delay — (только для CSH) задержка появления подсказки, в мс
  • Font — шрифт, порядок параметров: size, face, weight, style, charset
  • BackColor, DarkBackColor — цвет фона: 0xRRGGBB
  • Text, DarkText — цвет текста: 0xRRGGBB
  • Border, DarkBorder — цвет рамки: 0xRRGGBB
Примеры:

Код: Выделить всё

SetHintParam("SH", "Font", 9, "Courier New")
SetHintParam("SH", "BackColor", 0x00FF00)

Добавлено: Ср май 15, 2024 10:12
sa
Orion9 писал(а):Да, уже убедился. Достаточно чуть-чуть сдвинуть указатель в нижней части и хинт всплывает исправно
Кажется, проблемы возникают при отключённой командной строке. При её наличии – кнопка используется не на половину, а целиком. Просьба проверить.

Добавлено: Ср май 15, 2024 11:54
Loopback
sa писал(а):Кажется, проблемы возникают при отключённой командной строке.
Точно, дело именно в этом. Неудивительно, учитывая что контрол с кнопками также включает в себя командную строку, и если ее отключить, как раз и будет такой эффект, т.к. вдвое уменьшенная высота контрола будет ещё раз делиться пополам. Так что при расчете нужно учитывать, показывается ли в данный момент командная строка.

Кстати, CSMA ведь тоже этому подвержена, но за столько лет никто этого не заметил.

Добавлено: Ср май 15, 2024 13:29
Orion9
sa
Loopback
Когда попробовал в Win8.1 сразу подумалось, что дело в какой-то тонкой настройке, но идей на это счёт совершенно не было. Спасибо, что нашли в чём причина.
Кстати, CSMA ведь тоже этому подвержена, но за столько лет никто этого не заметил.
Это нормально. Flasher, конечно, расписал всё как с куста в справке, но много ли пойдет так далеко? Не каждый сборщик станет этим заморачиваться, тут нужен особый вид любви:
[cut]Till death do us part, Auto :mrgreen:[/cut]
А ведь зря. По-сути, можно повесить полезные менюшки повсюду "где хошь", например на той же F3:
ControlSetMouseAction /R /B:1 17 TitleBarMenu
Просто я, к примеру, еще не успел до этого добраться :)

yozhik
Помимо вкуса это ещё ж и от шрифта зависит. Если разница в толщине между начертаниями невелика и сбалансирована, то норм. У меня, к примеру, Iosevka Curly.
Ну да, с этим шрифтом смотрится получше. Но мне бы хотелось совсем убрать жирный текст, как это сделать? А то я в этом деле совсем не разбираюсь, AkelPad юзаю "как-есть" с их сайта, так и не нашел время в нем поковыряться.)
Пока подготавливается справка, пускай конспект повисит здесь:
Спасибо! Это дело нужное...))

P.S. Ох чуть не забыл:
sa
Я проверил в Win8.1 на других путях и дисках, с пробелами и без, но проблем не обнаружил. У вас случайно не старая версия Autorun_Process.dll, в которой была загвоздка с функцией ProcessExecGetOutput (она резала путь). Нужна последняя версия библиотеки, где это исправлено:
https://total.darkhost.ru/files/temp/au ... 240318.zip

Добавлено: Ср май 15, 2024 14:06
sa
Loopback писал(а):Кстати, CSMA ведь тоже этому подвержена, но за столько лет никто этого не заметил.
Эх, какая фича-то, оказывается была: на нижние половинки функциональных кнопок можно было свои команды навесить (а теперь ещё и снабдить подсказками), в то время, как верхние половинки работали бы по умолчанию!

Я натыкался когда-то на нестабильность работы кнопки (F6 Перемещение) при нажатии левой кнопки мыши с модификатором, но не докопался до причины. Просто закомментировал строку в autorun.cfg до лучших времён. Но там ещё вмешался и мой ляп – пытался использовать в качестве модификатора клавишу Win, которая допустима в SetHotkeyAction, но не в ControlSetMouseAction.
Orion9 писал(а):Нужна последняя версия библиотеки
"Слонёнка"-то на 131 странице я и не приметил!
Теперь задваивать файл Title.ahk нет необходимости. Спасибо!

Добавлено: Ср май 15, 2024 15:09
Loopback
Orion9 писал(а):По-сути, можно повесить полезные менюшки повсюду "где хошь", например на той же F3
Собственно, с этого всё и начиналось, для этого в первую очередь и делалось. Это уже потом разрослось до универсального решения.
sa писал(а):Эх, какая фича-то, оказывается была: на нижние половинки функциональных кнопок можно было свои команды навесить
Ну, фича-то сомнительная, попадать в нужную половину кнопки вслепую :) Да и работало только при скрытой командной строке. Но и так достаточно вариантов остаётся - средняя и правая кнопки + модификаторы.

Добавлено: Ср май 15, 2024 15:25
sa
Loopback писал(а):Ну, фича-то сомнительная, попадать в нужную половину кнопки вслепую
Теперь же подсказка есть.
Да я не серьёзно! :)

Добавлено: Ср май 15, 2024 19:43
Orion9
yozhik
Но мне бы хотелось совсем убрать жирный текст, как это сделать? А то я в этом деле совсем не разбираюсь, AkelPad юзаю "как-есть" с их сайта, так и не нашел время в нем поковыряться.)
Таки пришлось поковыряться. Жирный и курсив там отключается легко, а вот сделать, чтобы можно было переключаться между двумя подсветками на одном .aucfg файле, как оказалось, не так уж. Отличия от авторского варианта у вас безусловно есть, и мне синий цвет определения функций даже больше заходит, т.ч. будем пользоваться и хранить обе подсветки.)
Loopback писал(а):Собственно, с этого всё и начиналось, для этого в первую очередь и делалось. Это уже потом разрослось до универсального решения.
Настолько универсального, что пора Гислеру делать отдельную команду для связи с плагином Autorun, чтобы не задействовать сторонние средства, типа TCFS2 в качестве триггера для зарегистрированных функций.)