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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 4 121

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

Приветствую, уважаемые эксперты! Скажите, пожалуйста, как сделать так, чтобы до тех пор, пока в Edit'е не появится правильное число, фон этого Edit'а был слегка красноватым, а когда число правильное (real) фон становился зеленоватым???

Емельянов Константин Игоревич Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Емельянов Константин Игоревич (статус: Посетитель)
Вопрос отправлен: 6 мая 2010, 04:41
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: DNK

Здравствуйте, Емельянов Константин Игоревич!
У самого была точно такая же задача. В качестве слегка зеленоватого взял clMoneyGreen, для слегка красноватого пришлось придумать свой цвет.

Приложение:
  1. const
  2. CL_RED = $8080FF;
  3. CL_GREEN = clMoneyGreen;
  4.  
  5. function TForm1.IsValid(value: integer): boolean;
  6. begin
  7. ...
  8. end;
  9.  
  10. procedure TForm1.Edit1Change(Sender: TObject);
  11. var edt: TEdit;
  12. begin
  13. edt := Sender as TEdit;
  14. try
  15. if IsValid(StrToInt(edt.Text)) then
  16. edt.Color := CL_GREEN
  17. else
  18. edt.Color := CL_RED;
  19. except
  20. edt.Color := CL_RED;
  21. end;
  22. end;


Ответ отправил: DNK (статус: Студент)
Время отправки: 6 мая 2010, 15:01
Оценка за ответ: 4

Комментарий к оценке: Не могу функцию прописать, которая переключала бы на красный при числе в Edit'е типа "000,123"

Ответ #2. Отвечает эксперт: Егор

Здравствуйте, Емельянов Константин Игоревич!
Можно воспользоваться функцией TryStrToFloat, которая возвращает, может ли строка быть преобразована в число. А также воспользоваться обратным преобразованием FloatToStr для проверки того, что число введено корректно. Примерно вот так:

procedure TForm1.Edit1Change(Sender: TObject);
var
  tmp : extended;
begin
  tmp := 0;
  if( TryStrToFloat(Edit1.Text, tmp) and (FloatToStr(tmp)=Edit1.Text) )
  then
    Edit1.Color := clMoneyGreen
  else
    Edit1.Color := $8080FF;
end;

У данной функции есть недостаток - она будет принимать числа не с точкой, а с запятой (либо другим разделителем дробной и целой части - он задаётся в настройках винды и может быть, в принципе, разным).
Если устраивает данный вариант - пользуйтесь на здоровье :)
Если нет - пишите в минифорум, найдём подходящее решение.

Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 6 мая 2010, 20:54
Оценка за ответ: 5

Комментарий к оценке: Большое спасибо! Вроде, работает как надо!!!

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

Всего сообщений: 2; последнее сообщение — 6 мая 2010, 17:46; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 6 мая 2010, 08:49 [#1]:

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

DNK (статус: Студент), 6 мая 2010, 17:46 [#2]:

Емельянов Константин Игоревич: Что за тип такой "000,123"? Идентификатор в паскале не может начинаться с цифры и содержать запятую.
"Digital Networked Knight"

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

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