Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.05.27;
Скачать: [xml.tar.bz2];

Вниз

Использование 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.003 c
2-1327425569
sem
2012-01-24 21:19
2012.05.27
Вызов процедуры


15-1327330014
upc
2012-01-23 18:46
2012.05.27
Обмен валюты


15-1327091402
Юрий
2012-01-21 00:30
2012.05.27
С днем рождения ! 21 января 2012 суббота


15-1327310711
Pavia
2012-01-23 13:25
2012.05.27
Линейные графики


3-1275680538
AlpenLeo
2010-06-04 23:42
2012.05.27
добавление даты в поле таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский