|
Вопрос # 4 121/ вопрос открыт / |
|
Приветствую, уважаемые эксперты! Скажите, пожалуйста, как сделать так, чтобы до тех пор, пока в Edit'е не появится правильное число, фон этого Edit'а был слегка красноватым, а когда число правильное (real) фон становился зеленоватым???
Ответ #1. Отвечает эксперт: DNK
Здравствуйте, Емельянов Константин Игоревич!
У самого была точно такая же задача. В качестве слегка зеленоватого взял clMoneyGreen, для слегка красноватого пришлось придумать свой цвет.
Приложение: Переключить в обычный режим- const
- CL_RED = $8080FF;
- CL_GREEN = clMoneyGreen;
-
- function TForm1.IsValid(value: integer): boolean;
- begin
- ...
- end;
-
- procedure TForm1.Edit1Change(Sender: TObject);
- var edt: TEdit;
- begin
- edt := Sender as TEdit;
- try
- if IsValid(StrToInt(edt.Text)) then
- edt.Color := CL_GREEN
- else
- edt.Color := CL_RED;
- except
- edt.Color := CL_RED;
- end;
- 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™ (статус: Доктор наук), 6 мая 2010, 08:49 [#1]:
Используй событие TEdit.OnChange.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
DNK (статус: Студент), 6 мая 2010, 17:46 [#2]:
Емельянов Константин Игоревич: Что за тип такой "000,123"? Идентификатор в паскале не может начинаться с цифры и содержать запятую.
"Digital Networked Knight"
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|