Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 678

/ вопрос открыт /

Здравствуйте!
У меня есть проблема при форматировании окна с маской типа TEditMask. Если считывать число из маски как .Text, то после записи этого числа в таблицу базы данных и последующем извлечении в окне маски появляется текст со сдвинутой целой частью. Например при маске !9999,99;1;_ в окно вводится число 22,1, оно правильно записывается в базу данных, но при извлечении из базы в окне маски возникает такой текст 22 , 1(или 2200,01 если маска !9999,99;1;0), который при последующей записи приводит к возникновению ошибки (функция strtoreal не воспринимает такую запись как число) или записывается ложное число. При попытке использовать представление маски как .Edit text, возникает другая проблема, при считывании из базы пустой записи или при попытке внесения новой записи в окне не отражается формат маски. например в предыдущей маске в окне невозможно записать дробную часть, а если считывается запись 22,1, то добавить второй знак в дробную часть невозможно.
Вопрос - есть ли какие-то стандартные процедуры, которые позволяют обрабатывать значение маски без вышеуказанных проблем или посоветуйте как выйти из этой ситуации.
Ниже приведены два варианта вывода значения и записи в базу данных

Приложение:
  1. nomvolt2.EditText:=floattostrf(frmchoise.ADOTable2.Fields[88].AsFloat,fffixed,7,2);
  2. frmchoise.ADOTable2.Fields[88].AsFloat:=strtofloat(nomvolt2.EditText);
  3.  
  4. nomvolt2.Text:=floattostrf(frmchoise.ADOTable2.Fields[88].AsFloat,fffixed,7,2);
  5. frmchoise.ADOTable2.Fields[88].AsFloat:=strtofloat(nomvolt2.Text);


sergey vasilev Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: sergey vasilev (статус: Посетитель)
Вопрос отправлен: 23 января 2010, 19:34
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 24 января 2010, 09:02; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 23 января 2010, 19:44 [#1]:

Никогда не уважал компонент TMaskEdit, всегда юзал просто TEdit с последующим контролем введённой информации. Чего и тебе советую: геморроя меньше будет.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Егор

Егор (статус: 10-ый класс), 23 января 2010, 20:40 [#2]:

кстати, в предыдущем вопросе 3677 дан код, как в обычный Edit можно записывать только правильно оформленные вещественные числа - как раз данный случай
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
sergey vasilev

sergey vasilev (статус: Посетитель), 23 января 2010, 21:55 [#3]:

А как задать обработчик Tedit(Sender)?
min@y™

min@y™ (статус: Доктор наук), 23 января 2010, 22:15 [#4]:

Ну, например на OnExit повесь проверку правильности введённого текста.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
sergey vasilev

sergey vasilev (статус: Посетитель), 23 января 2010, 22:22 [#5]:

и это на каждое поле делать процедуру? У меня этих полей очень много. А попроще ничего нет.
min@y™

min@y™ (статус: Доктор наук), 24 января 2010, 09:02 [#6]:

Цитата (sergey vasilev):

и это на каждое поле делать процедуру?

Нет, надо сделать один обработчик для всех эдитов.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:54
Выполнено за 0.03 сек.