![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Ребята всем добрый день...
Есть форма где стоит четыре компонента ТEdit как сделать так что бы при вводе цифр на Edit1 - Edit2 - Edit3 на Edit4 автоматом показывал общую суму? п.с. Вроде звучит легко но создает проблему когда допустим ввели строку 123 потом из этой строки удалили 3 или 2 |
|
#2
|
||||
|
||||
|
Ой ссори - поторопился с вопросом...видно же нужно иногда спать а то голова не очь хорошо варит...решил проблему
|
|
#3
|
||||
|
||||
|
Тем не менее вопрос задан, и вот эль-вариант решения:
Код:
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
|
|||
|
|||
|
Цитата:
Код:
edX := StrToIntDef(EditX.Text, 0); |
|
#5
|
||||
|
||||
|
как раз правильней использовать StrToInt, чтобы в случае ввода пользователем не числового значения было возбуждено исключение и пользователь будет уведомлен. в случае с StrToIntDef будет произведен расчет со значением по умолчанию, которое к пользователю не имеет отношения.
|
|
#6
|
||||
|
||||
|
Цитата:
|
|
#7
|
||||
|
||||
|
Мой вариант:
Код:
begin
try
Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text));
except
Edit3.Clear;
end;
end;А NumbersOnly может и не подойти, если вдруг потребуются отрицательные или шестнадцатиричные значения, которые StrToInt тоже поддерживает. |
|
#8
|
||||
|
||||
|
Что это такое разве так не легче??
Код:
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
|
||||
|
||||
|
Цитата:
Вердикт: G-код детектед З.Ы. Да и потом, был вопрос про появление суммы из трёх слогаемых в Edit4, а здесь такого вообще не наблюдается. ТС - непонятки ![]() |