Страница 140 из 243
Добавлено: Ср май 22, 2024 12:19
Orion9
Понравился один момент, так пусть не затеряется.)
Первый хинт - основной, который нужен по-умолчанию.
Второй хинт - редкий, специфический, но тоже релевантный для определенной задачи. Показывается, если после появления первого зажать Shift:
Код: Выделить всё
SetHotkeyAction /H:F1 F1HintText
Func F1HintText()
ShowHint(FirstHint())
sleep(500)
If IsPressed (0x10) Then ShowHint(SecondtHint())
EndFunc
Добавлено: Чт май 23, 2024 11:51
Orion9
Loopback
Наткнулся на проблемы с функцией StrLeft: почему-то больше 127 символов она не принимает, т.е.
MsgBox(StrLeft(hint, 127)) - работает.
MsgBox(StrLeft(hint, 128)) - не работает.
Разумеется, числа могут быть как и больше, так и меньше (у меня строка вообще-то больше 1000 символов). При этом со StrMid такой проблемы нет:
MsgBox(StrMid(hint, 1, 1000)) - ОК.
Добавлено: Чт май 23, 2024 13:17
Loopback
Orion9 писал(а):Наткнулся на проблемы с функцией StrLeft
Да, подтверждаю. Довольно интересный и неожиданный баг с приведением типов. Надо будет проверить остальные функции.
Собственно, вот поэтому и хотелось бы выпустить следующую бету, чтобы такие мелкие, но неприятные косяки править оперативно.
Добавлено: Чт май 23, 2024 18:06
Orion9
Loopback
Беты бывают опасны, это да. Особенно когда в них меняют внутренний механизм уже более-менее рабочих функций. Недавний пример с ShowPopupMenu это показывает. Но выпускать их все же стоит, иначе вам одному будет гораздо сложнее все протестировать. Это я к тому, что нет необходимости 1,5-2 года доводить до ума очередную версию готового релиза, все-равно до конца безупречной она не будет. Если в проекте теплится жизнь, можно раз в несколько месяцев или раз в полгода радовать нас бетой
А тем временем, довёл до ума функцию показа только тех переменных окружения, которые создаются во время работы/старта ТС плагином Autorun.
[cut]
Код: Выделить всё
ControlSetMouseAction /L /K:C /B:1 17 ShowSetEnviroments
Global Envrs
ProcessExecGetOutput /OEM Envrs %COMSPEC% "/c SET"
If Not StrPos(Envrs, "COMMANDER_HANDLE") > 0 Then
SetEnv SET_SNAPSHOT %Envrs%
Endif
SetEnv COMMANDER_PID %AUTORUN_TCPID%
SetEnv COMMANDER_HANDLE %AUTORUN_TCHANDLE%
Func ShowSetEnviroments()
EnvrsHint(SET_SNAPSHOT, 60)
Sleep(500)
If IsPressed (0x10) Then EnvrsHint(Envrs, 60)
If IsPressed (0x11) Then EnvrsHint(SET_SNAPSHOT, 90)
EndFunc
Func EnvrsHint(SetVar, Length)
Local out, hint, line, i
ProcessExecGetOutput /OEM out %COMSPEC% "/c SET"
i=1
while i < 200
line=StrPart(out, auCRLF, i)
If ERROR = 1 Then Break
If StrPos(line, "SET_SNAPSHOT") > 0 Or StrPos(SetVar, line) > 0 Then
i = i + 1
Continue
Endif
If StrLen(line) > Length Then
line = StrLeft(line, Length)
Endif
hint = hint & line & auLF
i = i + 1
Wend
i = StrLen(hint) - 1
ShowHint(StrMid(hint, 1, i))
EndFunc
[/cut]
Теперь еще и с зажимом Shift, Ctrl есть опции.
Добавлено: Пт май 24, 2024 14:29
Loopback
Orion9 писал(а):Особенно когда в них меняют внутренний механизм уже более-менее рабочих функций.
Это да, не люблю трогать такие вещи. Хотя что-то базовое еще придется трогать. Но это не до ближайшей беты, иначе тестирование затянется навечно.
Orion9 писал(а):Это я к тому, что нет необходимости 1,5-2 года доводить до ума очередную версию готового релиза, все-равно до конца безупречной она не будет.
Тут немного другой случай, дело совсем не в перфекционизме. Но после выхода ближайшей беты надеюсь прийти к более равномерному выпуску версий.
Orion9 писал(а):А тем временем, довёл до ума функцию показа только тех переменных окружения, которые создаются во время работы/старта ТС плагином Autorun.
Попробовал, интересное решение. Возможно, возьму на вооружение, но только с тем же модификатором, который изначально вызывает хинт (в данном случае Ctrl). Перескакивать на другой модификатор лично мне что-то не очень удобно.
Кстати, стоит упомянуть, что метод работает, только если этот код размещен до других установок переменных окружения через Autorun. Иначе показывает только COMMANDER_HANDLE

Добавлено: Сб май 25, 2024 18:45
Orion9
Loopback
Я в тот момент очень торопился, на потом откладывать не хотел - в итоге пост получился недописанным.
Да, нужно размещать код сразу за LoadLibrary в шапке основного конфига и перед объявлениями других переменных окружения.
Поскольку ТС при перезагрузке командой cm_Exit 9 тянет за собой все переменные окружения, пришлось создать дополнительную проверку на переменную COMMANDER_HANDLE, которая не существует при первой загрузке, хотя при последующих перезагрузках ее содержимое меняется.
Но мне понравилось больше то, что фактически там сейчас три разных хинта. Если вызвать первый хинт с Ctrl, он покажется. Но если при этом не отпускать Ctrl, то покажется второй, более широкий хинт. Если же сразу после показа первого нажать Shift, то всплывет третий, маленький, который отобразит только изменения в переменных, характерные для этой конкретной сессии/перезагрузки.
Прикольная фича, я считаю. Уже взял ее на вооружение в заголовке, поскольку там теперь два хинта - один с технической информацией о файлах. Надеюсь, завтра всё доделать, да и пора закрывать тему с заголовком.
P.s. А с хинтом можно поступить еще интереснее. Повесить его на F1, к примеру. Тогда после нажатия на F1, если сразу зажать шифт после этого, то на экране всплывет второй хинт вслед за первым. Я, кстати, так и сделал c хинтом заголовка)
Добавлено: Вт май 28, 2024 16:48
sa
Наверное, я слишком многого хочу

. Нельзя ли сделать так, чтобы после появления подсказки для заданного элемента окна, она не исчезала при перемещении мышки, пока её указатель находится внутри данного элемента (например, в пределах функциональной кнопки или заголовка)? По аналогии с подсказкой для кнопок панели инструментов.
Добавлено: Вт май 28, 2024 20:59
Orion9
sa
А если использовать ShowHint?
Код: Выделить всё
ControlSetHint /F /D:100 /H:2 0 "TitleHintText"
Func TitleHintText()
ShowHint(GetInfoData())
EndFunc
Приемлемо, но все же не то... Или пойдет?
Добавлено: Вт май 28, 2024 22:37
sa
Orion9 писал(а):но все же не то...
Да, не то! Для закрытия потребуется клик или нажатие ESC, а не просто перемещение указателя на другой объект (другую кнопку в случае панели инструментов TC).
Удобнее просто замереть (если рука крепка).
Добавлено: Вт май 28, 2024 23:42
Orion9
sa писал(а):Удобнее просто замереть (если рука крепка).
Смешно))
Добавлено: Ср май 29, 2024 22:26
Loopback
sa писал(а):Наверное, я слишком многого хочу
Хотел утром ответить что да, потом посмотрел - а почему бы и нет
Версия Tweaks от [url=https:///total.darkhost.ru/files/temp/tweaks_20240529.zip]29.05.2024[/url]
Вроде выглядит и неплохо, но не уверен, стоит ли делать так по умолчанию, поэтому включается временным ключом /R в ControlSetHint. На маленьких кнопках ок, но вот на больших функциональных как по мне спорно. Кроме того с опцией /O работать не будет. В общем, надо еще погонять, в случае чего ключ можно инвертировать.
Добавлено: Ср май 29, 2024 23:02
Orion9
Loopback
Вроде выглядит и неплохо, но не уверен, стоит ли делать так по умолчанию
На мой взгляд, не стоит. Для каких-то задач , наверное, пригодится, но этот ключ нарушает привычную логику. Попробовал сейчас в деле, т.ч. исхожу не только из теории.
А что имеется в виду "с опцией /O работать не будет"?
Добавлено: Чт май 30, 2024 08:41
sa
Loopback писал(а):а почему бы и нет
Я подозревал, что с Autorun всё возможно

.
Спасибо! Работает немного иначе, чем в варианте с тоталовскими подсказками для кнопок панели инструментов, но это даже и лучше: можно не только по области функциональной кнопки или заголовка перемещать указатель, но и по полю самой подсказки.
Добавлено: Чт май 30, 2024 22:40
Loopback
Orion9 писал(а):но этот ключ нарушает привычную логику
Да не, если и нарушает, то только когда используются разные подходы одновременно. Если на всех контролах будет одинаково, то нормально. Но я что-то не уверен, что мне больше нравится новый вариант. Вообще, может и не нужна эта опция для каждого контрола отдельно, сделать одну общую на всё...
Orion9 писал(а):А что имеется в виду "с опцией /O работать не будет"?
При включенной опции /O этот метод работать не будет, т.к. фокус уходит к подсказке.
sa писал(а):Я подозревал, что с Autorun всё возможно
Если бы, но впечатление, конечно же, обманчивое

Не в каждом случае можно легко достигнуть результата.
sa писал(а):Работает немного иначе, чем в варианте с тоталовскими подсказками
Очевидно, что со стороны меньше возможностей контроля. Многие вещи, которые легко делаются изнутри программы, намного сложнее и "костыльнее", если навешивать их извне. Особенно в случае с Delphi. Но не думаю, что это критично.
Добавлено: Чт май 30, 2024 23:15
yozhik
Loopback
У меня на кнопку назначен хинт и меню по ПКМ. Подвожу курсор к кнопке, жму ПКМ, появляется меню, затем всплывает хинт поверх меню. И в таком сочетании куда курсором уже ни двигай, хинт не закрывается, пока не щёлкнешь по пункту меню или где ещё в окне ТК, или Esc-ом меню не закроешь:
Возможно ли это как-то отследить, чтобы при открытом меню хинт не всплывал?
Loopback писал(а):При включенной опции /O этот метод работать не будет, т.к. фокус уходит к подсказке.
Где-то что-то я опять прозевал... а где эта опция /O ?