View previous topic :: View next topic |
Author |
Message |
Monarch-LFV
Joined: 22 Jul 2019 Posts: 240
|
(Separately) Posted: Tue Apr 23, 2024 11:42 Post subject: |
|
|
Loopback
Да, заработало, спасибо!
Единственное, в первой записи запятая лишняя:
Code: | SetEnv portable %"%PP%" |
|
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 222
|
(Separately) Posted: Tue Apr 23, 2024 14:29 Post subject: |
|
|
Quote: | Нет, узнать надежно какая кнопка нельзя. Ну я во всяком случае не представляю, как это можно сделать. Максимум что можно, наверно, это например найти 5 кнопку слева. Но толку от этого никакого нет. Да и смысл, у кнопок панелей свои настраиваемые подсказки. |
Эти подсказки не умеют раскрывать переменные окружения, но меня интересует даже не это. Хотелось бы задать координаты хинту так, чтобы он всплывал под нужной кнопкой при вызове. Видел краем глаза, что есть какие-то функции поиска пикселей на экране или в окне, нельзя из этого что-то выжать?
Quote: |
Ну хорошо, как вы себе это представляете, без "танцев"? Ну вот хотя бы в виде псевдокода, или пример из другого языка живой. Просто мне кажется мы по-разному понимаем эти вещи. |
Вы все правильно поняли. Мне просто хотелось бы, чтобы плагин имел возможность сообщать о своем статусе в диалоговом окне: версии, даты, пути, что загружено и что выполняется - вот и все. Без дополнительно вмешательства со стороны пользователя. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1307
|
(Separately) Posted: Tue Apr 23, 2024 16:24 Post subject: |
|
|
Orion9 wrote: | Хотелось бы задать координаты хинту так, чтобы он всплывал под нужной кнопкой при вызове. |
Если при вызове, то для этого Autorun вообще не нужен. Скриптовые языки лучше подойдут.
При управлении с клавиатуры думаю не вариант, не к чему привязаться.
При вызове мышью шанс есть, но точно вряд ли получится, только тотал знает границы своих кнопок. В принципе можно просто выводить подсказку под курсором. Можно более-менее определить нижнюю границу каждой строки и сместить к ней, но вот с положением по X проблема.
Расчёт нижней границы строки я делал в одном проекте для меню. Координата X гуляет в пределах ширины кнопки, но меня это устраивает. Вот код (Autoit):
Hidden text
Code: |
; this code align menu by bottom border of toolbar's row
Local $hButtonBar = _TCHRequestInfo(28)
Local $tPoint = DllStructCreate("int X;int Y")
Local $aPos = MouseGetPos()
$tPoint.X = $aPos[0]
$tPoint.Y = $aPos[1]
Local $hWinPoint = DllCall("user32.dll", "hwnd", "WindowFromPoint", "struct", $tPoint)[0]
; if called from buttonbar, try to found lower border of button row
If $hButtonBar = $hWinPoint Then
; Need explicitly cast to Hwnd or function will fail under TC x64.
Local $iBarHeight = ControlGetPos($TC_HWND, "", HWnd($hButtonBar))[3]
Local $iButtonSize = _TCHIniRead($TC_INI, "ButtonBar", "ButtonHeight", 0)
If $iButtonSize > 0 Then
DllCall("user32.dll", "int", "ScreenToClient", "hwnd", $hButtonBar, "struct*", $tPoint)
Local $aRelPos[] = [$tPoint.X, $tPoint.Y]
Local $iRows = Ceiling($iBarHeight / ($iButtonSize + 4))
For $i = 1 To $iRows
If $aRelPos[1] > ($i-1) * ($iButtonSize + 4) And $aRelPos[1] <= $i * ($iButtonSize + 4) Then
$aPos[1] += $i * ($iButtonSize + 4) - $aRelPos[1] - $i*2
; it seems not possible to know exact x position of button
; due variable buttons width (separators)
$aPos[0] = $aPos[0] - Mod($aPos[0], $iButtonSize + 8)
ExitLoop
EndIf
Next
EndIf
EndIf
|
В теории, наверно, можно что-то нагородить, читая связанный .bar и, исходя из его содержимого, вычислять горизонтальное смещение, учитывая разную ширину кнопок и разделителей, а также переход на другую строку. Но по-моему это уже перебор.
Orion9 wrote: | Мне просто хотелось бы, чтобы плагин имел возможность сообщать о своем статусе в диалоговом окне: версии, даты, пути, что загружено и что выполняется - вот и все. |
Ладно, резюмирую. С "версии, даты, пути" всё понятно. C "загружено" 50/50 (плагины? прочие dll? выполняющиеся exe? шрифты?). С потоками вообще непонятно, что именно и в каком виде. В конце-концов, как всю эту информацию сделать читабельной в MsgBox или подсказке (на всякий случай: вариант специального окна даже не рассматривается). Так что отложим до появления конкретики. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 222
|
(Separately) Posted: Tue Apr 23, 2024 18:43 Post subject: |
|
|
Quote: | Если при вызове, то для этого Autorun вообще не нужен. Скриптовые языки лучше подойдут. |
Да, речь шла о теории, как таковой. Поскольку передать полученные координаты в ваш тултип в Autorun или использовать для этого другой тултип (скриптовый) - это дело не сложное.
Quote: | Расчёт нижней границы строки я делал в одном проекте для меню. Координата X гуляет в пределах ширины кнопки, но меня это устраивает. Вот код (Autoit): |
Больше всего мне в ваших скриптах нравятся английские комментарии. Рутинное чтение научных трудов превращается в чтение художественных романов в жанре adventure.))
Но я все-таки расчитывал, что как-то можно найти иконку по пикселям. Для меня API Windows еще темный лес, не говоря уж о графическом API.
Quote: | Так что отложим до появления конкретики. |
Все примерно так. Чем больше релевантной информации, тем лучше. К путям можно еще добавить модули, успешно подключенные по директивам Pragma Include. Еще можно добавить информацию по горячим клавишам, которые висят на SetHotkeyAction и зарегистрированным SetMessageAction функциям, которые ожидают сообщений. Начать можно и с простого MsgBox, а что касается потоков, то тут, наверное, ничего больше не добавишь, кроме того, что они выполняются + время старта каждого по отдельности + опционально общее время его выполнения, ведь отдельный поток может быть запущен необязательно вместе (одновременно) с самим модулем Autorun, а гораздо позже. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1307
|
(Separately) Posted: Tue Apr 23, 2024 23:00 Post subject: |
|
|
Orion9 wrote: | Больше всего мне в ваших скриптах нравятся английские комментарии |
Давняя привычка. Как ни крути, английский сейчас де-факто стандарт для языков программирования и документации. Зато для большинства читающих код не нужно лезть в переводчик. А то встречался код с комментариями то на немецком, то на японском, вот где боль
Orion9 wrote: | Но я все-таки расчитывал, что как-то можно найти иконку по пикселям. |
Да можно наверно. В AHK есть функции ImageSearch, PixelSearch. Но это настолько малонадежный и медленный способ, что я никогда его серьезно не рассматривал. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 222
|
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 222
|
(Separately) Posted: Sat Apr 27, 2024 00:50 Post subject: |
|
|
Loopback
Создаю ControlSetHint /H:2 0 %"%TitleHint%"
Работает, однако:
В ходе выполнения переменная TitleHint меняется, но при наведении на заголовок, всплывает старое (первичное) ее значение.
То же самое делаю с ControlSetMouseAction /R /H:2 0 MsgBox %TitleHint%
А в этой функции все работает так, как ожидается.
Так как заставить ControlSetHint подхватывать изменения? |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1307
|
(Separately) Posted: Sat Apr 27, 2024 12:41 Post subject: |
|
|
Orion9 wrote: | А в этой функции все работает так, как ожидается. |
А просто не надо ожидать от ControlSetHint того, чего в ней не заложено Ладно, это шутка, понятно, что пока на нее нет нормальной документации.
В общем тут даже название параметра - "текст". Против "команда" в ControlSetMouseAction. CSMA выполняет команду каждый раз при активации сочетания, и это логично, т к. сама функция больше ничего не делает. Делать то же самое для ControlSetHint было мало смысла, т.к. у неё есть собственная функция - отобразить подсказку.
Можно, конечно, попробовать сделать по аналогии с ShowPopupMenu, добавить ключ, чтобы текст трактовался как функция, которая должна вернуть текст подсказки. Вот только где и зачем это может понадобиться? Да и по производительности есть определенные опасения. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 222
|
(Separately) Posted: Sat Apr 27, 2024 23:50 Post subject: |
|
|
Quote: | Ладно, это шутка, понятно, что пока на нее нет нормальной документации. |
Да норм прикол, полно вам.)
Разумеется, я опасался, что из этого ничего не выйдет, но когда увидел, что ControlSetHint /H:2 0 %"%TitleHint%" отработала без проблем, надежда все же затеплилась))
Quote: |
Можно, конечно, попробовать сделать по аналогии с ShowPopupMenu, добавить ключ, чтобы текст трактовался как функция, которая должна вернуть текст подсказки. Вот только где и зачем это может понадобиться? |
Это может понадобиться в моих непрекращающихся эксперементах с заголовком Вот, очередная затея с информерами от яндекса) Не уверен, что это правильный способ получения данных, но как говорится "я его слепила из того, что было, а потом, что было, то и..."
Hidden text MIME-Version: 1.0
Content-Type: application/octet-stream; name="Title.7z"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Title.7z"
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
Quote: | Да и по производительности есть определенные опасения. |
Ну, это не проблема. Пусть пользователь сам понимает и принимает все риски подобных экспепементов. В конце концов, для чего еще нужен Тотал, если не для проб и экспериментов, для копировования файлов что ли? Для этого у меня проводник есть
P.S.Там, кстати, в подсказке одна буква отъедается в конце. Забыл в тот раз написать. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1307
|
(Separately) Posted: Tue Apr 30, 2024 21:01 Post subject: |
|
|
Версия Tweaks от 30.04.2024
- изменены 0/1 для указания типа функции в SetHintParam, теперь можно использовать имена функций или аббревиатуры: ControlSetHint (csh) и ShowHint (sh).
- исправлено обрезание последнего символа в подсказках
- добавлена возможность трактовать текст как имя функции, возвращающей текст подсказки (использован переключатель /F для единообразия с ShowPopupMenu)
- переключатель для смены фокуса теперь /O вместо /F |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 222
|
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 222
|
(Separately) Posted: Sat May 11, 2024 01:05 Post subject: |
|
|
Loopback
Тултип - топ. Спасибо за бесценный труд!
А можно к нему еще сделать параметр задержки? Иногда требуется, чтобы он не сразу всплывал в определенном месте, например, при наведении на заголовок. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1307
|
(Separately) Posted: Sat May 11, 2024 10:24 Post subject: |
|
|
Orion9
Не уверен что понимаю. ControlSetHint и так имеет настраиваемую задержку, правда одну на все, технически не получится сделать индивидуальные. А для ShowHint это не имеет смысла, как вызываешь, так и всплывает. |
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 222
|
(Separately) Posted: Sun May 12, 2024 00:51 Post subject: |
|
|
Loopback
При наведении на заголовок, хинт всплывает достаточно быстро, что с одной стороны хорошо, но с другой стороны мешает, когда требуется сделать по заголовку двойной клик или вызвать контекстное меню. Более того, хинт почему-то всплывает при наведении на кнопку сворачивания окна, хотя по идее он этого не должен делать. В итоге, после сворачивания окна, он продолжает висеть поверх других окон (или рабочего стола), причём убрать его никак нельзя, только если снова развернуть окно ТС.
Было бы хорошо, если для таких случаев и не только, можно было задавать задержку отдельному хинту, не затрагивая другие. Разумеется, если во время такой задержки курсор мыши уходит с контрола, то хинт вообще не появляется. Другими словами, если я навожу на заголовок, мне нужно, чтобы подсказка появилась не сразу, а через 1-1.5, а может и две секунды. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1307
|
(Separately) Posted: Sun May 12, 2024 11:17 Post subject: |
|
|
Orion9 wrote: | При наведении на заголовок |
А я разве делал и заявлял возможность подсказок на заголовке окна? Выглядит это как баг. Хорошо бы увидеть код, как создается хинт.
Orion9 wrote: | можно было задавать задержку отдельному хинту, не затрагивая другие. |
Уже писал выше, что отдельную задержку сделать очень проблематично. |
|
Back to top |
|
|
|
|
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
|