Счётчик нажатий мышки

Автор Tigrik, 6 декабря 2021, 19:05

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

eeigor

Спасибо! Беру на заметку.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

Tigrik

sokol92, Большое спасибо - всё отлично работает.
Макрос поддерживает сервисы только Фигуры (Основные и Фигуры-символы) и ячейки. Честно говоря, у меня будут, в основном, мини-картинки.
Пришлось поискать сервис, который может обращаться с картинками. Правильно ли я нашёл, что это - "com.sun.star.drawing.GraphicObjectShape"?
Дополненный файл во вложении.

Tigrik

Rami, ещё раз огромная благодарность Вам за помощь.
Цитата: rami от  7 января 2022, 15:35Но тогда не будет записывать результат в ячейку "A1". Это нужно или это побочный эффект?
Нет, это не очень важно, но более конкретно Ваш макрос я буду тестировать завтра - сил больше нет - всю ночь за компом.

Tigrik

Цитата: Tigrik от  7 января 2022, 17:34Ваш макрос я буду тестировать завтра
Всё-таки не удержался - потестил чуть-чуть - отлично!
Спасибо.


sokol92

Цитата: Tigrik от  7 января 2022, 17:34всю ночь за компом
Все мы этим грешили. У меня в среднем уходило лет 10 на устранение последствий ночного творчества.   :)
Владимир.

sokol92

Цитата: Tigrik от  7 января 2022, 17:29"com.sun.star.drawing.GraphicObjectShape"
Попробуйте (выспавшись!) sheet.Shape.

    ElseIf obj.supportsService("com.sun.star.sheet.Shape") Then  '
Владимир.

Tigrik

Цитата: sokol92 от  7 января 2022, 18:06Попробуйте (выспавшись!) sheet.Shape.
Спасибо, sokol92 - ВСЁ (картинки и все виды фигур) определяются!


sokol92

Это логично, поскольку именно к сервису sheet.Shape относится свойство anchor - объект (ячейка или лист), к которому "прикрепляется" фигура (Shape).
Владимир.

sokol92

И еще один штрих в тему.

(Псевдо) свойство CurrentController для документа Calc довольно коварное, так как при переходе в режим предварительного просмотра печати документа и обратно этот объект создается заново. Соответственно, наш слушатель мыши, для которого CurrentController является вещателем (генерирует события), после возврата из режима предварительного просмотра, увы, перестанет реагировать на щелчки мыши (проверьте!).

Узнать, находится ли документ Calc в режиме предварительного просмотра печати можно с помощью конструкции

  If HasUnoInterfaces(ThisComponent.CurrentController, "com.sun.star.sheet.XSpreadsheetView") Then  ' обычный режим (не предварительный просмотр печати)

В прилагаемом документе учтено это соображение. При возврате из режима предварительного просмотра печати слушатель мыши регистрируется повторно. Обратите внимание на обработчик события OnViewCreated, которое генерируется при указанной смене режима просмотра.
Владимир.

eeigor

#39
Цитата: sokol92 от  9 января 2022, 20:37(Псевдо) свойство CurrentController для документа Calc довольно коварное, так как при переходе в режим предварительного просмотра печати документа и обратно этот объект создается заново.
Ну что ж, @sokol92, Вы нашли объяснение ошибки, которая поднималась в этом исследовании в 2008 году (ooBUGG: Stops after a print-preview). Респект.

Возможно, такой стиль именования будет более прозрачным:
   Sub Document_OnViewCreated()  'View created/Просмотр создан

А может, это действительно баг: слишком много возлагается на того, кто программирует слушателя.
Тот случай, когда форум становится носителем знаний, в поисках которых гуглить бесполезно...
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

Tigrik

Цитата: sokol92 от  9 января 2022, 20:37Обратите внимание на обработчик события OnViewCreated, которое генерируется при указанной смене режима просмотра.
Всё работает просто замечательно.
Цитата: eeigor от  9 января 2022, 22:26Возможно, такой стиль именования будет более прозрачным:
    Sub Document_OnViewCreated()  'View created/Просмотр создан
Может быть нужно что-то ещё добавить или изменить, но такое название процедуры вызывает ошибку при входе в режим предварительного просмотра печати и при выходе из него (фото во вложении).

eeigor

#41
Правильно! Ответьте на вопрос: как и откуда осуществляется вызов этой процедуры? Где (в каком диалоге) это задано? Потому что это событие документа (Spreadsheet Document). Надо не просто изменить имя процедуры в модуле. И "Document" наводит на мысль... то есть делает код самодокументированным. Но не будем придираться: @sokol92 прекрасно решил задачу.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

Tigrik

Цитата: eeigor от 10 января 2022, 01:36Ответьте на вопрос: как и откуда осуществляется вызов этой процедуры?
Да, я хорошо представляю, что эту процедуру необходимо как-то (и откуда-то) вызвать (мой полувопрос: "что-то ещё добавить или изменить"), но я только учусь программировать макросы (при том, получается это с большими перерывами).
А объясните, пожалуйста, что дает вызов этой процедуры для пользы макроса?

eeigor

Сервис >> Настройки >> События
Это даёт то, о чём написал автор: после входа в/выхода из режима просмотра перед печатью заново зарегистрировать соответствующий слушатель, иначе он будет остановлен.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

Tigrik

Понял, спасибо за пояснение.