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

Ваш аккаунт

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

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

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

Как отследить конец ввода в TEdit'e?

466
02 декабря 2002 года
Helg
36 / / 20.02.2000
У меня есть MaskEdit1, в котором я ввожу дату. Соответственно у меня есть MaskEdit2, в котором вводится время. Хочется, чтобы при вводе последней цифры года (8й символ в строке) фокус переходил в времени. То есть когда курсор переходит с 7й позиции на 8ю надо перекидывать фокус на другой маскедит.

Как именно это можно сделать попроще?
1.7K
02 декабря 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by Helg
У меня есть MaskEdit1, в котором я ввожу дату. Соответственно у меня есть MaskEdit2, в котором вводится время. Хочется, чтобы при вводе последней цифры года (8й символ в строке) фокус переходил в времени. То есть когда курсор переходит с 7й позиции на 8ю надо перекидывать фокус на другой маскедит.

Как именно это можно сделать попроще?



В событии OnChange первого едита считать количество символов в свойстве Text (не забывая делать ему .Trim()) и по достижению нужной длины делать MaskEdit2->SetFocus()

466
02 декабря 2002 года
Helg
36 / / 20.02.2000
Цитата:
Originally posted by Mark


В событии OnChange первого едита считать количество символов в свойстве Text (не забывая делать ему .Trim()) и по достижению нужной длины делать MaskEdit2->SetFocus()



Дело в том, что у меня это маск-едит, и там маска стоит типа такой: __.__.__, что уже 8 символов. И потом, нужно, чтобы пользователь мог редактировать вручную например только число, или месяц, и чтобы его не перекидывало после каждого набранного символа...

Единственное, что я могу так более менее нормальное придумать, так это смотреть на каждый онchange и сравнивать даты, если различаются только на год, то значит пользователь только что отредактировал дату... Но это извращение, должен же быть более красивый способ...

1.7K
03 декабря 2002 года
Mark
114 / / 21.11.2002
О как... То есть мы ловим ситуацию "пользователь решил, что ввод закончен"? Вот в первом варианте было понятно: поле заполнено (по маске) - значит ввод закончен. А теперь: в заполенном поле пользователь меняет произвольное число символов и, судя по всему, произвольное время.

Может лучше упростить? Например, если поле пустое, то по предыдущему алгоритму. Если непустое, то без всяких прибамбасов: надоело редактировать - жмакни по другому контролю.
466
03 декабря 2002 года
Helg
36 / / 20.02.2000
нет, мы не ловим ситуацию, когда пользователь решит, что он закончил... Если бы все так было просто, можно и таб юзверя жать...

Пример: Вот когда заполняется тот же licence code в том же билдере при инсталяшке, то когда мы вводим первую группу цифр фокус автоматически передается на след контрол.

Лень пробовать сейчас, но мне кажется там по такому принципу: когда пользователь вводит 4eb1, то когда жмет 1, то фокус переходит на другой контрол. Если теперь юзверь опять вводит чего-то в первом едите (с нажатым инсертом), то фокус не передается, пока пользователь не перепишет четвертую цифру (то есть где "1") и только тогда фокус уходит...

Вот так я хочу...
442
03 декабря 2002 года
HexoGenus
121 / / 20.03.2000
Цитата:
Originally posted by Helg


Дело в том, что у меня это маск-едит, и там маска стоит типа такой: __.__.__, что уже 8 символов. И потом, нужно, чтобы пользователь мог редактировать вручную например только число, или месяц, и чтобы его не перекидывало после каждого набранного символа...

Единственное, что я могу так более менее нормальное придумать, так это смотреть на каждый онchange и сравнивать даты, если различаются только на год, то значит пользователь только что отредактировал дату... Но это извращение, должен же быть более красивый способ...



А если так :
при выводе формы на экран bool EditMask=false;
а в онchange :
если год содержит две цифры и EditMask==false
{
передать фокус другому полю
EditMask==true
}

В результате при первом вводе после набора двух цифр года фокус передается а если пользователю захотелось отредактировать поле уже после этого то флаг ему в руки но перекидывать его мы уже никуда не будем...

466
03 декабря 2002 года
Helg
36 / / 20.02.2000
Цитата:
Originally posted by HexoGenus


А если так :
при выводе формы на экран bool EditMask=false;
а в онchange :
если год содержит две цифры и EditMask==false
{
передать фокус другому полю
EditMask==true
}

В результате при первом вводе после набора двух цифр года фокус передается а если пользователю захотелось отредактировать поле уже после этого то флаг ему в руки но перекидывать его мы уже никуда не будем...



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

Наверно идейно правильно...

О! сделал так, и все заработало как надо :)

Всем спасибо! :)

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