Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

заполнение TEdit, если есть записи, начинающиеся с уже введенных символов

48K
31 июля 2010 года
Rio9
16 / / 28.10.2009
Всем привет.
Есть ADO-таблица, в которой, разумеется, хранятся какие-то данные.
На форме есть TEdit в которое вводится название страны. Дальше требуется следующее.

Например хотим ввести "Россия". Вводим "Р", если в БД уже есть такое значение - оно должно добавляться в TEdit, а часть [оссия] должна быть выделена. Кажется понятно объяснил.

Делаю по событию OnChange след. образом:
 
Код:
TLocateOptions opt;
   opt << loCaseInsensitive << loPartialKey;
   if(dm->Table->Locate("ACountry",txtCountry->Text,opt))
   {
      int pos = txtCountry->Text.Length();
      txtCountry->Text = dm->Table->FieldByName("ACountry")->AsString;
      txtCountry->SelStart = pos;
      txtCountry->SelLength = txtCountry->Text.Length();
   }


Заполнение работает правильно, но если к примеру ввести первую букву "Р", передумать и нажать backspace - ничего не произойдет, потому что удаляется часть [оссия] (так как она выделена), срабатывает событие OnChange ---> снова добавляется удаленная часть.

Жду советов.
253
31 июля 2010 года
Proger_XP
1.5K / / 07.08.2004
Ну, так ловите в OnKeyUp VK_BACKSPACE и ставьтте флаг, который затем читайте в OnChange и не делайте ничего, если он стоял.

Можно обойтись и одним OnChange, хотя я бы так делать не стал - завести строковую переменную с предыдущим значением TEdit (в предыдущем OnChange) и изменять её в конце OnChange. Тогда можно сравнить текущую и предыдущую строки и выяснить, надо автодополнять или нет (самое просто, например, если в старая строка была короче/равна новой, а также если старая содержалась (Pos) в новой).
48K
31 июля 2010 года
Rio9
16 / / 28.10.2009
Цитата: Proger_XP
Ну, так ловите в OnKeyUp VK_BACKSPACE и ставьтте флаг, который затем читайте в OnChange и не делайте ничего, если он стоял.



Блин... Почему я не догадался...
Спасибо, сделал.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог