Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Маска номера счета / 16 сообщений из 16, страница 1 из 1
27.12.2006, 12:56
    #34227647
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
На форме есть текстбокс в который необходимо ввести номер счёта. Счёт начинается с 407. Если поставить маску: 40799999999999999999, то на форме все '9' станут пробелами. А можно как-то их сделать например 'x' и при наборе заменять символ 'x' на введёную цифру? Причём должен сохраняться контроль на ввод именно цифр, а не символов.
...
Рейтинг: 0 / 0
27.12.2006, 13:06
    #34227685
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
на форме
должен быть не один текстбокс а 6
999 99 999 9 9999 9999999

3 цифры - сч.первого порядка
2 цифры - сч.2-го порядка
3 цыфры - валюта
1- контролька-ключ
4 - код банка
7 - счет 3-го порядка

по контрольке нужно проверять счет
...
Рейтинг: 0 / 0
27.12.2006, 13:08
    #34227691
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
repl tt with '407xxxxxxxxxxx...'

inputmask = '999999999...'
...
Рейтинг: 0 / 0
27.12.2006, 14:08
    #34227926
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
Да на разряды разбивать не обязательно, итак введут счёт нормально.
...
Рейтинг: 0 / 0
27.12.2006, 14:26
    #34228014
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
пожалей тетенек
глаза сломают
...
Рейтинг: 0 / 0
27.12.2006, 17:24
    #34228685
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
Ладно, тогда пойдём другим путём:
Ставлю на KeyPress код:
Код: plaintext
1.
2.
IF EMPTY(This.Value) AND nKeyCode <>  52  THEN
	MESSAGEBOX('Счёт должен начинаться с "4".', 0 , 'Внимание!')
ENDIF 
Вопрос: как обнулить неправильно введёное значение и вернуть курсор на это поле?
...
Рейтинг: 0 / 0
27.12.2006, 18:03
    #34228796
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
сделайте класс-контейнер
в него суньте несколько текстбоксов

методы ему понаделайте
из 20 знаков - значения контролам присвойте
и метод складывающий это взад

дальше каждому контролу соответсвующие валиды опишите

и всего делов
...
Рейтинг: 0 / 0
27.12.2006, 18:06
    #34228807
alvao
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
Определяете класс, у которого части счёта - свойства. Определяете для этого класса метод Clear(), в котором очищаете все нужные свойства. Можно также определить свойство "Весь номер счёта" и Access-метод к нему, в котором собирать весь счёт, а в Assign-Методе разбирать весь номер на составляющие.
Ну и сам визуальный элемент лучше всего оформить в виде объекта типа контейнер, который потом можно смело бросать на форму. Курсор на нужное поле устанавливается с помощью SetFocus().
А вообще-то в том случае, когда пользователь ввёл некорректное значение, недружелюбно по отношению к пользователю очищать введенное значение. Представьте сколько новых слов Вы сможете придумать когда Вы ввели 20 символов, а доблестная система обнаружила ошибку и напрочь всё очистила, давай, мол, вводи заново. Правильно было бы: 1. Подсветить поле ввода, например, красным цветом; 2. Где-нибудь на форме поместить надпись "Введено некорректное значение номера счёта".
...
Рейтинг: 0 / 0
27.12.2006, 20:07
    #34229025
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
Igrok4Ладно, тогда пойдём другим путём:
Ставлю на KeyPress код:
Код: plaintext
1.
2.
IF EMPTY(This.Value) AND nKeyCode <>  52  THEN
	MESSAGEBOX('Счёт должен начинаться с "4".', 0 , 'Внимание!')
ENDIF 
Вопрос: как обнулить неправильно введёное значение и вернуть курсор на это поле?

Код: plaintext
1.
2.
3.
4.
5.
* на KeyPress код:
IF This.SelStart= 0  AND CHR(nKeyCode)<>"4"
	NODEFAULT
	MESSAGEBOX('Счёт должен начинаться с "4".', 0 , 'Внимание!')
ENDIF

Только не забудь еще РАЗРЕШИТЬ использование клавишь со стрелками, Tab, Del, BackSpace, Enter. Все это в сочетании с разными комбинациями Ctrl, Alt, Shift.

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

Поставить указатель на нужный символ можно по SelStart. Нумерация позиций начинается с нуля.
...
Рейтинг: 0 / 0
28.12.2006, 16:06
    #34230922
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
ВладимирМ
Большое спасибо!
Решил всё-таки не париться и проверять поле после ввода. Но Ваш примерчик пригодиться, взял его на заметку.

Теперь возникла другая проблема: на форме есть свойство, в котором и проверяются все поля. Если всё правильно, то свойство .Т., иначе .F.

Код: plaintext
1.
2.
3.
4.
IF LEFT(.cTop.tAcnt.Value, 1 ) <> '4' THEN 
         MESSAGEBOX('Счёт должен начинаться с "4"', 0 ,'Внимание!')
         .cTop.tAcnt.SetFocus
         RETURN .F.
ENDIF
Так вот, при нажатии на кнопку OK в сообщении фокус иногда встаёт в нужное поле tAcnt, а иногда перескакивает в следующее. С чем это связано так и не могу понять :(
...
Рейтинг: 0 / 0
28.12.2006, 17:04
    #34231099
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
Igrok4Так вот, при нажатии на кнопку OK в сообщении фокус иногда встаёт в нужное поле tAcnt, а иногда перескакивает в следующее. С чем это связано так и не могу понять :(
А где (в каком методе) этот код отрабатывает? Случайно не в KeyPress? Тогда надо подавить реакцию на нажатие клавиши командой NODEFAULT иначе после отработки кода отработает и нажатие соответсвующей клавиши.

Код: plaintext
1.
2.
3.
IF ...
	NODEFAULT
	MessageBox(...)
ENDIF
...
Рейтинг: 0 / 0
28.12.2006, 17:20
    #34231156
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
Нет, к форме добавлен метод CheckFields, в котором и описаны все контроли.
Метод выполняется при нажатии кнопки "записать" на форме. Если он возвращает истину, происходит запись в базу.
...
Рейтинг: 0 / 0
28.12.2006, 17:22
    #34231165
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
Не правильно написал в посте:
авторТеперь возникла другая проблема: на форме есть свойство, в котором и проверяются все поля. Если всё правильно, то свойство .Т., иначе .F.
Это метод, а не свойство.
...
Рейтинг: 0 / 0
28.12.2006, 17:45
    #34231228
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
По Object.SetFocus() отработает еще и Object.When() и Object.GotFocus(). Там никакого кода нет?

"Сам по себе" фокус перескакивать не может. Либо в буфере клавиатуры осталась нажатая клавиша (например, несколько раз нажали клавишу Enter для закрытия MessageBox), либо есть какой-то дополнительный код принудительно переводящий фокус на другой объект.

Ну, еще возможно Object.Enabled = .F. Тогда объект просто не может получить фокус и команда SetFocus() игнорируется.
...
Рейтинг: 0 / 0
29.12.2006, 10:05
    #34232040
Igrok4
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
Блин, понял в чём фишка! Но не понял как исправить :(
На форме есть кнопка "Записать", а на событие KeyPress в последнем поле ввода на форме стоит код:
Код: plaintext
1.
2.
IF nKeyCode =  13  THEN
	ThisForm.cOk.Click 
ENDIF
Т.е. по нажатию Enter, срабатывает событие нажатие кнопки "Записать". Таким образом можно записать операцию двумя способами (пережитки старого АРМа, от которого отказываться не хотят).
Так вот, если в последнем поле ввода нажать Enter, тогда фокус перескочит на одно поле вперёд.
А если ввести в последнее поле данные, а потом кликнуть мышкой на кнопку "Записать", тогда фокус встаёт в указанное поле.
И как с этим бороться?
...
Рейтинг: 0 / 0
29.12.2006, 11:22
    #34232271
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Маска номера счета
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
* Событие KeyPress
IF nKeyCode =  13  THEN
	* Отменяем "штатное" действие по нажатию данной клавиши
	* В данном случае - переход на следующий объект
	NODEFAULT

	* Выполняем необходимые действия
	ThisForm.cOk.Click()
ENDIF
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Маска номера счета / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]