Перейти к содержанию
  • 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 эмодзи.

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

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

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


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

    • От Azaz
      Delphi 10.4
      Кидаю TEdit или TMemo на форму, стиль стандартный. При старте выделения текста курсор сменяется с палочки на стандартную стрелку....
      Как воспроизвести: нажать на компонент любой кнопкой мыши и не отпускать кнопку, не двигать мышь. Если сдвинуть мышь в нажатом состоянии или отжать кнопку - курсор восстанавливается
      Никто не решил эту проблему? Копал исходники, но для TEdit там как-то запутанно все...
    • От Azaz
      Delphi 10.4
      Кидаю TEdit или TMemo на форму, стиль стандартный. При старте выделения текста курсор сменяется с палочки на стандартную стрелку....
      Как воспроизвести: нажать на компонент любой кнопкой мыши и не отпускать кнопку, не двигать мышь. Если сдвинуть мышь в нажатом состоянии или отжать кнопку - курсор восстанавливается
    • От Martifan
      Привет,
      подскажите как можно реализовать авторизацию с помощью Apple ID? любые идеи.
      заранее спасибо
    • От Eric Myval
      Добрый день! Я собрал приложение и подготовил IPA файл, заполнил всю информацию, прикрепил все иконки. Когда загружаю приложение в App Store Connect и пытаюсь отправить на проверку, мне выдают следую ошибку:
      В каталог объектов Xcode необходимо добавить значок приложения с разрешение 1024х1024.
      Как это сделать? Уже всю голову сломал... 
       
      Использую Rad Studio 10.3.3 + PAServer 20 + самый свежий Xcode и последняя обнова на маке
      Пробовал и Rad Studio 10.4 + PAServer 21, аналогичная проблема
      Остальные ошибки не важны, их решить легко. Интересен только последний пункт. 

    • От Igor Aleksiyuk
      У кого нибудь вышло это сделать
    • От 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, ничего никуда не вводит, и не прячется от слова Никак ( с экрана)
      дальше - тапаем в поле ввода поиска, вылазит похоже еще одна, уже похоже ФМХ клава - со словом Готово, которая работает..
      переключается и по готово - прячется.
       
       
       
       
      но после того как Готово спряталась - эта ( от Сафари чтоли ) остается, по Доне не скрывается, и при кликах по ссылкам - прячется и опять вылазит..
       
      сделал то что написано в обсуждении, но это прячется только второй ( Доне)ТулБар - клавы две так и висят..
      Ничего по теме не нашел, похоже глюк старый, и возможно уже решенный..
      пс.  клавиатуры не две все таки, два тул бара, повесил на он хайд, он Шоу обработчики, происходит следующее, по Готово - прячется клава и сразу опять показывается уже без "готово" - с "доне".. она же сразу показывается при клике по ссылке..
       
  • Последние посетители   0 пользователей онлайн

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

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