Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.05.2014, 00:36
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание Как реализовать прибавление/отнимание

Ребята всем добрый день...

Есть форма где стоит четыре компонента ТEdit
как сделать так что бы при вводе цифр на Edit1 - Edit2 - Edit3
на Edit4 автоматом показывал общую суму?

п.с. Вроде звучит легко но создает проблему когда допустим ввели строку 123 потом из этой строки удалили 3 или 2
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #2  
Старый 25.05.2014, 00:42
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

Ой ссори - поторопился с вопросом...видно же нужно иногда спать а то голова не очь хорошо варит...решил проблему
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #3  
Старый 25.05.2014, 03:46
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Тем не менее вопрос задан, и вот эль-вариант решения:
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var
 ed1, ed2, ed3: integer;
begin
 ed1:= 0;
 ed2:= 0;
 ed3:= 0;
 if Edit1.Text <> '' then ed1:= StrToInt(Edit1.Text);
 if Edit2.Text <> '' then ed2:= StrToInt(Edit2.Text);
 if Edit3.Text <> '' then ed3:= StrToInt(Edit3.Text);
 Edit4.Text:= IntToStr(ed1 + ed2 + ed3);
end;
нужно повесить это на три первых эдита
Ответить с цитированием
  #4  
Старый 25.05.2014, 13:11
phomm phomm вне форума
Новичок
 
Регистрация: 07.10.2013
Адрес: Тюмень
Сообщения: 50
Версия Delphi: 7/2007/XE+/FPC
Репутация: 22
По умолчанию

Цитата:
Сообщение от Alegun
Код:
 ed1:= 0; 
 ed2:= 0; 
 ed3:= 0; 
 if Edit1.Text <> '' then ed1:= StrToInt(Edit1.Text); 
 if Edit2.Text <> '' then ed2:= StrToInt(Edit2.Text); 
 if Edit3.Text <> '' then ed3:= StrToInt(Edit3.Text); 
Лучше использовать
Код:
edX := StrToIntDef(EditX.Text, 0);
Потому что будет адекватно реагировать на любые символы не дающие ошибок при переводе в число, Ваш же вариант будет очень ненадёжным, например, простой пробел в эдите приведёт к ошибке.
Ответить с цитированием
  #5  
Старый 25.05.2014, 13:43
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

как раз правильней использовать StrToInt, чтобы в случае ввода пользователем не числового значения было возбуждено исключение и пользователь будет уведомлен. в случае с StrToIntDef будет произведен расчет со значением по умолчанию, которое к пользователю не имеет отношения.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 25.05.2014, 13:55
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Потому что будет адекватно реагировать на любые символы не дающие ошибок при переводе в число, Ваш же вариант будет очень ненадёжным, например, простой пробел в эдите приведёт к ошибке.
Есть флаг NumbersOnly, при котором надо очень постараться, чтобы ввести пробел или что-то еще не числовое.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #7  
Старый 25.05.2014, 19:31
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Мой вариант:
Код:
begin
  try
    Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text));
  except
    Edit3.Clear;
  end;
end;
Поскольку у Edit-ов есть состояние null, не могу его не задействовать. Это как раз тот случай, когда ясность интерфейса заставляет идти на жертвы в виде возбуждения и обработки исключений.

А NumbersOnly может и не подойти, если вдруг потребуются отрицательные или шестнадцатиричные значения, которые StrToInt тоже поддерживает.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #8  
Старый 26.05.2014, 00:16
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

Что это такое разве так не легче??

Код:
var
f1,f2,f3: real;

...
...
...
//это для каждого компонента TEdit
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var 
k:integer;
begin
if Edit1.Text='0' then
  if not(key in [',',#8]) then Edit1.Text:='';
if key in['0'..'9',',',#8] then 
  begin
  if key=',' then
    begin
    if Edit1.Text='' then key:=#0;
      For k:=1 to Length(Edit1.Text) do
      begin
      if Edit1.Text[k]=',' then key:=#0;
      end;
    end;
  end else key:=#0;
end;

...
...

procedure TForm1.Edit1Change(Sender: TObject);
begin
if edit1.Text<>'' then
begin
f1:=strtofloat(edit1.Text);
edit3.Text:=floattostr(f1+f2+f3);
end;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
if edit2.Text<>'' then
begin
f2:=strtofloat(edit2.Text);
edit3.Text:=floattostr(f1+f2+f3);
end;
end;

procedure TForm1.Edit3Change(Sender: TObject);
begin
if edit3.Text<>'' then
begin
f3:=strtofloat(edit3.Text);
edit3.Text:=floattostr(f1+f2+f3);
end;
end;
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #9  
Старый 26.05.2014, 02:20
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Electronic_Arts
Что это такое разве так не легче??...
Слишком избыточно, прям по-бейсиковски, проще один раз явно указать что с чем складывать, причём повесив одну процедуру на все компоненты сразу, чем для каждого выполнять одно и тоже.
Вердикт: G-код детектед

З.Ы. Да и потом, был вопрос про появление суммы из трёх слогаемых в Edit4, а здесь такого вообще не наблюдается. ТС - непонятки
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter