Orion9

|
Posted: Sun Jun 22, 2025 00:31 Post subject: |
|
|
AkulaBig wrote: | Можно конечно все стандартные иконки показать. |
Да нет. Дело не в стандартных иконках, а в том, что кнопок накопилось много за годы использования, особенно в последнее время. А стандартных иконок на всей панели у меня может процентов 10 от общего количества, не больше.
AkulaBig wrote: | Это мое принципиальное значение - никакого расширенного меню. |
А я бы не спешил. Многие программы в своем интерфейсе используют такую фишку, как "режим эксперта" и "режим простого пользователя", и это, на мой взгляд, правильно. Если бы я делал публичную сборку, я бы точно использовал такой подход. Но поскольку я делаю только для себя, то у меня всего одно расширенное меню как раз на пол экрана )
Loopback wrote: | DllCall и Callback исправил, ориентировочно завтра выложу минорную версию. |
Класс. Спасибо. Ждём.
Loopback wrote: | - узнать, включены ли значки
- узнать их размер
- получить панель, над которой находится курсор (ItemAtCursor)
- получить хэндл панели (RequestInfo)
- получить координаты этой панели (WinGetPos)
- вычислить прямоугольник, где может находиться курсор, с помощью размера значка
- получить координаты курсора (MouseGetPos)
- проверить, находится ли курсор в границах прямоугольника |
Нет, всё-таки не мог я дать такому алгоритму пропасть. Немного сделал по-другому, но основная идея та же.
Code: | If FieldIndex = 1 Then
Local x, y, w, h, mx, my
Local hWnd = RequestInfo(ItemAtCursor("panel"))
WinGetPos("", "", "w", "h", hWnd)
If w > 0 Then
MouseGetPos("x","y")
Static buf = Buffer(8) # POINT
buf.Zero()
buf.SetNum(0, "long", x, "long", y)
DllCall("ScreenToClient", "hwnd", hWnd, "ptr", buf.ptr)
x = buf.GetNum(0)
MediaInfoNum = 1
Switch Round(x/w*100,0)
Case 1 To 10
b_CTRL = 1
b_SHIFT = 1
Case 10 To 90
b_CTRL = 1
Case 90 To 100
MediaInfoNum = 4
EndSwitch
EndIf |
Как видите, строк совсем немного, но какой эффект! Я бы назвал это волшебным хинтом ) Панель делится на три части. Первые 10% слева выводят один хинт, 80% посередине выводят второй, последние 10% справа - третий. Счастью нет предела.
Строка If FieldIndex = 1 Then из тела рабочей функции JointHint, полный код которой привести не могу, так как он сильно завязан на множество других функций. Но для работоспособности любого кода необходимые параметры нужно задать в Switch...EndSwitch. |
|