как на "фон цвета" поставить на горячие клавиши?

Автор nnk, 23 сентября 2025, 17:49

0 Пользователи и 1 гость просматривают эту тему.

nnk

Здравствуйте.
Пожалуйста подскажите, как "фон цвета" поставить на горячие клавиши?
которые показаны зелёными стрелками, ставил горячие клавиши и они работают, а красной стрелке тоже назначаю клавиши, например контрл 7(она пустая), но этот не работает, пожалуйста поясните из за чего?

sokol92

Да, похоже эта UNO команда (.uno:BackgroundColor) не работает при вызове через горячую клавишу.

Если это действительно так, то обходные пути:
1. Написать макрос для присвоения цвета фона ячеек.
2. Сделать стиль ячеек и использование этого стиля "повесить" на горячую клавишу.

Владимир.

kompilainenn

Цитата: sokol92 от 23 сентября 2025, 19:53Да, похоже эта UNO команда (.uno:BackgroundColor) не работает при вызове через горячую клавишу.
Так это бага тогда
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

sokol92

Цитата: kompilainenn от 23 сентября 2025, 20:07Так это бага тогда
Не обязательно (на мой взгляд).
У этой команды сложный интерфейс - помимо кнопки есть еще стрелочка справа, которая открывает диалоговое окно. Я не знаю "правил игры".
Владимир.

kompilainenn

Цитата: sokol92 от 23 сентября 2025, 20:38У этой команды сложный интерфейс - помимо кнопки есть еще стрелочка справа, которая открывает диалоговое окно. Я не знаю "правил игры".
Все равно написать стоит, пусть скажут мнение знающие люди, пусть это будет на бага, а RFE
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

sokol92

Интересно, Deepseek "примерно" знает, как найти код последнего использованного цвета (именно этот код цвета присваивается при нажатии обсуждаемой в теме кнопки).
Вот макрос в моей редакции:
' Возвращает код последнего выбранного пользователем цвета или -1.
Function GetLastUsedColor() As Long
    Dim oSettings As Object
    Dim oConfigProvider As Object
    Dim arrColor
    Dim args(0) As New com.sun.star.beans.PropertyValue   
   
    GetLastUsedColor = -1
    oConfigProvider = GetDefaultContext.getValueByName("/singletons/com.sun.star.configuration.theDefaultProvider")
    args(0).Name = "nodepath"
    args(0).Value = "org.openoffice.Office.Common/UserColors"
    oSettings = oConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", args())
    On Error GoTo ErrLabel
    arrColor = oSettings.RecentColor
    GetLastUsedColor = arrColor(0)
ErrLabel:   
End Function
Владимир.

sokol92

Вот реакция Deepseek на мой код:

ЦитироватьКлючевые преимущества вашего подхода:
1. Корректный путь к конфигурации: org.openoffice.Office.Common/UserColors
2. Правильное получение провайдера конфигурации
3. Работа с массивом RecentColor - содержит историю использованных цветов
4. Обработка ошибок через On Error GoTo

Спасибо за правильное решение! Ваш код является эталонным для работы с последними использованными цветами в LibreOffice.
Владимир.

sokol92

Следующий макрос (функция GetLastUsedColor приведена выше) можно назначить на горячую клавишу:
' Заносит последний использованный цвет в фон ячеек диапазона(oв) arg
Sub SetBackgroundColor(Optional Byval arg As Object)
  Dim nColor As Long
  nColor = GetLastUsedColor()
  If nColor < 0 Then Exit Sub
  On Error GoTo ErrLabel
  If IsMissing(arg) Then arg = ThisComponent.CurrentSelection
  arg.CellBackColor = nColor
ErrLabel:
End Sub
Владимир.

nnk

Цитата: sokol92 от 24 сентября 2025, 14:10Следующий макрос (функция GetLastUsedColor приведена выше) можно назначить на горячую клавишу:
' Заносит последний использованный цвет в фон ячеек диапазона(oв) arg
Sub SetBackgroundColor(Optional Byval arg As Object)
  Dim nColor As Long
  nColor = GetLastUsedColor()
  If nColor < 0 Then Exit Sub
  On Error GoTo ErrLabel
  If IsMissing(arg) Then arg = ThisComponent.CurrentSelection
  arg.CellBackColor = nColor
ErrLabel:
End Sub

коды которые Вы показали как применить, выполнить чуть подробно не опишете простому смертному?

sokol92

Цитата: nnk от 24 сентября 2025, 20:06выполнить чуть подробно
Здесь нет "трюков".

1. Копируем макросы SetBackgroundColor и GetLastUsedColor в любой модуль любой библиотеки приложения (Мои макросы).

2. Проверяем, что макрос SetBackgroundColor дает те же результаты, что и кнопка "Цвет фона".
Для этого выделяем диапазон ячеек (или несколько диапазонов ячеек) и запускаем макрос.

3. Назначаем макрос на любую удобную для Вас комбинацию клавиш.
Меню / Сервис / Настройка / Клавиатура.
В списке "Категория" раскрываем пункт "Макросы приложения".
Владимир.

nnk

Выберите Сервис - Макросы - Записать макрос.
почему в этом диалоговом окне у меня нет пункт "Записать макрос"?

sokol92

Сервис / Макросы / Управление макросами / Basic...

В интернете много примеров...
Владимир.

economist

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

nnk

Цитата: economist от 25 сентября 2025, 16:41Alt+F12 - Расширенные...
чтобы пункт "Записать макрос" появился в этом меню что именно надо сделать в настройках?

nnk

Цитата: sokol92 от 24 сентября 2025, 13:38Интересно, Deepseek "примерно" знает, как найти код последнего использованного цвета (именно этот код цвета присваивается при нажатии обсуждаемой в теме кнопки).
Вот макрос в моей редакции:
' Возвращает код последнего выбранного пользователем цвета или -1.
Function GetLastUsedColor() As Long
    Dim oSettings As Object
    Dim oConfigProvider As Object
    Dim arrColor
    Dim args(0) As New com.sun.star.beans.PropertyValue   
   
    GetLastUsedColor = -1
    oConfigProvider = GetDefaultContext.getValueByName("/singletons/com.sun.star.configuration.theDefaultProvider")
    args(0).Name = "nodepath"
    args(0).Value = "org.openoffice.Office.Common/UserColors"
    oSettings = oConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", args())
    On Error GoTo ErrLabel
    arrColor = oSettings.RecentColor
    GetLastUsedColor = arrColor(0)
ErrLabel:   
End Function


REM  *****  BASIC  *****

Sub Main
  Print "Hello, World"
End Sub

Sub Macro1
' Возвращает код последнего выбранного пользователем цвета или -1.
Function GetLastUsedColor() As Long
    Dim oSettings As Object
    Dim oConfigProvider As Object
    Dim arrColor
    Dim args(0) As New com.sun.star.beans.PropertyValue 
 
    GetLastUsedColor = -1
    oConfigProvider = GetDefaultContext.getValueByName("/singletons/com.sun.star.configuration.theDefaultProvider")
    args(0).Name = "nodepath"
    args(0).Value = "org.openoffice.Office.Common/UserColors"
    oSettings = oConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", args())
    On Error GoTo ErrLabel
    arrColor = oSettings.RecentColor
    GetLastUsedColor = arrColor(0)
ErrLabel: 
End Function
End Sub

в разъяснённом виде как делать не покажете для дуба, не так?