![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование edit1
rusmus © (2012-01-26 10:28:00)Здравствуйте!
Проблема. Никак не могу сделать так чтобы в цикле через Edit1 вводит числа. Компонента должна ждать ввода. Не получается.
for i:=1 to n do
begin
edit1.SetFocus;
a[i]:=strToInt(edit2.text);
symma:=symma+1/a[i];
end;
Пишет ошибку деление на ноль.
rusmus (2012-01-26 11:34:00) [21]Нет хотел с basic перевести на дельфи, для удобства и визуальности
brother (2012-01-26 11:30:00) [22]правка кода для корректной работы - твое домашнее задание)
rusmus (2012-01-26 11:29:00) [23]Необходимо ввести общее число сопротивлений. Затем вычислить общее число сопротивлений для параллельно соединеных проводников.
N - число сопротивлений
Symma - общее сопротивление
Через Edit1 ввожу N, и хотел через Edit2 вводит значения для каждого.
brother (2012-01-26 11:28:00) [24]если тупро просуммировать введенные в едит числа, то вот так пойдет:
type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
summ,
count,
countmax: integer;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
count:= 0;
countmax:= 9;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
Digit: set of Char=['1'..'9','0',#13];
begin
if (not(Key in Digit)) then Key:=#0;
if key=#13 then
begin
if count < countmax then
begin
Inc(count);
Inc(summ, strToInt(edit1.text));
end
else
begin
count:= 0;
showmessage('Summ: ' + IntToStr(summ));
end;
edit1.Text:='';
end;
end;
brother (2012-01-26 11:22:00) [25]а еще проще: какое задание?
rusmus (2012-01-26 11:21:00) [26]а обязательно ли именно в цикле, или достаточно накопить, например 10 вводов цифр и обработать резултаты? ;)
Понял Вашу мысль, попробую
Сергей М. (2012-01-26 11:17:00) [27]
> Почему все равно выходит ошибка?
Потому что нет его инициализации.
brother (2012-01-26 11:17:00) [28]> в цикле через Edit1 вводит числа
а обязательно ли именно в цикле, или достаточно накопить, например 10 вводов цифр и обработать резултаты? ;)
rusmus (2012-01-26 11:16:00) [29]begin
Edit1.ReadOnly:=true;
label3.Visible:=true;
edit2.Visible:=true;
SpeedButton4.Visible:=true;
symma:=0;
val(s,n,code);
for i:=1 to n do
begin
edit2.SetFocus;
if f=0 then
begin
symma:=symma+1/strToInt(edit2.text);
f:=1;
edit3.Text:=edit2.Text;
end;
end;
edit2.Text:='';
end;
Сброс флага есть.
Почему все равно выходит ошибка?
Сергей М. (2012-01-26 11:08:00) [30]а где инициализация и сброс флага ?
и где обработка сообщений в теле цикла ?
без нее ни один обработчик события вызван не будет ..
rusmus (2012-01-26 11:05:00) [31]Вот
procedure TForm2.Edit2KeyPress(Sender: TObject; var Key: Char);
const Digit: set of Char=['1'..'9','0',#13];
begin
if (not(Key in Digit)) then Key:=#0;
if key=#13 then f:=0;
end;
procedure TForm2.SpeedButton1Click(Sender: TObject);
var
i,code:integer;
key:char;
begin
Edit1.ReadOnly:=true;
label3.Visible:=true;
edit2.Visible:=true;
SpeedButton4.Visible:=true;
symma:=0;
val(s,n,code);
for i:=1 to n do
begin
edit2.SetFocus;
if f=0 then
begin
symma:=symma+1/strToInt(edit2.text);
edit3.Text:=edit2.Text;
end;
end;
edit2.Text:='';
end;
Сергей М. (2012-01-26 11:01:00) [32]тебе про фому, а ты про все про своего ерему)
ну и где у тебя в обработчике OnKeyPress взведение глоб.флага ?
rusmus (2012-01-26 10:57:00) [33]Нет не идет
procedure TForm2.Edit2KeyPress(Sender: TObject; var Key: Char);
const Digit: set of Char=['1'..'9','0',#13];
begin
if (not(Key in Digit)) then Key:=#0;
end;
procedure TForm2.Edit2KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if pos('0',Edit2.Text)<>Length(Edit2.Text) then
if Edit2.Text[Length(Edit2.Text)]<>'0' then
if FloatToStr(StrToFloat(Edit2.Text))<>'0' then
Edit2.Text:=FloatToStr(StrToFloat(Edit2.Text));
if Key=8 then
begin
r:=Edit2.SelStart;
S1:=Edit2.Text;
Delete(S1,r,1);
Edit2.Text:=S1;
end;
Edit2.SelStart:=Length(Edit2.Text);
end;
procedure TForm2.SpeedButton1Click(Sender: TObject);
var
i,code:integer;
key:char;
begin
Edit1.ReadOnly:=true;
label3.Visible:=true;
edit2.Visible:=true;
SpeedButton4.Visible:=true;
symma:=0;
val(s,n,code);
for i:=1 to n do
begin
edit2.SetFocus;
if key=#13 then
begin
symma:=symma+1/strToInt(edit2.text);
edit3.Text:=edit2.Text;
end;
end;
edit2.Text:='';
end;
Никак не пойму где ошибка.
Медвежонок Пятачок (2012-01-26 10:48:00) [34]чтобы компонента ожидала ввод
точно.
только все наоборот.
не компонента, а твой цикл.
Сергей М. (2012-01-26 10:42:00) [35]
> чтобы компонента ожидала ввод
Не компонента, а компонент.
Он и ожидает ввод.
> а не автоматически делала вычисления
Она вообще ничего не вычисляет и к циклу твоему не имеет ни малейшего отношения.
rusmus (2012-01-26 10:41:00) [36]Кажется понял. Попробую через глоб флаг. и OnKeyPress. Получится отпишусь
Ega23 (2012-01-26 10:38:00) [37]
> Нет мне нужно чтобы компонента ожидала ввод
Положи TMemo
RWolf (2012-01-26 10:37:00) [38]
> ожидала ввод
как программа поймёт, что ввод завершён?
rusmus (2012-01-26 10:36:00) [39]Нет мне нужно чтобы компонента ожидалаввод, а не автоматически делала вычисления. Получается так что она автоматом вычисляет и пишет или деление на ноль или строка
Сергей М. (2012-01-26 10:35:00) [40]Обрабатывай OnKeyPress, при нажатии Enter взводи какой-либо глоб.флаг.
В теле цикла жди факта взведения флага (с умом), забирай из edit'а текст, делай с ним все что тебе нужно и сбрасывай флаг.