• 0
Bohdan

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

Вопросы

Всем Привет!

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

Изменено пользователем Bohdan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 ответа на этот вопрос

  • 0

а разве onLeave не сработает при этом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Если вы о OnMouseLive на TEdit, то он срабатывает если Tap начался на Edit и вышел за его пределы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
6 минут назад, POV сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Ну так и чего мудрить? "За пределами" - не сотня же компонентов. По нажатию мышки прочих компонентов и скрывай едит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 1

Edit положить на Layout. Настройки у Layout такие, чтобы он занимал весь экран поверх всех компонентов. В Layout.OnTap скрывать Layout

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

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

 

Изменено пользователем Bohdan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 1

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От ENERGY
      Есть большой файл с анимацией, ~3 мб.  
      120 AnimCount - кадров, raws 10, одна картинка 400x400
      Под Android и Windows анимация прекрасно работает.
      Под iOS анимация скачет влево-вправо, или появляються куски предыдущего фрейма (нижней части) в верху текущей анимации.
      Я уже что только не делал, много раз менял файл, создавая его с разными raws, разными размерами картинок. Что-то меняется конечно, но остаются эти эффекты разной интенсивности.
      Файл склеиваю в своей проге из картинок, в финальном файле ошибок нет.
       
      Подскажите куда копать, просто замучался уже..
    • От Martifan
      Добрый день,
      Может ктонибудь помочь разобраться с записью/проигрыванием звука на iOS устройствах? 
      Нужно записывать звук в буффер (массив байтов). Нашли "замечатульную" библиотеку на github, которая позволяет обращаться к нативным методам устройства намрямую, и следуя инструкциям по записи звука в xCode пытаемся собрать тоже самое. Ниже привяжу ссылки... Библиотека мягко говоря не в лучшей кондиции такчто некоторые типы приходилось править вручную, и форматирование не вызывает восторга, но другого выбора нет. Если у когонибудь есть практика с другой библиотекой, или какиенибудь идеи, подскажите пожалуйста. Записывать надо обязательно в буффер, для дальнейшей обработки.
      GitHub библиотека
      Запись звука в xCode - github
      IOS.rar
    • От Martifan
      Всем доброго времени суток
      может кто знает как на iOS распознать речь и получены результат записать текстовом поле
      как на Android сделать я знаю но на iOS не получается
       
      Спасибо за ранее
    • От Astghik
      Hello !!!
      I want onButtonClick create popup. I use TPopup component. All good, but on android "Back button" click closing forma. But I want close popup (when popup is shown).

       
      //---------------------------------------------------------------------------------
      void __fastcall  btn3PointsClick(TObject *Sender)
      {
          PopUpSettings->IsOpen = true;
          PopUpSettings->PlacementTarget = btn3Points;
          PopUpSettings->BringToFront();
      }
      //-------------------------------------------------------------------------------------
      void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose)
      {
          try {
              if (PopUpSettings->IsOpen == true) {
                  CanClose = false;
              }
              else {
                  CanClose = true;
              }
          } __finally {
              PopUpSettings->IsOpen = false;
          }
      }
      //-------------------------------------------------------------------
       
    • От Rokweb
      Здравствуйте.
      Речь пойдёт об Android.
      Использовал в Berlin данный unit для проигрывания звуков (TMediaPlayer не подходит) и все отлично работало. Сейчас перешел на Tokyo и происходит зависание в цикле:
       
      while not GLoaded do begin Sleep(10); Application.ProcessMessages; end;  
      Модуль прикрепил в сообщении.
       
      Так же интересует - возможно ли, использовать стиль, созданный в процессе разработки Android приложения - в iOS и если да - то как это правильно реализовать (почти каждый контрол имеет сейчас свой стиль)?
       
      Прошу помощи.
      GameAudioManager.zip
    • От Edward Tarasov
      поставил этот патч 
      https://cc.embarcadero.com/item/30805
      Версия PAserver на mac стала - 10.1.1.37, test connection отвечает success, но при компиляции выдаеться ошибка - [PAClient Error] Error: E0014 Connection refused. Platform Assistant Server version mismatch - expecting version '10.0.1.23'. 
      10.0.1.23 - это старая версия PA... откатиться нельзя ибо не пашет, тоесть этот патч исправляет старую проблему - но добавляет эту... суть в том, как я понял после 4-х часовго гугления, что надо исправить PAclient, у которого версия почему то осталась старая... кто знает как с этим быть?
    • От tLink
      Всем доброго времени суток,
      Столкнулся с проблемой на iOS. На форме TabControl, на одной из вкладок лежит MapView (примерчик приложил). Если "свернуть/развернуть" приложение и походить по вкладкам, то пропадают иконки у TabControl, показывает как чёрные квадраты. Иконки установлены через ImageList. Такой же эффект и у ListView/Image на соседних вкладках. Можете что-то подсказать?
       
      project1 (2).rar
    • От Tumaso
      Подскажите, каким образом можно прочитать входящее СМС под iOS? Для Android на форуме есть работающий пример, а вот под iOS найти не удалось.
    • От Tumaso
      Столкнулся с неожиданной проблемой в iOS при работе с файлами: любые попытки чтения существующих файлов из System.IOUtils.TPath.GetDocumentsPath и любые попытки чтения/записи файлов в System.IOUtils.TPath.GetHomePath вызывают ошибку access denied. Где что нужно прописать, чтобы решить проблему работы с файлами?
    • От Виталий Иванов
      Есть ли возможность отследить сильное нажатие на элемент ? Долгое нажатие отлавливается, а вот сильное нажатие никак может есть какие-то уловки или это в принципе не возможно ?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу