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

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

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

Kadet

Цитата: mikekaganski от  3 августа 2021, 16:30Мне почему-то казалось, что execute - это "выполнить".
Ну да. Вы знаете какой я знаток английского.

Kadet

Цитата: sokol92 от  3 августа 2021, 16:34Левая кнопка мыши по какому объекту?
По кнопке "Ок".

В общем, ничего у меня не получилось. Возьму паузу для осмысления полученной инфы. Спасибо!

Kadet

#32
Так, я таки осмыслил, в этом моменте разобрался и вспомнил почему-же некогда я отказался от использования типов кнопок "Ок" в диалогах. Как и сейчас откажусь, как и от использования метода Execute().

Дело в том, что делая тип кнопки "Ок" и нажав Enter на ней диалоговое окно автоматически и безапелляционно закрывается. А так как я, в основном, работаю с БД, где любое незаполненное или неправильно заполненное поле может нанести существенный вред всей БД, то перед закрытием диалогов вначале нужно проверять заполненные данные. В случае, если данные заполнены не полностью или допущены ошибки, диалог закрывать нельзя. Нужно остановить закрытие и сохранение данных и попросить пользователя таки навести порядок.
Методы "тип ОК"  и Execute() этого не позволяют. Нет, проверку, конечно, организовать можно, но вот остановить закрытие диалога никак нельзя. Они по-любому его закрывают. Толку тогда это этих проверок.

Поэтому эти методы мне не подходят. Спасибо, но...

eeigor

#33
@Kadet, OK/CANCEL, как это в MS Office, – действия по умолчанию: Enter –> OK, Esc –> CANCEL. Но что при этом происходит, можно уточнить прикреплённой процедурой. В Access можно легко отменить закрытие формы. Здесь не так? Возможно, сложнее, но решение должно быть где-то рядом.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

Kadet

eeigor, возможно. Но я такого метода не нашёл (может плохо искал).
При типе кнопки Ок диалог всегда закрывается по её нажатии.

Однако, вполне вероятно насчёт метода Execute() я и ошибаюсь. Его я тестировал в совокупности с типом Ок. Сейчас протестирую его как следует уже с типом по-умолчанию. Однако, его нужно вешать на события самого диалога, а не кнопок. Попробую.

Kadet

НУ, в принципе, протестировал.
Да, метод Execute() диалог не закрывает, но и не работает, как и говорил sokol92, пока не включить тип Ок, который диалог закрывает.
На событиях кнопки Ок при типе дефолт он при любых клавишах даёт 0. А если его повесить на события диалога, то в его макрос вообще не входят. Т.е., получается события просто не работают.

sokol92

Цитата: Kadet от  3 августа 2021, 18:14диалоговое окно автоматически и безапелляционно закрывается.
Да. Но предполается иная логика (псевдокод).

Do While True
  rc=oDialog.execute
  ' анализ rc и элементов управления диалога
  If (...) Then  ' отказ от ввода или данные введены верно
    Exit Do
  End If
 
  ' информируем пользователя об ошибке в самом диалоге или отдельным сообщением
 
Loop    

Владимир.

rami

Цитата: Kadet от  3 августа 2021, 12:47Как в диалоговом окне можно повесить на свойство активной кнопки выполняться по нажатии "Enter". Пробовал повесить макрос на свойство "нажатие клавиши", но тогда выполнение макроса начинается по нажатии любой клавиши клавы, а нужно только "Enter". Нужно ставить проверку какая клавиша нажата. Подскажите, пожалуйста, как это реализовать?
Макрос нужно назначить на событие "Выполнить действие", если кнопка в фокусе, будет срабатывать на клавиши "Enter" и/или "Пробел".

Kadet

#38
Цитата: rami от  3 августа 2021, 21:59Макрос нужно назначить на событие "Выполнить действие", если кнопка в фокусе, будет срабатывать на клавиши "Enter" и/или "Пробел".
Понял. Спасибо. Опробую эту технологию. Может чего-то и добьюсь.

Kadet

rami, спасибо! Всё заработало как хотелось.
Так и знал, что всё должно быть достаточно просто, без замудрёнств.