Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование edit1


Страницы:   1 2 3

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'а текст, делай с ним все что тебе нужно и сбрасывай флаг.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо