Добрый день! Недавно познакомилась с OOo Calc. Проблема: ...

Автор ForumOOo (бот), 10 февраля 2011, 14:57

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

Natali

Здравствуйте. Вот такие особенности:
Я установила расширение версии 0.2.3. При запуске:  и из меню и по Ctrl Shift F3 выдает ошибку --см. вложение рис1.  Когда назначаю свое сочетание клавиш--эта версия работает вроде без ошибок.
Версия 0.3.4 -работает,  что имеется ввиду:  "там есть перевод на английский язык" ?
Спасибо за ответ.

[вложение удалено Администратором]

Рыбка Рио

Цитата: Natali от 24 февраля 2011, 13:59Я установила расширение версии 0.2.3. При запуске:  и из меню и по Ctrl Shift F3 выдает ошибку --см. вложение рис1.
Эта версия предполагает что вы устанавливаете его только для себя, а не для всех пользователей (видите в менеджере расширений там значок с двумя желтыми фигурками?). Это недочёт.

Цитата: Natali от 24 февраля 2011, 13:59Версия 0.3.4 -работает,  что имеется ввиду:  "там есть перевод на английский язык" ?
Т.е., если офис имеет английский интерфейс, то и расширение будет на английском.
ubuntu 12.04 + LibO3.6.0

Рыбка Рио

Вот исправленная версия со скриптом search_in_calc.py - 0.2.9. В ней кроме самого скрипта (search_in_calc.py) теперь находится ещё файл SIC.py, который регистрируется как компонент  и служит для вызова скрипта search_in_calc.py методом, который дан тут: Использование stdout shell скриптов в OOo макросах [MEMO]).

[вложение удалено Администратором]
ubuntu 12.04 + LibO3.6.0

Рыбка Рио

В версиях на Питоне есть ещё 1 ошибка. Если ввести регулярное выражение (типа [3|4] , т.е. "либо 3, либо 4") , то расширение ничего не найдёт. Ошибка в том, что свойство SearchRegularExpression должно писаться с заглавной буквы, а в расширении с маленькой (т.е. searchRegularExpression). В следующих  версиях исправлю (сегодня чуть позже). Кстати, в окошке можно перемещаться со строки на строку не толко мышкой но и стрелками на клавиатуре.... Наверное, можно ещё добавить вертикальный столбец для нумерации результатов? Вот так:

[вложение удалено Администратором]
ubuntu 12.04 + LibO3.6.0

Рыбка Рио

Готово:
(теперь можно выбирать, нужно ли искать регулярное вырадение или нет)

[вложение удалено Администратором]
ubuntu 12.04 + LibO3.6.0

Kadet

#20
Вот нашёл старенькую тему, скопировал и переработал из неё макросы и пробую их использовать.

Однако, всё хорошо, то, что хотелось, но столкнулся с такой проблемой: при закрытии этого всплывающего окна автоматически открывается редактор Basic (по крайней мере у меня). Открывается он не всегда, но почти всегда. Иной раз бывает проскакивает, но причины я выяснить пока не могу.
Нет ли идей почему так происходит?

Второй момент. Пробовал создавать кнопки "Отмена" и "Ок", но обычно их функционал использую через поиск принадлежности нажатой кнопки к тому или иному документы, т.е.: (oEvent.Source.Model.Parent). Но, оказалось в свойствах этих кнопок просто нет такого метода Parent. Они, как бы, висят в воздухе ни к чему не прикреплённые, судя по их свойствам и методам. Нет, ну можно, конечно сохранить родителя в глобальной переменной, а потом при нажатии на кнопку брать его из этой переменной, но... это же "через одно место". А если придётся открывать несколько окон, используя одни и те же макросы - возникают сложности. Есть ли способ проще найти их "родителя"?

И третий вопрос, немного не относящийся к теме этой темы.
Как в диалоговом окне можно повесить на свойство активной кнопки выполняться по нажатии "Enter". Пробовал повесить макрос на свойство "нажатие клавиши", но тогда выполнение макроса начинается по нажатии любой клавиши клавы, а нужно только "Enter". Нужно ставить проверку какая клавиша нажата. Подскажите, пожалуйста, как это реализовать?

sokol92

#21
Измените в своем примере диалогового окна в свойствах кнопки "OK" тип кнопки на "OK".
О нажатии кнопки OK или Cancel (или соответствующих кнопок клавиатуры) обычно узнают по коду возврата метода execute.

Что касается появления окна редактора, то это, скорее всего, следствие того, что не описаны методы disposing для кнопок. Добавьте

Sub AL_disposing()
End Sub


и т.д. для всех кнопок.
Владимир.

Kadet

Цитата: sokol92 от  3 августа 2021, 14:02Что касается появления окна редактора, то это, скорее всего, следствие того, что не описаны методы disposing для кнопок. Добавьте
Точно. Скорее всего так и есть. А я и не обратил внимания. Спасибо! Ведь все методы листенеров нужно описывать, даже пустые.

Тип "Ок" заработало. Спасибо!
Однако, когда-то я стал выключать эти типы. Не помню, что мне не понравилось, посмотрим. Время покажет.

Цитата: sokol92 от  3 августа 2021, 14:02обычно узнают по коду возврата метода execute.
С чем его едят? Как его отловить? По событию нажатия - Event?

sokol92

Метод execute использован в Вашем примере (строка 13 модуля DLG). Запишите так:

rc=oDlgVyn.execute()

где rc - код возврата метода (переменная целого типа).

Если была нажата кнопка OK (или Enter), то метод вернет 1, если Cancel (или Esc или форму закрыли нажатием на "крестик") - то 0.
Другие коды возврата можно установить с помощью метода endDialog.

Владимир.

Kadet

Цитата: sokol92 от  3 августа 2021, 15:59rc=oDlgVyn.execute()
Ну да, execute - это же "ззкарыть", "выйти".
Никогда бы не предположил, что его можно использовать подобным образом. Попробую.

Кстати, протестировал и понял, почему отказался от использования типов "Ок". Макрос завожу на событие "Нажатие кнопки мыши", а макрос тут нужен. Если его завести на "Нажатие клавиши", то он будет срабатывать по нажатию любой клавиши. Нужно ставить проверку "какая кнопка нажималась". Мало того, так как макрос один для всех случаев, то вешать его нужно и на мышу и на клаву и ставить проверку - мыша или энтер, всё остальное мимо. А это не получалось.

Ща попробую через execute. Может что получится.

Kadet

Цитата: sokol92 от  3 августа 2021, 15:59Если была нажата кнопка OK (или Enter), то метод вернет 1, если Cancel (или Esc или форму закрыли нажатием на "крестик") - то 0.
А если ЛКМ?

Kadet

ЛКМ - тоже выдаёт "0". Т.е. получается, он не отличается от esc, и это огорчает.

Т.е. выход - нужно делать два одинаковых макроса - на кнопку отдельно, на мышу отдельно... А это не есть хорошо... Хотя, можно сделать маленькие ссылочные макросы, которые будут  - один просто ссылаться на исполняемый нужный макрос, а другой вначале проверять что нажато и, в зависимости от результата, переходить на главный макрос или нет.
В общем... усложняет это всё.

Кстати, я использую метод endExecute(), а он в отличает от Execute() ничего не возвращает.

mikekaganski

Цитата: Kadet от  3 августа 2021, 16:13Ну да, execute - это же "ззкарыть", "выйти".

Мне почему-то казалось, что execute - это "выполнить".
С уважением,
Михаил Каганский

sokol92

#28
Левая кнопка мыши по какому объекту?

Для кнопок типа "OK", "Cancel", "Help" не должно быть обработчиков событий (в своем примере уберите, иначе Execute не вернет то, что надо).
Для кнопок типа Standard ("По умолчанию") нужны обработчики событий (нажатия кнопки). Из этих обработчиков при желании можно закрыть диалог с помощью упомянутого метода endDialog. Можно также вызвать endExecute (в результате которого Execute вернет 0).
Владимир.

Kadet

Не. Не алё.
Почему-то на все Enter (и боковой и главный) метод:
rs = oDlgVyn.Execute()
Отвечает нулём.