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

[Отклонение] Фильтрация текста не корректно работает с регистром


haword

Вопрос

Глюки на глюках. Проблема в том что LowerCase который используется в TSearchBox не преобразовывает буквы в нижний регистр но зато вводимые данные в поиск преобразовываются в нижний регистр. 

 
Lower := Text.Trim.ToLower; - введенный текст в нижем регистре
LowerCase(X).Contains(Lower); не может найти текст так как регистр не поменялся для X
 
Есть в ListView строка с текстом "Ярослав". При вводе в поле поиска текста "Яро", он преобразовывается в нижний регистр и получается "яро".  далее ищется вхождение "яро" слове "Ярослав", не находит и поле попадает под фильтр. 
 
Решение:
заменяем 
LowerCase(X).Contains(Lower);
на
X.ToLower.Contains(Lower);
Ссылка на комментарий

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

  • 0
  • Администраторы

Как правильно написал haword, да, такая ошибка есть в XE7. Она уже была локально устранена. 

 

Решения для всех у кого XE7. Найти файл FMX.SearchBox.pas, заменить код:

procedure TSearchBoxModel.DoChangeTracking;
var
  Lower: string;
begin
  inherited;
  Lower := Text.Trim.ToLower;
  if SearchResponder <> nil then
    SearchResponder.SetFilterPredicate(
      function (X: string): Boolean
      begin
        Result := Lower.IsEmpty or LowerCase(X).Contains(Lower);
      end);
end;

На:

procedure TSearchBoxModel.DoChangeTracking;
var
  Lower: string;
begin
  inherited;
  Lower := Text.Trim.ToLower;
  if SearchResponder <> nil then
    SearchResponder.SetFilterPredicate(
      function (X: string): Boolean
      begin
        Result := Lower.IsEmpty or X.ToLower.Contains(Lower); // <-- заменить LowerCase на ToLower
      end);
end;

И добавить этот файл в ваш проект

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...