Перейти к содержанию
  • 0
Bohdan

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

Вопросы

Всем Привет!

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

Отредактировал Bohdan

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


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

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

  • 0

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

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


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

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


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

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

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

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

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

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

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

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

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


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

    • От Martifan
      здравствуйте, я пытаюсь сделать push уведомление на iOS делаю следующим образом:
      unit Unit1; interface uses   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,   System.PushNotification, FMX.Controls.Presentation, FMX.StdCtrls,   FMX.PushNotification.iOS, FMX.ScrollBox, FMX.Memo; type   TForm1 = class(TForm)     Button1: TButton;     Memo1: TMemo;     procedure Button1Click(Sender: TObject);   private     { Private declarations }     FDeviceID: string;     FDeviceToken: string;     FPushService: TPushService;     FPushServiceConnection: TPushServiceConnection;     procedure OnReceiveNotificationEvent(Sender: TObject;        const ANotification: TPushServiceNotification);     procedure OnServiceConnectionChange(Sender: TObject;        AChange: TPushService.TChanges);   public     { Public declarations }   end; var   Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); begin   FPushService := Nil;   FPushServiceConnection := Nil;   FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.APS);   if Assigned(FPushService) then     begin       FPushServiceConnection := TPushServiceConnection.Create(FPushService);       FPushServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent;       FPushServiceConnection.OnChange := OnServiceConnectionChange;       FPushServiceConnection.Active := True;     end else     Begin       ShowMessage('False');     End; end; procedure TForm1.OnReceiveNotificationEvent(Sender: TObject;   const ANotification: TPushServiceNotification); begin //  ShowMessage('OnReceiveNotificationEvent'); end; procedure TForm1.OnServiceConnectionChange(Sender: TObject;   AChange: TPushService.TChanges); begin   Memo1.Lines.Clear;   if (TPushService.TChange.DeviceToken in AChange) and        Assigned(FPushServiceConnection) then      begin        FDeviceID := FPushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID];        FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];        // save token and ID to  remote db here        Memo1.Lines.Add('DeviceID: '+FDeviceID);        Memo1.Lines.Add('DeviceToken: '+FDeviceToken);      end; end; end. все проходит нормально но получаю значение FDeviceID а значение FDeviceToken пустой все сертификаты установлены правильно и соответственно указана все правильно как я говорил перемен FDeviceID получает значение а
      FDeviceToken возвращается пустым на форумах тоже видел такую проблему но может кто то решал эту проблему?
      поделитесь пожалуйста
      заранее спасибо 
    • От Эрик Шакиров
      Подскажите пожалуйста, возможно ли сделать выбор файла в IOS. Например, также как в Android 
    • От Eric Myval
      Сегодня начал разбираться с компиляцией под Mac и под iOS и сразу столкнулся с проблемами. Использую Rad Studio 10.3.3, Mac Mini 10.15.1, Windows 10. PAServer20.0, Xcode 11.2.1 Выдает следующую ошибку на всех платформах, как iOS, так и iOS Simulator, macOS32 - 
      Unable to launch process on '192.168.8.182' using the parameters from the 'MacMini' profile. The following error was returned: 'Unable to create process: /Applications/PAServer-20.0.app/Contents/MacOS/dbkosx_26_0 Получается собрать проект только в macOS64, но! Приложения запускаются, работают, но после их закрытия в отладке, пишет, что ПО устаревшие и кидает ссылку на переход с 32 на 64. Но как так? Оно же собрано на 64х))) В общем, полный тупик и убил весь день. Есть идеи? 
    • От Wolfone
      Всем день добрый.
      Есть проблема с TEdit и TLabel, искажает текст дорисовывает линии с верху или с боку каждого символа.
      Пробовал через стили перерисовать, меняется все кроме текста(проблема не уходит),
      в чистом приложении глюк отсутствует.
      RAD 10.3.[1,2,3] на всех трех одинаковая проблема.
      Подскажите куда капать?

    • От Сергей Сергеев
      Обнаружил глюк, как исправить - не нашел, по вот этому обсуждению на Embe - похоже он с 15 года..
      https://forums.embarcadero.com/thread.jspa?threadID=116534
      Выглядит так, взял из примера WebBrowser, прописал в дизайне адрес, к примеру Яндекс,
      и запускаю на Ифоне 5 - нажимаю Гоу, при клике на любой ссылке ( например на большой надписи Яндекс в центре), вдруг откдуда не возьмись - появляется клава - английская,
       
       
       
      которая Done, ничего никуда не вводит, и не прячется от слова Никак ( с экрана)
      дальше - тапаем в поле ввода поиска, вылазит похоже еще одна, уже похоже ФМХ клава - со словом Готово, которая работает..
      переключается и по готово - прячется.
       
       
       
       
      но после того как Готово спряталась - эта ( от Сафари чтоли ) остается, по Доне не скрывается, и при кликах по ссылкам - прячется и опять вылазит..
       
      сделал то что написано в обсуждении, но это прячется только второй ( Доне)ТулБар - клавы две так и висят..
      Ничего по теме не нашел, похоже глюк старый, и возможно уже решенный..
      пс.  клавиатуры не две все таки, два тул бара, повесил на он хайд, он Шоу обработчики, происходит следующее, по Готово - прячется клава и сразу опять показывается уже без "готово" - с "доне".. она же сразу показывается при клике по ссылке..
       
    • От Сергей Сергеев
      Приветствую всех!
      Сделал приложение для Андроид, делал свой стиль в BSD  - освоил добавление ( копированием ) панелей и чекбоксов со своими картинками.
      В принципе, все получилось, на разным смартфонах работатет - все картинки на месте.
      Но при попытке повторить стиль для Ios обнаружилась проблема, стиль для iPhone 5 ( scale 2) - все ок, но  Iphone 6+ ( scale 3) - все картинки из стиля на панельках и чек боксах берутся со смещением ( примерно 30%).
      Т.е. указана координата левого верхнего угла  в файле скажем 300 по Х, берется 400 . н у итак далее.. натыкался на тексты, что для IOS - разрешение 3х - поддерживают не все стили. Может в этом дело? никто не сталкивался?
      Попутно обнаружил, что при редактировании стиля IOS в BSD - не создаются новые обьекты в файле .style , при этом, при редактировании стиля Андроид - все нормально создается. 
      вав проверил ! и в Андроид перестало сохряняться в style файле! но полгода назад в 10.3 - все работала.. стиль то для андроид я именно так сделал ( примерно в феврале)
      Например:
      в BSD делаю - File - New - New Ios Style

      делаю копию обьекта Panel

      копия создается Panel_copy, в файле vsf - сохраняется, но при сохранении стиля для FMX, ( Save as .style) - обьекта в файле нет, причем как Panel, так и Panel_Copy

       
      если проделать, так же в стиле для Андроид Лайт, то обьект добавляется в конец файла..  ( Уже не делается и для Андроида)
        а здесь нет - последний icon.. и поиском не находится и если загрузить в BookStyle - то стиля Panel_Copy нет.

      про "сьезжающие"  картинке в стиле для Ios 3x - опишу подробнее позже, решение не найдено пока..
       
    • От Евгений Корепов
      Подскажите, реально ли в текущий момент сделать рекламу в iOS приложениях? 
      Документация эмбаркадеры, вроде и современная (http://docwiki.embarcadero.com/RADStudio/Rio/en/Using_the_AdMob_Service в примеру), но пометка внизу страниц "This page was last edited on 28 September 2015, at 15:17." дает понять что они забили на этот раздел документации 4 года назад, и с выходом Rio тупо скопипастили, чтоб было. Издевательство какое то (
       
      P.S. В документации идет речь о iAd, но согласно Apple:
      About the iAd App Network Shutdown : As of December 31, 2016, the iAd App Network is no longer available.
       
       
    • От Паршенко Виктор
      Доброго времени суток.
      Возникла проблема с использование TLocationSensor в Delphi 10.3 Rio под iOS. 
      Открыл, скомпилировал и установил приложение LocationDemo взятое из примеров.
      Device: iPhone 7+, version ios: 12.1.3. 
      При запуске, приложение запросило разрешение на доступ к геолокации (разумеется разрешил)
      Индикатор локации в верхнем баре показал, что его сейчас используют, но само приложение не реагирует на это никак. В частности событие OnChangeLocation не срабатывает у TLocationSensor. 
      Что делал я, чтоб попытаться устранить эту проблему:
      - скомпилировал этот же проект под Android (пример рабочий, Android отреагировал и показал мне местоположение)
      - внес изменения в системные юниты по рабочему примеру : 
      - открывал любые другие приложения, которые используют геолокацию (успешно находит и показывает мое местоположение)
      У меня закончились идеи, почему не работает TLocationSensor на iOS.
      P.S. не проверял компиляцию на версии делфи по ниже (10.2.3, 10.2 ... ). 
      Для красоты эксперимента, есть тут кто на Rio использовал геолокацию для iOS, у вас работает? 
       
    • От void
      Добрый день.
      (Delphi 10.3)
      (XCode 10.1)

      Подключил статический framework на версии SDK 11.2 (macMini)
      как описано в:
      ВСЕ ЗАРАБОТАЛО!
       
       

      После обновления:
      1) macMini к
              XCode 10.1
              SDK 12.1
              PAServer 20.0
      2) windows
              PAServer 20.0
      3) PAServer - конектится
      4) прописал дополнительные SDK  (Delphi -> SDK Manager -> Properties)
      5) Получил SDK 12 на windows (Delphi -> Update Local File Cache)
      6) Пути в Linking изменил для SDK12

      При сборке выдает ОШИБКУ:
      [DCC Error] E2597 Undefined symbols for architecture arm64 (для 32 - armv7):...

      [DCC Fatal Error] F2588 Linker error code: 1 ($00000001)

      Кто нибудь сталкивался с такой ошибкой после обновления?
       
    • От FREEFAR
      Всем доброго времени суток. 
      Казалось бы. Во время разработки и перед тем как подписали приложение сертификатом Distribution, пуши приходили норм. Но после того как прошли аудит Apple пуши куда-то пропали. FCM возвращал ошибку InvalidRegistration.
      Оказалось все достаточно просто. На сервере с которого мы отправляем пуш, В php скрипте, который отправляет пуши надо выставить
      sandbox = false
      Ура! Всем удачи)
  • Последние посетители   0 пользователей онлайн

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

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