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

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

22 Январь 2022, 21:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 4 »   Вниз
  Печать  
Автор Тема: Счётчик нажатий мышки  (Прочитано 3143 раз)
0 Пользователей и 1 Гость смотрят эту тему.
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #15: 3 Январь 2022, 11:10 »

... кликать мышкой на какую-нибудь фигуру, распознать и записать её имя в ячейку B1.
В примере нужно сначала запустить слушатель (Sub Main), я не стал его привязывать к открытию документа, сделайте как вам удобно.

* Определение фигур в Calc1.ods (13.85 Кб - загружено 5 раз.)
Записан

Tigrik
Форумчанин
***
Offline Offline

Сообщений: 117


« Ответ #16: 3 Январь 2022, 13:16 »

Rami, Огромная Благодарность Вам за Помощь!
В другом, но похожем макросе, будут мини-картинки вместо стандартных фигур - немного сомневался, что подойдут методы, но всё прекрасно сработало.
Записан
Tigrik
Форумчанин
***
Offline Offline

Сообщений: 117


« Ответ #17: 5 Январь 2022, 08:02 »

Rami, помогите, пожалуйста, с некоторыми вопросами по последнему макросу - всю голову сломал.

Необходимо останавливать макрос, допустим, по нажатию на ячейку "A1".
Для этого, как я понимаю, нужно запустить метод removeEnhancedMouseClickHandler с параметром aListener (в примере - это объект lis).
Я сделал этот объект Глобальной переменной и пытаюсь запустить этот метод, но происходит вылет из приложения. Видимо, как-то по другому правильно это делать?

Долго пытался разобраться (так как этим никогда не пользовался) почему изменилось отображение фигур в ячейках - пока не обнаружил, что Расположение фигуры определено как "Позади текста". Кстати, можно ли как-то вернуть Расположение в состояние "Впереди текста"? Или ещё как-то добраться до свойств фигуры?
Благодаря этому ("Позади текста"), в макросе можно снимать Адрес Ячейки (CellAddress), но только по двойному щелчку мыши на ячейке (сначала определяется имя фигуры, а затем адрес?!?), что не очень удобно. А есть ли у свойства target атрибуты, которые можно использовать для определения адреса нажатой ячейки?
В этом файле три новые фигуры, которые поверх текста (они цветные) - по ним не работает CellAddress - вылетает макрос.

По большому счёту, я могу все свои фигуры и картинки, которые буду использовать, определять как "Позади текста", если узнаю, как их можно будет вернуть обратно, если будет нужно какие-то изменения в самих фигурах. Второй момент - хотелось бы по одному нажатию мышкой на ячейку получать и имя фигуры, и адрес ячейки. Есть ли такая возможность?

Спасибо.
Записан
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #18: 5 Январь 2022, 10:26 »

Благодаря этому ("Позади текста"), в макросе можно снимать Адрес Ячейки (CellAddress), но только по двойному щелчку мыши на ячейке (сначала определяется имя фигуры, а затем адрес?!?), что не очень удобно. А есть ли у свойства target атрибуты, которые можно использовать для определения адреса нажатой ячейки?
"Позади текста" нужно чтобы объект не выделялся при нажатии.

target — это любой объект на который нажимает мышка, может быть и фигура и ячейка, поэтому я проверяю, есть ли у объекта свойство "Name", если есть, мне не важно что это за объект, если вам важно, делайте проверку (у ячейки нет свойства "Name").

Если нажали на фигуру привязанную к ячейке, то у target будет свойство "Anchor" — объект привязки, в нашем случае ячейка:
Код:
obj = event.target        'это фигура
oCell = obj.Anchor        'это привязка (ячейка), но только в случае если нажали на фигуру, а не на ячейку
oCellAddress = oCell.CellAddress
Записан

Tigrik
Форумчанин
***
Offline Offline

Сообщений: 117


« Ответ #19: 5 Январь 2022, 11:41 »

Огромное Спасибо, Rami, за помощь.

"Позади текста" нужно чтобы объект не выделялся при нажатии.
Это я уже понял. Но в таком Расположении до объекта (фигуры или картинки) не добраться, что бы, при необходимости, изменить объект - можно как-то временно поменять это расположение?

Если нажали на фигуру привязанную к ячейке, то у target будет свойство "Anchor" — объект привязки, в нашем случае ячейка:
Всё отлично получилось - по одному нажатию мышки: и имя, и адрес.

Остался, пока, только один важный вопрос по данному макросу: как остановить слушание? У меня, пока, никак не получается.

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

* Определение фигур в Calc13_Форум.ods (15.04 Кб - загружено 5 раз.)
Записан
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #20: 5 Январь 2022, 17:52 »

... как остановить слушание? У меня, пока, никак не получается.
Вы пытатесь "убить слушателя его же руками". Остановить слушание можно если назначить макрос останова на кнопку.

... можно как-то временно поменять это расположение?
Можно:
Код:
obj.LayerName = "hinten"    'расположение фигуры в ячейке: hinten —> сзади текста; vorne —> спереди текста (по немецки)
Наверно, нужна кнопка "Редактировать" для обхода всех фигур и "подъёма" наверх или опускания.
Записан

sokol92
Опытный пользователь
***
Offline Offline

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


WWW
« Ответ #21: 5 Январь 2022, 20:16 »

как остановить слушание? У меня, пока, никак не получается

Похоже на баг с XEnhancedMouseClickHandler. Попытка удалить слушатель из процедур обработки событий mousePressed и mouseReleased приводит к "крэшу".
С XMouseClickHandler такого не происходит. Можно этот баг обойти с помощью асихронного вызова (такого рода трюк подсмотрел у Hanya).
Записан

Владимир.
kompilainenn
Мастер
*****
Online Online

Сообщений: 3 403



« Ответ #22: 5 Январь 2022, 20:38 »

Похоже на баг с XEnhancedMouseClickHandler.
Вы же знаете, что делать с этой информацией, правда?
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
sokol92
Опытный пользователь
***
Offline Offline

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


WWW
« Ответ #23: 6 Январь 2022, 18:00 »

tdf#146617
Записан

Владимир.
Tigrik
Форумчанин
***
Offline Offline

Сообщений: 117


« Ответ #24: 7 Январь 2022, 12:19 »

Rami, спасибо большое.
Два дня сижу экспериментирую, но так ничего и не выходит с остановкой слушания.

Вы пытатесь "убить слушателя его же руками". Остановить слушание можно если назначить макрос останова на кнопку.
Если я правильно понимаю, то необходимо сделать макрос на строку где будет останова, наверное, что-то типа "GOTO", но я не знаю, даже, в каком месте нужно остановить слушатель, чтобы было корректно.
На первом листе во вложенном файле я пытался сделать макрос для кнопки на остановку слушания, но не получилось. При варианте нажатия на кольцо происходит вылет из приложения - заремил это место. После, у Питоньяка увидел почти такой же вариант, но, как я понимаю, с обработкой ошибок и с немного другим обработчиком нажатия клавиш мышки - XMouseClickHandler.
На втором листе - чуть-чуть измененный (чисто для наглядности) макрос предложенный Sokol92 - там происходит остановка слушания... но появилась другая проблема. Если останавливать слушание непосредственно из макроса, то всё отлично, но если через кнопку - происходит лишний шаг и записывается неверное значение.

* Определение фигур в Calc7+кнопки.ods (17.11 Кб - загружено 4 раз.)
Записан
sokol92
Опытный пользователь
***
Offline Offline

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


WWW
« Ответ #25: 7 Январь 2022, 14:16 »

@Tigrik, Михаил Каганский сверхоперативно исправил указанный выше баг tdf#146617. Будет доступно, начиная с версии 7.4.0. Вероятно, можно и в более ранних версиях (это к Михаилу).

До обновления версии слушатель  XEnhancedMouseClickHandler можно остановить асинхронно. Если есть необходимость, то могу показать, как это сделать.
Записан

Владимир.
eeigor
Опытный пользователь
***
Offline Offline

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



« Ответ #26: 7 Январь 2022, 14:58 »

Если есть необходимость, то могу показать, как это сделать.
@sokol92, конечно покажите. У hanya всё мудрёно.
Записан

Ubuntu 18.04 LTS • LO 7.2.4.1 Community
Tigrik
Форумчанин
***
Offline Offline

Сообщений: 117


« Ответ #27: 7 Январь 2022, 15:15 »

Если есть необходимость, то могу показать, как это сделать.
Покажите, пожалуйста.
Записан
rami
Гуру
*******
Offline Offline

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


iMac, LibreOffice и Apache OpenOffice


« Ответ #28: 7 Январь 2022, 15:35 »

... но появилась другая проблема. Если останавливать слушание непосредственно из макроса, то всё отлично, но если через кнопку - происходит лишний шаг и записывается неверное значение.
Это потому, что слушатель реагирует на нажатие кнопки. Можно обойти так:
Код:
Function MouseOnClick_mouseReleased(oEvt as object) As Boolean
Dim oCell, oSheet, rAdr
MouseOnClick_mouseReleased = false    ' Разрешить офису другие обработки этого события
If oEvt.Source.AccessibleContext.ImplementationName = "com.sun.star.comp.toolkit.AccessibleButton" Then Exit Function  'если нажали кнопку, выходим
oCell = ThisComponent.CurrentSelection
If Not oCell.supportsService("com.sun.star.sheet.SheetCell") Then Exit Function
oSheet = oCell.SpreadSheet
rAdr = oCell.CellAddress
With rAdr
If .Row = 0 And .Column = 0 Then
oCell.setValue(MouseClickCount)     
UnregisterMouseClickHandler
Exit Function
End If
If .row>0 And .row<=oSheet.getCellByPosition(2, 0).Value And .Column<oSheet.getCellByPosition(1, 0).Value Then
MouseClickCount = MouseClickCount+1
oCell.setValue(MouseClickCount)
End If
End With
End Function

Но тогда не будет записывать результат в ячейку "A1". Это нужно или это побочный эффект?
Записан

sokol92
Опытный пользователь
***
Offline Offline

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


WWW
« Ответ #29: 7 Январь 2022, 16:11 »

Вариант со слушателем XEnhancedMouseClickHandler, который реагирует на щелчок по ячейкам и фигурам (CustomShape).

Для окончания прослушивания можно нажать соответствующую кнопку или щелкнуть по ячейке A1.
Попробовал на версиях LO 7.2.5.2 Win 10 и 7.2.2.2 на Ubuntu 20.04.

* Определение фигур в Calc.ods (15.92 Кб - загружено 3 раз.)
Записан

Владимир.
Страниц: « 1 2 3 4 »   Вверх
  Печать  
 
Перейти в:  

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