Как отследить конец ввода в TEdit'e?
Как именно это можно сделать попроще?
У меня есть MaskEdit1, в котором я ввожу дату. Соответственно у меня есть MaskEdit2, в котором вводится время. Хочется, чтобы при вводе последней цифры года (8й символ в строке) фокус переходил в времени. То есть когда курсор переходит с 7й позиции на 8ю надо перекидывать фокус на другой маскедит.
Как именно это можно сделать попроще?
В событии OnChange первого едита считать количество символов в свойстве Text (не забывая делать ему .Trim()) и по достижению нужной длины делать MaskEdit2->SetFocus()
В событии OnChange первого едита считать количество символов в свойстве Text (не забывая делать ему .Trim()) и по достижению нужной длины делать MaskEdit2->SetFocus()
Дело в том, что у меня это маск-едит, и там маска стоит типа такой: __.__.__, что уже 8 символов. И потом, нужно, чтобы пользователь мог редактировать вручную например только число, или месяц, и чтобы его не перекидывало после каждого набранного символа...
Единственное, что я могу так более менее нормальное придумать, так это смотреть на каждый онchange и сравнивать даты, если различаются только на год, то значит пользователь только что отредактировал дату... Но это извращение, должен же быть более красивый способ...
Может лучше упростить? Например, если поле пустое, то по предыдущему алгоритму. Если непустое, то без всяких прибамбасов: надоело редактировать - жмакни по другому контролю.
Пример: Вот когда заполняется тот же licence code в том же билдере при инсталяшке, то когда мы вводим первую группу цифр фокус автоматически передается на след контрол.
Лень пробовать сейчас, но мне кажется там по такому принципу: когда пользователь вводит 4eb1, то когда жмет 1, то фокус переходит на другой контрол. Если теперь юзверь опять вводит чего-то в первом едите (с нажатым инсертом), то фокус не передается, пока пользователь не перепишет четвертую цифру (то есть где "1") и только тогда фокус уходит...
Вот так я хочу...
Дело в том, что у меня это маск-едит, и там маска стоит типа такой: __.__.__, что уже 8 символов. И потом, нужно, чтобы пользователь мог редактировать вручную например только число, или месяц, и чтобы его не перекидывало после каждого набранного символа...
Единственное, что я могу так более менее нормальное придумать, так это смотреть на каждый онchange и сравнивать даты, если различаются только на год, то значит пользователь только что отредактировал дату... Но это извращение, должен же быть более красивый способ...
А если так :
при выводе формы на экран bool EditMask=false;
а в онchange :
если год содержит две цифры и EditMask==false
{
передать фокус другому полю
EditMask==true
}
В результате при первом вводе после набора двух цифр года фокус передается а если пользователю захотелось отредактировать поле уже после этого то флаг ему в руки но перекидывать его мы уже никуда не будем...
А если так :
при выводе формы на экран bool EditMask=false;
а в онchange :
если год содержит две цифры и EditMask==false
{
передать фокус другому полю
EditMask==true
}
В результате при первом вводе после набора двух цифр года фокус передается а если пользователю захотелось отредактировать поле уже после этого то флаг ему в руки но перекидывать его мы уже никуда не будем...
ну да, и мне кажется, что надо наверно смотреть на последний символ в строке. Если он меняется ан более другой, то в таком случае кидаем фокус.
Наверно идейно правильно...
О! сделал так, и все заработало как надо :)
Всем спасибо! :)