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

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

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

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2   Вниз
  Печать  
Автор Тема: Текстовое поле и обработка нажатия клавиш  (Прочитано 1233 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ириминаге
Всем бобра!
Участник
**
Offline Offline

Сообщений: 49


« Ответ #15: 12 Апрель 2022, 16:19 »

Снёс либру, вычистил папки, поставил снова. Вроде работает. Теперь основной вопрос:
Я так понимаю, что надо на текстовое поле повесить слушателя? Если это так, не подскажете ли, какой именно слушатель нужен для просеивания нажатых клавиш в поле текста?
Записан

Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...
economist
Форумчанин
***
Offline Offline

Сообщений: 1 672


« Ответ #16: 12 Апрель 2022, 16:57 »

Не надо просеивать и слушателя. Есть событие Текст изменен - на него вешаете макрос, который получает вызвавший его контрол. От контрола берете текст и делаете что нужно:
Код:
Sub ChangeText(oEvent)
sText = oEvent.Source.Text
' ...
End sub
Если нужно посимвольно анализировать и что-то делать (поиск в БД по первым символам) - то выбирайте событие Отпускание клавиши для макроса. Это то самое "просеивание"...
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Ириминаге
Всем бобра!
Участник
**
Offline Offline

Сообщений: 49


« Ответ #17: 12 Апрель 2022, 17:14 »

Не надо просеивать и слушателя. Есть событие Текст изменен - на него вешаете макрос, который получает вызвавший его контрол. От контрола берете текст и делаете что нужно:
Код:
Sub ChangeText(oEvent)
sText = oEvent.Source.Text
' ...
End sub
Если нужно посимвольно анализировать и что-то делать (поиск в БД по первым символам) - то выбирайте событие Отпускание клавиши для макроса. Это то самое "просеивание"...

Текст я и так беру без обработки события изменения: по результатам, после закрытия диалогового окна. Я хочу отловить ENTER, а это, как я понял, без слушателя никак...
Записан

Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...
sokol92
Опытный пользователь
***
Offline Offline

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


WWW
« Ответ #18: 12 Апрель 2022, 18:15 »

Есть диалоговая форма с текстовым полем и кнопкой ОК
Возвращаемся к стартовому сообщению.
Если Вы хотите при нажатии на Enter в текстовом поле заканчивать ввод и закрывать диалог, то нужно:
1. Установить для текстового поля свойство "Многострочный ввод": "Нет"
2. Установить для кнопки OK свойства "Тип кнопки" : "OK" и "Кнопка по умолчанию" : "Да".
« Последнее редактирование: 12 Апрель 2022, 18:20 от sokol92 » Записан

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

Сообщений: 1 672


« Ответ #19: 13 Апрель 2022, 08:44 »

хочу отловить ENTER

Пользователя придется как-то дополнительно заставлять нажимать Enter в поле, сам он это будет делать через раз.

К примеру, в 1С самое популярное "нажатие Enter в поле", скажем, в карточке контрагента с ИНН - приводит к загрузке данных из ЕГРЮЛ, что зримо и обязательно для продолжения. 
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
mikekaganski
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 2 726


« Ответ #20: 13 Апрель 2022, 08:59 »

Я хочу отловить ENTER, а это, как я понял, без слушателя никак


В этой теме, упомянутой в ответе #5, описаны два подхода: и использование кнопки по умолчанию (ответ #18), и использование события key pressed с проверкой

Код:
   if oEvent.KeyCode = com.sun.star.awt.Key.RETURN then

и в обоих случаях никакого слушателя не требуется...
Записан

С уважением,
Михаил Каганский
Ириминаге
Всем бобра!
Участник
**
Offline Offline

Сообщений: 49


« Ответ #21: 13 Апрель 2022, 09:15 »

Возвращаемся к стартовому сообщению.
Если Вы хотите при нажатии на Enter в текстовом поле заканчивать ввод и закрывать диалог, то нужно:
1. Установить для текстового поля свойство "Многострочный ввод": "Нет"
2. Установить для кнопки OK свойства "Тип кнопки" : "OK" и "Кнопка по умолчанию" : "Да".
Мой бывший начальник отдела говаривал: Возможно всё! Только надо время от времени останавливаться и думать: "А не херню ли я делаю?"

Вот судя по вашему ответу, я полез нагромождать конструкции, там где их быть не должно. Спасибо!
Записан

Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...
eeigor
Опытный пользователь
***
Offline Offline

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


« Ответ #22: 13 Апрель 2022, 16:27 »

На этот случай есть бритва Оккама: «Не следует множить сущее без необходимости». Но мне мой преподаватель говорил так: «Делай проще, дурак! Я сам так делаю».
Записан

Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
Страниц: « 1 2   Вверх
  Печать  
 
Перейти в:  

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