Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

17 Июнь 2019, 00:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: [Решено] Раскладка клавиатуры кодом.  (Прочитано 2177 раз)
0 Пользователей и 1 Гость смотрят эту тему.
bsi
Участник
**
Offline Offline

Сообщений: 41


« Стартовое сообщение: 23 Январь 2017, 13:12 »

В Excel переключение раскладки клавиатуры делаем следующим кодом:
Код:
Private Declare Function ActivateKeyboardLayout _
                          Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Const kb_lay_ru As Long = 68748313, kb_lay_en As Long = 67699721
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Target.Column    ' в зависимости от номера столбца активной ячеки
        Case 1 To 3, 6    
            ВключитьРусскуюРаскладку
        Case 4, 5:    
            ВключитьАнглийскуюРаскладку
        Case Else:    ' ничего не делаем (оставляем текущую раскладку)
    End Select
End Sub
 
Sub ВключитьРусскуюРаскладку()
    ' Переключить на русский язык
    x = ActivateKeyboardLayout&(kb_lay_ru, 0)
End Sub
 
Sub ВключитьАнглийскуюРаскладку()
    ' Переключить на английский язык
    x = ActivateKeyboardLayout&(kb_lay_en, 0)
End Sub
Помогите это же сделать в LibreOfiice.
Во вложении файл Excel.

« Последнее редактирование: 25 Февраль 2017, 17:44 от bsi » Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 978


« Ответ #1: 23 Январь 2017, 13:37 »

Если не получится - попробуйте программу PuntoSwitcher https://yandex.ru/soft/punto/:
1) Бесплатная для любых применений
2) Работает во всех приложениях
3) Предоставляет глобальную Автозамену типа ирф -> "Именем Российской Федерации"
4) Сама перключает язык ввода в зависимости от вводимого текста

Предвосхищая возможные вопли недовольных данной программой, замечу что её неправильная конвертация лечится:
а) нажатием клавиши Pause/Break
б) правильным, без опечаток, набором текста  
в) созданием "Правила"-исключения
г) внесением всей "основной" программы в список исключений (полезно, например, для ПО Клиент-банк)
« Последнее редактирование: 23 Январь 2017, 13:44 от economist » Записан

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

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 405


« Ответ #2: 23 Январь 2017, 13:52 »

Код:
Private Declare Function ActivateKeyboardLayout _
                          Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Const kb_lay_ru As Long = 68748313, kb_lay_en As Long = 67699721

Sub ActivateRussianLayout()
    ' Переключить на русский язык
    x = ActivateKeyboardLayout&(kb_lay_ru, 0)
End Sub
 
Sub ActivateEnglishLayout()
    ' Переключить на английский язык
    x = ActivateKeyboardLayout&(kb_lay_en, 0)
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Target.CellAddress.Column    ' в зависимости от номера столбца активной ячеки
        Case 1 To 3, 6   
            ActivateRussianLayout
        Case 4, 5:   
            ActivateEnglishLayout
        Case Else:    ' ничего не делаем (оставляем текущую раскладку)
    End Select
End Sub

1. Не поддерживаются локализованные имена.
2. Target.CellAddress.Column
Записан

С уважением,
Михаил Каганский
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 723


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #3: 23 Январь 2017, 14:31 »

1. Не поддерживаются локализованные имена.
Кажется, можно включить поддержку, в крайнем случае переписать на латиницу.
2. Target.CellAddress.Column
Тоже не проблема.

А вот отсутствие библиотеки Lib "user32" существенно.
Записан

mikekaganski
Мастер
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 405


« Ответ #4: 23 Январь 2017, 14:44 »

Улыбка Извините за не слишком внятный пост.

В предыдущем посте я отправил исправленный код, работающий в LO под Windows, с комментариями о том, что конкретно было изменено.

Это не будет работать под другими операционными системами (в первоначальном вопросе не стояла задача кросс-платформенного решения).
Записан

С уважением,
Михаил Каганский
bsi
Участник
**
Offline Offline

Сообщений: 41


« Ответ #5: 14 Февраль 2017, 16:37 »

На этом форуме https://forum.openoffice.org/en/forum/viewtopic.php?f=45&t=87448&p=410183#p410183 нашел ответ для LO.
Код:
Private Declare Function ActivateKeyboardLayout Lib _
"user32.dll" (ByVal myLanguage As Long, Flag As Boolean) As Long

Sub ActiveAmericanKeyboard()
Call ActivateKeyboardLayout(&H0409, 0)
End Sub
Sub ActiveRusKeyboard()
Call ActivateKeyboardLayout(&H0419, 0)
End Sub
Может кому и пригодится. Всё хорошо
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!