![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамически создал edit а роботать с ним не могу(
Дмитрий © (2013-03-06 00:50:00)Извиняюсь пишу про динамическую тему не первый раз, но все не могу разобраться((( Edit'ы созданы динамически:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var Edit: TEdit; StaticText:TStaticText; i,I1,i2,i3:INTEGER;
begin
FOR i1:=4 TO STRTOINT(EDIT4.TEXT) DO BEGIN
edit.Name:='Edit'+inttostr(i1+1);
end;
FOR i:=1 TO STRTOINT(EDIT4.TEXT) DO BEGIN
Edit:=TEdit.Create(Form1);
Edit.Parent:=Form1;
Edit.Left:=592{+(I-1)*80};
Edit.Top:=200+(I-1)*30;
Edit.Width:=95;
Edit.Height:=18;
edit.font.size:=8;
end;
FOR i1:=0 TO STRTOINT(EDIT4.TEXT) DO BEGIN
StaticText.Caption:=Inttostr(i1);
StaticText:=TStaticText.Create(form1);
StaticText.Parent:=Form1;
StaticText.Left:=552{+(I-1)*80};
StaticText.Top:=200+(I1)*30;
StaticText.Font.Size:=10;
end;
begin
FOR i2:=i1+1 TO STRTOINT(EDIT4.TEXT) DO BEGIN
edit.Name:='Edit'+inttostr(i2+(i1+1));
end;
FOR i:=1 TO STRTOINT(EDIT4.TEXT) DO BEGIN
Edit:=TEdit.Create(Form1);
Edit.Parent:=Form1;
Edit.Left:=711{+(I-1)*80};
Edit.Top:=200+(I-1)*30;
Edit.Width:=95;
Edit.Height:=18;
edit.font.size:=8;
end;
begin
FOR i3:=i1+i2+1 TO STRTOINT(EDIT4.TEXT) DO BEGIN
edit.Name:='Edit'+inttostr(i3+(i1+(i2+1)));
end;
FOR i:=1 TO STRTOINT(EDIT4.TEXT) DO BEGIN
Edit:=TEdit.Create(Form1);
Edit.Parent:=Form1;
Edit.Left:=830{+(I-1)*80};
Edit.Top:=200+(I-1)*30;
Edit.Width:=95;
Edit.Height:=18;
edit.font.size:=8;
end;
end;
end;
end;
Показано на 1 картинке.
Мне надо написать формулу когда из первого столбца edit'ов первый, умножается на первый из 3 столбца, и суммируется со 2 из 1 столбца умноженный на 2 из 3 стобца и т.д. Что типо (edit1*edit3)+(edit4*edit6)+...(edi tn+editn).
Вы скажите создай лучше массив! Конечно там с массивом работать проще указывать индекс edit'а и производить нужные операции.
Есть пример с массивом "картинку кинул",считает первые эдиты. Но не получается сделать 3 колонки как в первом примере(((
procedure TForm1.Button1Click(Sender: TObject);
begin
n := 500;
SetLength(Lab, n+1);
SetLength(Ed, n+1);
for i:=1 to strtoint(memo1.Text) do
begin
Lab[i] := TLabel.Create(self);
Lab[i].Parent := self;
Lab[i].Left := 10;
Lab[i].Top := i*30+20;
Lab[i].Caption := 'Ýòèêåòêà'+IntToStr(i);
Ed[i] := TEdit.Create(self);
Ed[i].Parent := self;
Ed[i].Left := 150;
Ed[i].Top := i*30+20;
Ed[i].Text := 'Ïîëå ââîäà '+IntToStr(i);
Ed[i].Name:= 'Edit'+IntToStr(i);
end;
И еще вопрос: если великий мудрец подскажет как это сделать и все получится! Как сделать чтоб формула считала неограниченное число этих edit'ов? Если я укажу в формуле например edit500 а он не создан динамически а создано только 3, компилятор будет ругаться что такой едит не создан? Или указать в private edit500 и все будет гладко?
Германн (2013-03-07 01:48:00) [1]
> Извиняюсь пишу про динамическую тему не первый раз, но все
> не могу разобраться
Может наконец прочитаешь учебник?
Или продолжишь искать примеры на помойке? Тогда бог тебе в помощь.
Inovet (2013-03-06 14:59:00) [2]> [8] O'ShinW © (06.03.13 14:46)
Не объясняет же зачем ему это.
O'ShinW (2013-03-06 14:46:00) [3]
> lab: array of array of Edit;
= stringgrid
anonims (2013-03-06 14:34:00) [4]
> Но не получается сделать 3 колонки как в первом примере(((
lab: array of array of Edit;
setlength(lab,N,3); //или наоборот 3,N
for j ... to N
lab[i,0] ...
lab[i,0].left:=0;
lab[i,1]...
lab[i,0].left:=30;
lab[j,2]...
lab[i,0].left:=90;
brother (2013-03-06 11:55:00) [5]да тут весь код страшен, отсюда вопрос: кто его так?
Юрий Зотов (2013-03-06 11:54:00) [6]И поменяйте местами эти 2 строчки:
StaticText.Caption:=Inttostr(i1);
StaticText:=TStaticText.Create(form1);
Нельзя работать с еще не созданным объектом.
O'ShinW (2013-03-06 10:52:00) [7]stringgrid не проще?
sniknik (2013-03-06 09:40:00) [8]объяснить, это не значит написать чтоу тебя делается, скорее зачем...
какой смысл задавать имена, пусть, начиная с 5... если они а) динамическим вообще не нужны, б) больше одного не влезет, с) первоначально задаются не созданному объекту.
???
+ от себя, нафига столько повторяющегося кода? если можно все в 1 (вложенный) цикл... с чего код видимо и переделан учитывая закоментаренное (Edit.Left:=592 {+(I-1)*80};).
Дмитрий (2013-03-06 09:23:00) [9]Смысл в том что у меня лежит edit 4 так на форме, а имена других присвает начиная с 5 и т.д.
Германн (2013-03-06 00:58:00) [10]
> FOR i1:=4 TO STRTOINT(EDIT4.TEXT) DO BEGIN
> edit.Name:='Edit'+inttostr(i1+1);
> end;
Смысл этого кода объясни.