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

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

Динамически создал 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;

Смысл этого кода объясни.


Наверх

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