Loopback
|
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 или подсказке (на всякий случай: вариант специального окна даже не рассматривается). Так что отложим до появления конкретики. |
|