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

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

4 Март 2021, 18:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Блокировка действий пользователя на время работы макроса LibreOffice Calc  (Прочитано 3715 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ost
Форумчанин
***
Offline Offline

Сообщений: 123


« Стартовое сообщение: 20 Май 2019, 19:17 »

Доброго.

Есть макрос на StraBasic, который работает иногда до нескольких десятков секунд. Необходимо блокировать возможность работы (редактирование, сохранение, запуск макросов по хоткеям и пр.) пользователя с файлом (Libre Office Calc), содержащим макрос на время его работы.

Поможите, пожалуйста.

Спасибо.
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 392


« Ответ #1: 27 Май 2019, 09:28 »

В макросе в самом начале его (скажем во 2-ю строку) вставьте команду блокировки интерфейса

ThisComponent.LockControllers

А в конце макроса - вставьте строку

ThisComponent.UnLockControllers

Если макрос прерывается ошибками или досрочно завершает работу - Calc останется "замороженным", и привести его в чувство поможет другой макрос:

Sub UnFreeze()
ThisComponent.UnLockControllers
End sub  
Записан

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

Сообщений: 123


« Ответ #2: 28 Май 2019, 19:23 »

Попробую.Позже. Сейчас других задач поднавалилось. =)
Спасибо.
« Последнее редактирование: 29 Май 2019, 09:14 от ost » Записан
ost
Форумчанин
***
Offline Offline

Сообщений: 123


« Ответ #3: 29 Май 2019, 09:14 »

Попробовал. Не получается.
У меня начало макроса такое (до этого кода в макросе встречается лишь присвоение значения двум переменным и объявление массива через Dim)
Код:
oBook=ThisComponent
oBook.lockControllers()
oBook.addActionLock()
Но при этом курсором можно  свободно двигать (менять выделение ячеек) как мышью, так и клавиатурой, можно открывать контекстные меню, удалять строки, вводить данные в ячейки. Другие действия не пробовал, но подозреваю, что осуществимы и они.


Версия: 6.1.1.2 (x64)
ID сборки: 5d19a1bfa650b796764388cd8b33a5af1f5baa1b
Потоков ЦП: 2; ОС:Windows 6.1; Отрисовка ИП: по умолчанию;
Локаль: ru-RU (ru_RU); Calc: group threaded
Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #4: 29 Май 2019, 10:01 »

Питоньяк пишет
Цитата:
lockControllers() Предотвращает некоторые обновления отображения - макросы могут выполняться быстрее.

А что если макрос откроет файл скрытым и проведет всю работу с ним не привлекая внимания.
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
ost
Форумчанин
***
Offline Offline

Сообщений: 123


« Ответ #5: 30 Май 2019, 15:51 »

Это, к сожалению, не выход. Макрос по команде пользователя пишет данные из Calc во внешнюю базу данных
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 392


« Ответ #6: 30 Май 2019, 16:52 »

Проверил на 6.2.2.2 - и правда, не лочится ничего, только обновление экрана блокируется.
Тогда можно решить задачу частично. например запретить запуск других макросов.

Пусть макрос в начале проверят флаг запущенности, ставит его, например пишет в ячейку опр. слово, отрабатывает, снимает флаг. Во время работы любого такого макроса - другие запустятся и сразу завершат работу:

Код:
Option VBASupport 1

Sub макрос1()
If [A1]="Идет обработка..." then end ' проверили и прервались
[A1]="Идет обработка..." ' поставили флаг
'
' ... тут тело макроса
'
[A1]=""  ' сбросили флаг в конце работы
End sub
Записан

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

Сообщений: 123


« Ответ #7: 10 Июнь 2019, 11:39 »

Видимо, это лучший выход. Спасибо.
Записан
mikekaganski
Гуру
*******
Offline Offline

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


« Ответ #8: 10 Июнь 2019, 13:21 »

А то, что lockControllers() не блокирует контроллеры - не представляется багом, который желательно открыть в трекере? (Конечно, это может оказаться сознательным изменением, но ...)
Записан

С уважением,
Михаил Каганский
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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