Проект chess

Автор Massaraksh7, 4 июня 2024, 00:09

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

Massaraksh7

Пока только установка начальной позиции.
Кстати, если кому интересно- присоединяйтесь.

kompilainenn

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

Massaraksh7

Цитата: kompilainenn от  4 июня 2024, 13:02Но зачем?
Неужели никогда не работали просто для удовольствия?

sokol92

Вот еще интересная игра для LO - решатель судоку любой сложности (во вложении).
Заполняете квадрат слева и запускаете макрос.
Потребуется расширение PySudoku.
Владимир.

kompilainenn

Цитата: Massaraksh7 от  4 июня 2024, 13:48Неужели никогда не работали просто для удовольствия?
Работал, пока не сгорел
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

Massaraksh7


Massaraksh7

Ну, тогда и не буду засорять форум.

mikekaganski

Цитата: kompilainenn от  4 июня 2024, 13:02Но зачем?

Мне кажется, это нечестный вопрос.
Выгорание @kompilainenn - это безумно грустно. Но как мне кажется, это не повод снижать мотивацию других :)

@Massaraksh7: Если у Вас есть что-то, что Вам интересно, и Вы готовы поделиться с другими - это здорово, и это никак не "засорение" форума.
С уважением,
Михаил Каганский

Massaraksh7

#8
Тогда здесь буду задавать вопросы, относящиеся к данной теме.
Событие листа "Выбранная область изменена" странно себя ведёт.
Вот такой макрос назначен этому событию:
Sub Main
sheets = ThisComponent.getSheets()
sheet = sheets.getByIndex(0)
n = sheet.getCellByPosition(1,1).Value
n = n + 1
sheet.getCellByPosition(1,1).Value = n
End Sub
В начальном состоянии ячейка (1,1) равна нулю. Если макрос просто вызывать отдельно, то при каждом вызове, содержимое, естественно, увеличивается на 1.
Но, если макрос висит на событии, то при открытии документа он срабатывает 5 раз, а при  последующем клике на любую ячейку листа - 4 раза (причём, при нажатии - 1 раз, а при отжатии - ещё 3 раза). Не уверен, что это фича, а не баг. Это исправимо? Есть ли какие-то другие способы повесить куда-нибудь событие ЛКМ, чтобы было одно срабатывание?

Massaraksh7

Или так, если с выводом имени реализации.
Sub Main(oEvent)
sheets = ThisComponent.getSheets()
sheet = sheets.getByIndex(0)
n = sheet.getCellByPosition(1,1).Value
n = n + 1
sheet.getCellByPosition(1,1).Value = n
s = oEvent.ImplementationName
sheet.getCellByPosition(2,n).setString(s)
End Sub

mikekaganski

Цитата: Massaraksh7 от  7 июня 2024, 00:59при открытии документа он срабатывает 5 раз, а при  последующем клике на любую ячейку листа - 4 раза

Похожий баг: tdf#117280. Там была особенность: событие должно вызываться несколько раз, но во-первых, не трижды, а только дважды (в начальном сообщении было сказано о двукратном срабатывании - это нормально; а потом Xisco уточнил, что диалог появляется трижды); а во-вторых, в первый и второй раз в аргументе функции должна указываться стадия.

В Вашем случае единственный аргумент - это объект "ячейка" / "диапазон" / "набор диапазонов". И всегда передаётся конечное выделение - то есть нет события "вот с этого диапазона снято выделение". Поэтому да, здесь нужно, чтобы вызов был однократный.

Но без бага нет проблемы.
С уважением,
Михаил Каганский

Massaraksh7

Есть ли возможность как-то отфильтровать лишние вызовы?

mikekaganski

??? Что вообще имеется ввиду? Настройка типа "хватит валять дурака, работай как надо"? Или возможность определить, что в вызове та же ячейка, что и предыдущий раз? (что в принципе возможно в Вашем коде, если Вы будете сохранять в какой-то глобальной переменной данные аргумента предыдущего вызова - но тут надо помнить, что сами объекты могут быть каждый раз разные, у них будет совпадать тип и, например, имя ячейки; также надо проверить, что будет, скажем, если Вы выделили A3, затем удалили строку 2 (так что выделена оказалась ячейка A2), а затем выделили новую A3).
С уважением,
Михаил Каганский

Massaraksh7

Цитата: mikekaganski от  7 июня 2024, 11:54Что вообще имеется ввиду?
Я имею в виду не костыли, типа глобальных переменных (каких, например, кстати?), а, возможно, присутствие в передаваемом событии какого-то признака, типа, идентификатора нажатия ЛКМ.

mikekaganski

У меня впечатление, что Вы просто проигнорировали мой ответ #10. Я там напрямую ответил на этот вопрос.
С уважением,
Михаил Каганский