Форум: "Начинающим";
Текущий архив: 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