| 
| 
 | Вопрос # 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 сохраняет позицию (номер) символа, который не понравился. результат преобразования при этом неопределён.во вторых, эта процедура всегда требует точку в качестве разделителя дробной и целой части, независимо от системных настроек (очень удобно иногда)
 в третих, она умеет преобразовывать и целые числа, и дробные - она смотрит по типу переменной для результата.
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |