Перейти к содержанию
Fire Monkey от А до Я
  • 0

TEdit проблема с установка фокуса и его снятием


Bohdan

Вопрос

Всем Привет!

Платформа ios Delphi 10.2.2, хочу при нажатии на label показывать edit (для редактирования label.) Столкнулся с проблемой:
 Как отследить Tap  за пределами Edit чтобы его скрыть, не могу понять как это сделать.

Изменено пользователем Bohdan
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
6 минут назад, POV сказал:

я описАлся - я имел в виду OnExit

OnExit срабатывает только если тот на кого "тапнули" может принять фокус (Edit, Memo),  а ToolBar или SpeedButton не принимают фокус и OnExit не возникает.

Ссылка на комментарий
  • 0

Решение следующее:

 Layout который перекрывает всю форму на ней TEdit который позиционируется на то место где он нужен, на Layout обработчик Onclick/OnTap который скрывает Layout и передает результат редактирования назад на форму, 

 

Изменено пользователем Bohdan
Ссылка на комментарий
  • 0
19 часов назад, dnekrasov сказал:

А почему бы просто не сделать стиль для TEdit, который в неактивном виде выглядит как TLabel?

Вот это шикарно!
Все гениальное просто)))

Ссылка на комментарий
  • 0
В 28.08.2018 в 15:21, dnekrasov сказал:

А почему бы просто не сделать стиль для TEdit, который в неактивном виде выглядит как TLabel?

Допусти сделали.

Edit выглядит как Label, делаем Tap на него и он переходит в режим редактирования (выглядит как обычный Edit) как потом его перевести обратно в вид Label  при Tap на ToolBar на котором он лежит? 

Ссылка на комментарий
  • 0
18 часов назад, Bohdan сказал:

Допусти сделали.

Edit выглядит как Label, делаем Tap на него и он переходит в режим редактирования (выглядит как обычный Edit) как потом его перевести обратно в вид Label  при Tap на ToolBar на котором он лежит? 

Установить фокус на другой компонент. Edit потеряет фокус и будет выглядеть как текст.

Пример такого стиля для Edit в аттаче.

Test_LabeledEdit.rar

Ссылка на комментарий
  • 0
1 час назад, Barbanel сказал:

Установить фокус на другой компонент. Edit потеряет фокус и будет выглядеть как текст.

Пример такого стиля для Edit в аттаче.

Test_LabeledEdit.rar

Спасибо за пример.

Если тап сделан над ToolBar который не принимает фокус или на ListBox на место где нет ListBoxItem фокус не переходит с Edit. И Edit будет в режиме редактирования пока не тапнут на то что может принять фокус.

Ссылка на комментарий
  • 0

Я честно не знаю как принудительно убрать фокус у контрола. Может есть такой метод, я не могу в данный момент проверить.

Костыльное решение:
создать дополнительный контрол (например кнопку без обработчика), поместить его за пределы формы, по клику на нужные контролы (листбокс или тулбар) - устанавливать фокус на этот дополнительный контрол.

 

PS смутно припоминаю что вроде как была процедура KillFocus, проверьте.
 

Ссылка на комментарий
  • 0
15 минут назад, Barbanel сказал:

Я честно не знаю как принудительно убрать фокус у контрола. Может есть такой метод, я не могу в данный момент проверить.

Костыльное решение:
создать дополнительный контрол (например кнопку без обработчика), поместить его за пределы формы, по клику на нужные контролы (листбокс или тулбар) - устанавливать фокус на этот дополнительный контрол.

 

PS смутно припоминаю что вроде как была процедура KillFocus, проверьте.
 

Главный вопрос как отловить клик на другой компонет который не принимает фокус и сделать "KillFocous".  Вот ровно для этого нужен Layout на котором лежит Edit который перекрывает всю форму и ловит клик за пределами Edit и переводит все обратно в режим просмотра.

Ссылка на комментарий
  • 0
34 минуты назад, Barbanel сказал:

Я честно не знаю как принудительно убрать фокус у контрола. Может есть такой метод, я не могу в данный момент проверить.

Костыльное решение:
создать дополнительный контрол (например кнопку без обработчика), поместить его за пределы формы, по клику на нужные контролы (листбокс или тулбар) - устанавливать фокус на этот дополнительный контрол.

 

PS смутно припоминаю что вроде как была процедура KillFocus, проверьте.
 

Я в токио использую TEdit.ResetFocus - фокус с edit убирается, событие OnExit срабатывает

Ссылка на комментарий
  • 0
7 минут назад, Tumaso сказал:

Я в токио использую TEdit.ResetFocus - фокус с edit убирается, событие OnExit срабатывает

В ios если тап за пределами Edit считается что редактирование завершено. Обрабатывать все OnClick(OnTap) по всем компонентам которые не принимают фокус на форме и там дергать TEdit.ResetFocus не вариант.

Как определить что нужно вызвать TEdit.ResetFocus?

 

Изменено пользователем Bohdan
Ссылка на комментарий
  • 0

Если я не ошибаюсь, то при KeyPreview=True у формы, с которой вы в данный момент работаете, вы можете в обработчиках формы отлавливать клики и перемещения мыши. Проверьте.

Ссылка на комментарий
  • 0
2 минуты назад, Barbanel сказал:

Если я не ошибаюсь, то при KeyPreview=True у формы, с которой вы в данный момент работаете, вы можете в обработчиках формы отлавливать клики и перемещения мыши. Проверьте.

KeyPreview только для VCL, разработка идет на FMX

Ссылка на комментарий
  • 0

если фокус придет в любой другой компонент, то у этого и так сработает событие
так что остается только обработать тапы в Layout или во что там у вас вставлено все

учитывая небольшое кол-во элементов на экранчиках, это не так страшно

Ссылка на комментарий
  • 0
1 час назад, Bohdan сказал:

В ios если тап за пределами Edit считается что редактирование завершено. Обрабатывать все OnClick(OnTap) по всем компонентам которые не принимают фокус на форме и там дергать TEdit.ResetFocus не вариант.

Как определить что нужно вызвать TEdit.ResetFocus?

 

А что мешает использовать единый обработчик OnTap / OnClick для всех компонентов, которые не принимают фокус на форме?

Ссылка на комментарий
  • 0
1 час назад, krapotkin сказал:

если фокус придет в любой другой компонент, то у этого и так сработает событие
так что остается только обработать тапы в Layout или во что там у вас вставлено все

учитывая небольшое кол-во элементов на экранчиках, это не так страшно

Посмотри логику работы на IOS если элемент в  режиме редактирования. то тап за редактируемым элементом выводит его из режима редактирования, и не активирует другой элемент.

1 час назад, Tumaso сказал:

А что мешает использовать единый обработчик OnTap / OnClick для всех компонентов, которые не принимают фокус на форме?

Коллеги как вы потом буде сопровождать ваше решение (добавить интерфейсные элементы, поменять на другие), нужно будет всегда помнить о добавлении обработчика клик/тап. По поводу количества компонентов подумайте о сложном приложении которое рассчитано на iPad 9 / Pad pro 12", возможно для телефонов ваше предложение годится.

 

Ссылка на комментарий
  • 0
В 24.07.2018 в 16:58, Bohdan сказал:

Столкнулся с проблемой:
 Как отследить Tap  за пределами Edit чтобы его скрыть, не могу понять как это сделать.

Уважаемый, вы видимо забыли свой изначальный вопрос? Ответ вам дан. Дальше все в ваших руках))

Ссылка на комментарий
  • 0
18 минут назад, Tumaso сказал:

Уважаемый, вы видимо забыли свой изначальный вопрос? Ответ вам дан. Дальше все в ваших руках))

Согласен, вопрос был как отследить Тар за пределами Edit, я сделал через Layout все работает ожидаемо и как надо.

После этого пришли коллеги и предложили вариант со стилями которое вылилось в обработать все клики/тапы на контролах которые не принимают фокус для отслеживания потери фокуса Edit. Мне кажется это решение не оптимальным, я начал обсуждения этого варианта, вдруг будет решение проще чем Layout с Edit и одним обработчиком OnClick/OтTap на Layout.

Не понимаю где я вышел за рамки своего вопроса,

Изменено пользователем Bohdan
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...