Orion9

|
Posted: Wed Jun 11, 2025 00:28 Post subject: |
|
|
| AkulaBig wrote: | | Представляете, многие используют подсказки над иконками. Меня это тоже удивляет. |
Это вопрос привычки, как мне кажется. На мой взгляд, удобно вызывать подсказки с удержанием различных клавиш-модификаторов, например CTRL или CTRL+SHIFT. Но можно и CapsLock использовать в некоторых случаях.
| AkulaBig wrote: | | То-есть я хотел чтобы над колонками всплывали стандартные хинты, а над иконкой расширенные. |
Используйте CapsLock для переключения, и вся проблема. Буквально один вызов нужно добавить для проверки состояния:
| Code: | If BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) = 0 Then Return |
Модификаторы не советую, так как они не работают в TCx64.
Раз уж речь зашла о подсказках, была у меня ещё одна в давнишних проспектах:
 Hidden text | Code: | ControlSetHint /F /D:50 28 "ButtonBarHints"
Func ButtonBarHints()
#If Not IsPressed(0x11) Then Return
# проверка CapsLock
If BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) = 0 Then Return
Local x, y, w, h, _
mx, my, idx, _
row, rows, rowh, _
def, txt, b, extra
# запрос дескриптора панели
Local hWnd = RequestInfo(28)
If hWnd = 0 Then
Return "Окно панели не найдено " & hWnd
EndIf
# чтение информации о файле панели в wincmd.ini
IniRead def %COMMANDER_INI% "Buttonbar" "Buttonbar" "%COMMANDER_PATH%\DEFAULT.BAR"
# чтение текста окна панели
txt = WinGetText(hWnd)
# на панель загружен временный .bar файл
If Not StrPos(def, txt) Then
def = COMMANDER_PATH & "\Bars\" & txt
EndIf
# проверка существования файла панели
def = Set (def)
If Not FileExist(def) Then
Return "Файл панели не найдена " & def
EndIf
# координаты и размеры окна панели
WinGetPos("x", "y", "w", "h", hWnd)
# координаты указателя мыши
MouseGetPos("mx", "my")
# чтение информации о высоте кнопок
IniRead b %COMMANDER_INI% "Buttonbar" "Buttonheight"
# вычисление количества рядов кнопок на панели
rows = Floor(h/b)
extra = Mod(h,b)
# высота одного ряда
rowh = b + Floor(extra/rows)
# номер ряда под указателем
row = Ceil((my - y )/rowh)
# индекс кнопки в ряду
idx = (Floor((mx - x)/b) + 1) + (row-1)*(Floor(w/b))
# чтение информации о кнопке из .bar фйла
Local sMenu, sButton, sCmd, sParam, sPath, sIcon
IniRead sMenu %def% "Buttonbar" %'"menu" & idx' ""
IniRead sButton %def% "Buttonbar" %'"button" & idx' ""
IniRead sCmd %def% "Buttonbar" %'"cmd" & idx' ""
IniRead sParam %def% "Buttonbar" %'"param" & idx' ""
IniRead sPath %def% "Buttonbar" %'"path" & idx' ""
IniRead sIcon %def% "Buttonbar" %'"iconic" & idx' ""
# возврат текста
Return "bar x=" & x & " y=" & y & " w=" & w & " h=" & h & auCRLF & _
"mouse x=" & mx & " y=" & my & auCRLF & _
"index= " & idx & auCRLF & _
"rows=" & rows & " extra=" & extra & " hight=" & rowh & " row=" & row & auCRLF & _
"-----------" & auCRLF & _
"menu=" & sMenu & auCRLF & _
"button=" & sButton & auCRLF & _
"cmd=" & sCmd & auCRLF & _
"param=" & sParam & auCRLF & _
"path=" & sPath & auCRLF & _
"iconic=" & sIcon
EndFunc |
Дополнительная подсказка к главной панели инструментов, которая отображается при включенном CapsLock или зажатом CTRL. Эта тема всплывала некоторе время назад, но чуть в другом контексте. Тут главное индекс расчитать правильно, что не так сложно, если на панели нет разделителей. И сейчас алгоритм делает именно это, он не учитывает возможные разделители в .bar файле. Поэтому хорошо будет работать, если на панели не используются разделители.
Разделители нужно учитывать отдельно, и с этим есть проблема. Но пока функция только эксперементальная, делал её только посмотреть, что из может выйти и как будет смотреться такая подсказка. Если одним словом, то понравилась.
| Loopback wrote: | | Скорее всего никакой, не у всех элементов окна есть соответствующие индексы. |
Ну, я так и подумал, только решил уточнить на всякий случай. Будем продолжать эксперементировать и пробовать разные индексы. |
|