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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 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)+ ' &#236;/&#241;&#229;&#234; - &#253;&#242;&#238; '+ FloatToStr(kmh)+' &#234;&#236;/&#247;';
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)+ ' &#236;/&#241;&#229;&#234; - &#253;&#242;&#238; '+ FloatToStr(kmh)+'
&#234;&#236;/&#247;';
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)+ ' &#236;/&#241;&#229;&#234; - &#253;&#242;&#238; '+ FloatToStr(kmh)+'
&#234;&#236;/&#247;';
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 сохраняет позицию (номер) символа, который не понравился. результат преобразования при этом неопределён.
во вторых, эта процедура всегда требует точку в качестве разделителя дробной и целой части, независимо от системных настроек (очень удобно иногда)
в третих, она умеет преобразовывать и целые числа, и дробные - она смотрит по типу переменной для результата.
Галочка "подтверждения прочтения" - вселенское зло.

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 24 марта 2023, 08:56
Выполнено за 0.04 сек.
Рейтинг@Mail.ru