Orion9

|
Posted: Thu Jun 18, 2026 13:37 Post subject: |
|
|
| sa wrote: | | значение -2 в поле команды кнопки |
Думал, что без поллитра обойтись не получится (давно я этот алгоритм делал), но оказалось все проще. Нужно заменить два фрагмента в коде:
 Hidden text | Code: | # подсчет кнопок и разделителей
For j = 1 To nCount
key = "button" & j
val = oButton.Get(key, 0)
If val > 0 Then
# количество кнопок
gHBarButtons += 1
gHBarMap.Add(1)
Else
# количество разделителей
gHBarDivs += 1
If oCmd.Get("cmd" & j, 0) = 2 Then
gHBarMap.Add(-2)
Else
gHBarMap.Add(0)
EndIf
EndIf
Next |
 Hidden text | Code: | # индекс кнопки в ряду
If gHBarDivs = 0 Then
idx = (Floor((mx - x)/b) + 1) + (row-1)*(Floor(w/b))
If idx > gHBarButtons Then idx = gHBarButtons
Else
j = 1
idx = 0
For i = 0 To gHBarMap.Count - 1
If gHBarMap[i] = -2 Then
cx += ex
j += 1
Continue
EndIf
cx += (gHBarMap[i] = 0 ? div : b)
ex = j*w - cx
If i + 1 <= gHBarMap.Count - 1 Then
If ex < (gHBarMap[i+1] = 0 ? div : b) Then
cx += ex
j += 1
EndIf
Else
cx += ex
EndIf
If cx >= tx Then
idx = i + 1
Break
EndIf
Next
EndIf |
Есть два недостатка. Значение ключей "cmd" при сохранении в объект oCmd не сохраняются, а сохраняется только их размер (не знаю, зачем я так делал, наверное, хотел каким-то образом ускориться), в результате разрыв строки проверяется не по значению "-2", а по размеру 2. Но поскольку вероятность команды с двумя символами очень мала, пока оставил так, но нужно будет переделать.
Второй недостаток — индекс после разрыва показывает на начало следующего ряда, но это мелочь, хотя тоже в идеале нужно переделать.
В остальном вроде работает. Но как уже писалось, пока все это только на свой страх и риск
Забыл упомянуть, что в модуле действует клавиша CapsLock. Она закрепляет Shift, чтобы не держать его каждый раз при вызове подсказки.
Если руки доберуться, добавлю больше комментариев в модуль со временем, особенно если косяков больше не обнаружится и если Гислер вдруг сам не сделает Drag&Drop на панели  |
|