Orion9

|
Posted: Thu Jul 16, 2026 20:27 Post subject: |
|
|
| sa wrote: | | в чём проблема удаления группы кнопок путём последовательного указания мышью |
Да вроде нет больших проблем. Я просто подумал, что надо как-то визуально или графически делать выбор или через поля ввода, а с этим в Autorun сложности. Через DllCall многое можно порешать: и окна можно создать, и функции gdi вызывать, только зачем так заморачиваться
Благодаря вашей идее с копированием, поставленную задачу можно решить буквально за несколько секунд. Если на панели уже есть разрывы, достаточно просто скопировать один разрыв в начало диапазона, а второй разрыв в конец. После этого удалить кнопки между этими разрывами через меню. Если на панели нет разрывов, то нужно добавить один разрыв через меню и повторить описанные действия. Даже последний пункт меню, который я добавил для удаления всех кнопок после индекса 1, можно было не делать, т.к. задача тоже решается через копирование разрыва (за первый индекс) с последующим удлением всего за разрывом
Но если делать последовательное указание диапазона через запоминание индекса, то сделать можно, и это не должно быть сложно. Например:
 Hidden text | Code: | Global gHBarMark1 = 0, gHBarMark2 = 0
Func HBarMarkToDelete()
Local InfoMsg
If gHBarLoadError Or gHBarList.Count = 0 Then
InfoMsg = "Панель не загружена"
ElseIf FileGetTime(gHBarFile) <> gHBarFileTs Then
InfoMsg = "Файл панели изменился"
Endif
If InfoMsg <> "" Then
ShowDragHint(InfoMsg)
Return
Endif
If Not gHBarMark1 Then
gHBarMark1 = HBarGetIdx()
If gHBarMark1 < 1 Then Return
MsgBox("Индекс: " & gHBarMark1 & auCRLF & auCRLF & _
"Задать начало диапазона?", "Autorun", 3+64+0)
If EXTENDED <> 6 Then gHBarMark1 = 0
Return
Endif
If Not gHBarMark2 Then
gHBarMark2 = HBarGetIdx()
If gHBarMark2 <= gHBarMark1 Then
gHBarMark2 = 0
Return
EndIf
MsgBox("Индекс: " & gHBarMark2 & auCRLF & auCRLF & _
"Задать конец диапазона?", "Autorun", 3+64+0)
If EXTENDED <> 6 Then
gHBarMark2 = 0
Return
EndIf
Endif
MsgBox("Диапазон: " & gHBarMark1 & "-"& gHBarMark2 & auCRLF & auCRLF & _
"Удалить группу кнопок?", "Autorun", 3+64+0)
If EXTENDED <> 6 Then
ShowDragHint("Диапазон сброшен")
Else
# удаление
HBarBreakErase(gHBarMark1, gHBarMark2)
EndIf
gHBarMark1 = 0
gHBarMark2 = 0
EndFunc |
В самый конец функции HBarLoad нужно добавить сброс маркеров диапазона, чтобы при смене панели или состояния панели указанный наполовину диапазон сбрасывался.
| Code: | gHBarMark1 = 0
gHBarMark2 = 0 |
Функцию можно повесить и на среднюю кнопку мыши, но сейчас она у меня вызывается через Alt
| Code: | # правый клик с удержанием Alt
ControlSetMouseAction /R /K:A 28 "HBarMarkToDelete" |
Навскидку всё работает, но могут быть, конечно, неучтенные моменты. Если вам понравится, можно добавить к функционалу  |
|