|
Вопрос # 1 965/ вопрос открыт / |
|
Здравствуйте!проблема вот вчем! при нажатии кнопки некоторя переменная, значение которой получаем из поля ввода, умнозается на определенное число и результат выводится в поле вывода. Как сделать, чтобы при нажати кнопки, когда значение переменной в поле ввода не введено, вы полнялось, ну например в поле вывода было бы написано " введите число!". Пробовал:procedure TForm1.Button1Click(Sender: TObject);
var
ms: integer;
kmh: real;
begin
ms:= StrToInt(Edit1.Text);
if Edit1.Text<>'' then Label3.Caption:=' Введите число!';
kmh:= ms*3.6;
Label3.Caption:= FloatToStr(ms)+ ' ì/ñåê - ýòî '+ FloatToStr(kmh)+' êì/÷';
end;
не выходит!
 |
Вопрос задал: Ученый (статус: 8-ой класс)
Вопрос отправлен: 3 октября 2008, 20:19
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Ученый!
Ну наиболее красиво - через исключительные ситуации.
ну где то так
procedure TForm1.Button1Click(Sender: TObject);
var
ms: integer;
kmh: real;
begin
try
ms:= StrToInt(Edit1.Text);
if Edit1.Text<>'' then Label3.Caption:=' Введите число!';
kmh:= ms*3.6;
Label3.Caption:= FloatToStr(ms)+ ' ì/ñåê - ýòî '+ FloatToStr(kmh)+'
êì/÷';
end;
except
ShowMessage('Что то было не так. то ли число не ввели, то ли делить нельзя...');
end
Можно пойти и другими путями. например использовать процедуру val. Но это другая история
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 3 октября 2008, 20:28
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Аксион
Здравствуйте, Ученый!
Попробуйте вот так:
begin
if Edit1.Text='' then Label3.Caption:='Введите число!'
else ms:= StrToInt(Edit1.Text);
 |
Ответ отправил: Аксион (статус: 4-ый класс)
Время отправки: 3 октября 2008, 20:31
Оценка за ответ: 4
|
Ответ #3. Отвечает эксперт: Feniks
Здравствуйте, Ученый!
Добавлю и свою лепту... Незабывайте о пробелах, он ведь тоже символ, и если вы введете один пробел в поле ввода, то условие Edit1.Text<>'' уже не сработает. Если вы не используете защищенные блоки, то лучше так писать:
begin
if Trim(Edit1.Text)<>'' then
begin
ms:= StrToInt(Edit1.Text);
kmh:= ms*3.6;
Label3.Caption:= FloatToStr(ms)+ ' ì/ñåê - ýòî '+ FloatToStr(kmh)+'
êì/÷';
else
Label3.Caption:=' Введите число!';
end;
А так же можно просто отключать кнопку, пока не будет введено число в Edit1.Text. Для этого у Edit1 есть событие OnChange, которое срабатывает, когда вы что-то вводите. Вот там и напишите условие:
Button1.Enabled := Trim(Edit1.Text)<>'';
А в обработчике Кнопки уже делайте нужные вычисления.
P.S. Желаю удачи.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 6 октября 2008, 10:55
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 3 октября 2008, 22:19; участников в обсуждении: 3.
|
Ученый (статус: 8-ой класс), 3 октября 2008, 20:32 [#1]:
То Вадим К! а можно поподробнее про процедуру val...
|
|
Ученый (статус: 8-ой класс), 3 октября 2008, 20:33 [#2]:
То Блазер!пробовал, Вылазит ошибка!
|
|
Аксион (статус: 4-ый класс), 3 октября 2008, 20:33 [#3]:
На счет if Edit1.Text<>'' then Label3.Caption:=' Введите число!'; ... сообщение введите число будет появлятся есле наоборот чтонибудь введено...
|
|
Аксион (статус: 4-ый класс), 3 октября 2008, 20:34 [#4]:
Ученый какая?
|
|
Ученый (статус: 8-ой класс), 3 октября 2008, 20:54 [#5]:
Извеняюсь не ошибка! А просто получается так, что нажимаешь кнопку, когда ничего не введено, а вместо "введите число" выскакивает ответ!
|
|
Вадим К (статус: Академик), 3 октября 2008, 22:19 [#6]:
есть такая процедура val. она ещё в турбопаскале была (там не было StrToInt).
Используем так.
var s:string;
r,k:integer;
begin
///...
s := '3.4';
val(s,r,k);
if k<>0 then begin showmessage('ошибка!'); exit; end;
/// используем r
Особенности этой процедуры. В случае, если число в строке задано неверно, то переменная k сохраняет позицию (номер) символа, который не понравился. результат преобразования при этом неопределён.
во вторых, эта процедура всегда требует точку в качестве разделителя дробной и целой части, независимо от системных настроек (очень удобно иногда)
в третих, она умеет преобразовывать и целые числа, и дробные - она смотрит по типу переменной для результата.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|