Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ошибка IndexOutOfBoundsException при нажатии Return в TMemo на Android

Delphi , Компоненты и Классы , Библиотеки компонент

Пользователь Borni столкнулся с проблемой, при которой при нажатии клавиши Return в компоненте TMemo на устройствах под управлением Android возникает ошибка java.lang.IndexOutOfBoundsException. В контексте обсуждения выяснилось, что проблема касается использования фреймворка FMX и затрагивает только устройства Samsung.

Обсуждение проблемы:

  • Borni заметил проблему на устройствах Samsung с Android 14 и 12, а также на Galaxy Tab A с Android 7.1.1.
  • Havrlisan подтвердил воспроизведение исключения на Samsung A52s.
  • Проблема не связана с клавишей Return, а с позицией каретки. Ошибка возникает, когда каретка перемещается на пустую строку с уже существующим символом.

Предложенное решение:

  • Alejandro.sawers обнаружил, что изменение в методе InternalUpdateSelection в файле FMX.Platform.UI.Android.pas позволяет решить проблему. Он предложил заменить вызов FTextView.setSelection(JCharSequenceToStr(FTextView.getText).length) на FTextView.setSelection(SelStart).
  • Marlon Nardi предложил добавить нормализацию индексов выбора перед проверкой, чтобы избежать других исключений:
SelStart := Min(SelStart, JCharSequenceToStr(FTextView.getText).length);
SelEnd := Min(SelEnd, JCharSequenceToStr(FTextView.getText).length);
  • Полный исправленный метод InternalUpdateSelection выглядит следующим образом:
procedure TTextServiceAndroid.InternalUpdateSelection;
var
  SelStart, SelEnd: Integer;
begin
  if FTextView = nil then
    Exit;

  CalculateSelectionBounds(SelStart, SelEnd);

  SelStart := Min(SelStart, JCharSequenceToStr(FTextView.getText).length);
  SelEnd := Min(SelEnd, JCharSequenceToStr(FTextView.getText).length);

  if SelEnd - SelStart > 0 then
    FTextView.setSelection(SelStart, SelEnd)
  else
    FTextView.setSelection(SelStart);
end;

Заключение:

Используя предложенные изменения, разработчики могут устранить проблему IndexOutOfBoundsException при работе с TMemo в FMX на устройствах Samsung. Важно учитывать, что изменения могут потребовать дополнительной настройки для обеспечения корректной работы в различных сценариях использования.

При написании статьи были использованы примеры кода на Object Pascal, что соответствует основной тематике сайта, связанной с Delphi и Pascal.

Создано по материалам из источника по ссылке.

Пользователь сталкивается с исключением `IndexOutOfBoundsException` при работе с компонентом `TMemo` в FMX на устройствах Samsung под управлением Android, и найдено решение в изменении метода `InternalUpdateSelection`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Библиотеки компонент ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 17:14:55/0.0031759738922119/0