Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.05.27;
Скачать: CL | DM;

Вниз

Использование edit1   Найти похожие ветки 

 
rusmus ©   (2012-01-26 10:28) [0]

Здравствуйте!
Проблема. Никак не могу сделать так чтобы в цикле через Edit1 вводит числа. Компонента должна ждать ввода. Не получается.

for i:=1 to n do
 begin
  edit1.SetFocus;
  a[i]:=strToInt(edit2.text);
  symma:=symma+1/a[i];
 end;

Пишет ошибку деление на ноль.


 
OW ©   (2012-01-26 10:32) [1]

нужно событие-пинок, по которому она поймет, что ввод закончен.

предложить могу
 TfrmMain = class(TForm)
 private     { Private declarations }
   i: integer;
......
procedure TfrmMain.Button1Click(Sender: TObject);
begin
  i := i + 1;
 a[i]:=strToInt(edit2.text);
 symma:=symma+1/a[i];
end;


 
Ega23 ©   (2012-01-26 10:34) [2]

Положи TMemo


 
Сергей М. ©   (2012-01-26 10:35) [3]

Обрабатывай OnKeyPress, при нажатии Enter взводи какой-либо глоб.флаг.

В теле цикла жди факта взведения флага (с умом), забирай из edit"а текст, делай с ним все что тебе нужно и сбрасывай флаг.


 
rusmus ©   (2012-01-26 10:36) [4]

Нет мне нужно чтобы компонента ожидала ввод, а не автоматически делала вычисления. Получается так что она автоматом вычисляет и пишет или деление на ноль или строка


 
RWolf ©   (2012-01-26 10:37) [5]


> ожидала ввод

как программа поймёт, что ввод завершён?


 
Ega23 ©   (2012-01-26 10:38) [6]


> Нет мне нужно чтобы компонента ожидала ввод


Положи TMemo


 
rusmus ©   (2012-01-26 10:41) [7]

Кажется понял. Попробую через глоб флаг. и OnKeyPress. Получится отпишусь


 
Сергей М. ©   (2012-01-26 10:42) [8]


> чтобы компонента ожидала ввод


Не компонента, а компонент.
Он и ожидает ввод.


> а не автоматически делала вычисления


Она вообще ничего не вычисляет и к циклу твоему не имеет ни малейшего отношения.


 
Медвежонок Пятачок ©   (2012-01-26 10:48) [9]

чтобы компонента ожидала ввод

точно.
только все наоборот.
не компонента, а твой цикл.


 
rusmus ©   (2012-01-26 10:57) [10]

Нет не идет

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 11:01) [11]

тебе про фому, а ты про все про своего ерему)

ну и где у тебя в обработчике OnKeyPress взведение глоб.флага ?


 
rusmus ©   (2012-01-26 11:05) [12]

Вот

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:08) [13]

а где инициализация и сброс флага ?
и где обработка сообщений в теле цикла ?
без нее ни один обработчик события вызван не будет ..


 
rusmus ©   (2012-01-26 11:16) [14]

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;

Сброс флага есть.
Почему все равно выходит ошибка?


 
brother ©   (2012-01-26 11:17) [15]

> в цикле через Edit1 вводит числа

а обязательно ли именно в цикле, или достаточно накопить, например 10 вводов цифр и обработать резултаты? ;)


 
Сергей М. ©   (2012-01-26 11:17) [16]


> Почему все равно выходит ошибка?


Потому что нет его инициализации.


 
rusmus ©   (2012-01-26 11:21) [17]

а обязательно ли именно в цикле, или достаточно накопить, например 10 вводов цифр и обработать резултаты? ;)

Понял Вашу мысль, попробую


 
brother ©   (2012-01-26 11:22) [18]

а еще проще: какое задание?


 
brother ©   (2012-01-26 11:28) [19]

если тупро просуммировать введенные в едит числа, то вот так пойдет:
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;


 
rusmus ©   (2012-01-26 11:29) [20]

Необходимо ввести общее число сопротивлений. Затем вычислить общее число сопротивлений для параллельно соединеных проводников.

N - число сопротивлений
Symma - общее сопротивление
Через Edit1 ввожу N, и хотел через Edit2 вводит значения для каждого.


 
brother ©   (2012-01-26 11:30) [21]

правка кода для корректной работы - твое домашнее задание)


 
rusmus ©   (2012-01-26 11:34) [22]

Нет хотел с basic перевести на дельфи, для удобства и визуальности


 
Сергей М. ©   (2012-01-26 11:37) [23]


> хотел с basic


с невизуального что ли ?


 
Inovet ©   (2012-01-26 11:38) [24]

> [20] rusmus ©   (26.01.12 11:29)
> Необходимо ввести общее число сопротивлений. Затем вычислить
> общее число сопротивлений для параллельно соединеных проводников.

Ну и зачем такие извращения с вводом делать? Задание не понятно, но вводи "общее число сопротивлений", нажимай на кнопку "Расчитать", выводи результат.


 
rusmus ©   (2012-01-26 11:41) [25]

Да, basic старенький.

Общее число сопротивлений - это для конечного параметра цикла, затем вводим каждое значение отдельно.


 
Сергей М. ©   (2012-01-26 11:41) [26]


> зачем такие извращения с вводом делать?


Видимо к нему с луны нахаляву свалился готовый код на древнем Васике, а препод требует на Делфи, с формочками, кнопочками и пр. рюшечками)


 
Ega23 ©   (2012-01-26 11:42) [27]

Всё, что нужно, это TMemo для ввода данных и определения размерности массива, TButton для рассчёта, TLabel для вывода результата и TForm, дабы всё это связать воедино.


 
Сергей М. ©   (2012-01-26 11:43) [28]


> basic старенький


Ну так и не усложняй себе жизнь - просто замени васиковые команды ожидания/ввода на InputBox()


 
rusmus ©   (2012-01-26 11:46) [29]

Видимо к нему с луны нахаляву свалился готовый код на древнем Васике

Да нет, древний уже давно не используют, тут просто колега подошел и ему надо на дельфи


 
Ega23 ©   (2012-01-26 11:46) [30]

function Foo(Strings: TStrings): Extended;
var
 i: Integer;
begin
 Result := 0;
 for i := 0 to Strings.Count - 1 do
    Result := Result + 1/StrToFloat(Strings[i]);
end;


 
rusmus ©   (2012-01-26 11:48) [31]

Ну так и не усложняй себе жизнь -

Нет хочу что бы было визуально, а без сложностей жизнь не интересна


 
Сергей М. ©   (2012-01-26 11:48) [32]


> древний уже давно не используют


Это как посмотреть..
Кому и кобыла невеста)


 
Ega23 ©   (2012-01-26 11:48) [33]


> тут просто колега подошел и ему надо на дельфи


http://lurkmore.to/%D0%A3_%D0%BC%D0%BE%D0%B5%D0%B9_%D0%BF%D0%BE%D0%B4%D1%80%D1%83%D0%B3%D0%B8


 
Ega23 ©   (2012-01-26 11:49) [34]


>  а без сложностей жизнь не интересна


Это если их самостоятельно преодолевать. :)


 
rusmus ©   (2012-01-26 11:50) [35]

Всё, что нужно, это TMemo для ввода данных и определения размерности массива, TButton для рассчёта, TLabel для вывода результата и TForm, дабы всё это связать воедино.

Считаю, что TMemo использовать не удобно


 
rusmus ©   (2012-01-26 11:52) [36]

Уже неделю самостоятельно, решил вам преподнести


 
Ega23 ©   (2012-01-26 12:04) [37]


> Считаю, что TMemo использовать не удобно


Пристыженно умолкаю.


 
Плохиш ©   (2012-01-26 12:13) [38]


> rusmus ©   (26.01.12 11:52) [36]
>
> Уже неделю самостоятельно, решил вам преподнести

Программиста найми.


 
OW ©   (2012-01-26 12:26) [39]

да чего тут :)

> просто замени васиковые команды ожидания/ввода на InputBox()

и правда, аля вот так
 Vl: string;
 i, N, s: integer;
 a: array of integer;
begin
 if InputQuery("Вводим общее кол-во резисторов", "число", Vl) then
   N := StrToInt(Vl);
 SetLength(a, N);
 s := 0;
 for i := 0 to N - 1 do
 begin
   if InputQuery("Вводим резистор N" + IntToStr(i + 1), "число", Vl) then
     a[i] := StrToInt(Vl);
   s := s + a[i];
 end;
 ShowMessage( "Итого " + IntToStr(s) );
end;


 
Inovet ©   (2012-01-26 12:31) [40]

> [35] rusmus ©   (26.01.12 11:50)
> Считаю, что TMemo использовать не удобно

Это почему же? Лучше при ошибке в одном номинале заново вводить 100500 значений?
>  а без сложностей жизнь не интересна



Страницы: 1 2 вся ветка

Текущий архив: 2012.05.27;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.01 c
2-1327043868
Chuck Bass
2012-01-20 11:17
2012.05.27
Указать позицию для записи таблицы БД


2-1326985043
Artem
2012-01-19 18:57
2012.05.27
В Delphi можно сравнивать записи одного типа?


2-1327379649
de_guta
2012-01-24 08:34
2012.05.27
Проблема с TIdHttp


15-1326904284
Gu
2012-01-18 20:31
2012.05.27
Xe2U4


2-1327052281
3asys
2012-01-20 13:38
2012.05.27
копирование изображения формы