Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » TEdit и тип AnsiString

Ответить
Настройки темы
TEdit и тип AnsiString

Пользователь


Сообщения: 86
Благодарности: 0

Профиль | Отправить PM | Цитировать


Такая ситуация. Необходимо реализовать проверку введенного юзером значения в поле компонента TEdit на форме. Для этого считывать каждый символ в строке и проверять, является ли он цифрой. В обратном случае выводится сообщение об ошибке. Собственно, есть только один вопрос: как узнать, что достигнут конец строки? В стандарных null-terminated строках строка заканчивается символом '\0', а вот как дела обстоят в типе AnsiString, для меня пока что загадка.
Да, еще: почему в AnsiString, когда необходимо обратиться к первому символу в строке, обращаются к элементу [1], а не [0], как везде в C++?
Спасибо

Отправлено: 00:31, 31-01-2006

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


AnsiString - это притянутая за уши паскалевская строка (они начинаются с единицы). В конце есть '\0', в этом можно убедиться, посмотрев исходник AnsiString::c_str(); Таким образом, есть 2 варианта:
Код: Выделить весь код
AnsiString str=Edit1->text;

// паскалевский или C++ вариант:

unsigned a=1, b=str.length();
for(; a<=b && isdigit(str[a]); ++a) {}
if (a<=b) throw Exception("error: invalid user with curly hands");

// вариант C:
char* base=str.c_str();
while(*base && isdigit(*base++)) {}
if (*base) throw Exception("error: invalid user with curly hands");

Отправлено: 12:16, 31-01-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Старожил


Сообщения: 401
Благодарности: 10

Профиль | Отправить PM | Цитировать


Цитата:
AnsiString - это притянутая за уши паскалевская строка
Предположение - может тогда как в паскале в нулевом байте сидит длина строки?

-------
Успехов.


Отправлено: 13:31, 31-01-2006 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Нет. Размер строк AnsiString превышает 255

Отправлено: 14:20, 02-02-2006 | #4


Аватара для Kroc

Пользователь


Сообщения: 73
Благодарности: 0

Профиль | Отправить PM | Цитировать


А если контролировать в процессе набора?
Прямо по событию нажатия клавиши.

Отправлено: 01:37, 03-02-2006 | #5


Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


А можно просто после нажатия клавиши Enter или любой другой клавиши(впринципе, на любой Event) повесить => код
AnsiString t;
t.ToInt() - вслучае нечислового значения функция выдаст ошибку => перед нами не число...

вот такой "ламерский" спопосб... зато всего 2 строчки...

Отправлено: 01:46, 03-02-2006 | #6

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата:
А если контролировать в процессе набора?
Прямо по событию нажатия клавиши.
Традиционный способ:
Код: Выделить весь код
TMyEdit::perform(TMessage& msg)
{
     if (msg.message!=WM_CHAR || isdigit(msg.wParam))
     {
           TWdit::perform(msg);
     }
};

Отправлено: 12:34, 15-02-2006 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » TEdit и тип AnsiString

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Java - Тип RECORD ManHack Программирование и базы данных 9 01-10-2009 21:55
C/C++ - [решено] int в AnsiString crashtuak Программирование и базы данных 7 30-03-2009 02:11
Разное - Неизвестный тип файла roniro Microsoft Windows 2000/XP 6 06-07-2008 01:00
C/C++ - [решено] Проблема с перекодировкой AnsiString in CHAR vetal_dnepr Программирование и базы данных 5 23-04-2008 11:05
тип сервера? modem Хочу все знать 1 02-03-2003 05:49




 
Переход