Форум: "Начинающим";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
ВнизСоздание объектов во время исполнения программы Найти похожие ветки
← →
Eugem © (2007-08-05 22:54) [0]Прошу помочь разобраться с созданием объектов во время исполнения программы. При запуске на форме создаются 800 изображений, расположенный рядом друг с другом. И у них можно задать различные свойства, в том числе и имя.
Мне нужно будет потом менять координаты этих изображений в цикле. Обычно это такForm1.Image1.Tag:=3
А вот как обращаться к изображениям, созданным уже во время работы программы - никак не разберусь. Подскажите, пожалуйста. Текст программы ниже.procedure draw;
var i,j:integer;
TypeClass : TControlClass;
begin
for I := 0 to n*2-1 do
begin
for j := 0 to n-1 do
begin
TypeClass:=TImage;
New:=TypeClass.Create(Form1);
if (i<=10)or(j<=10) then New.Name:="img"+"0"+IntTostr(i)+"0"+IntTostr(j)
else New.Name:=New.ClassName+IntTostr(i)+IntTostr(j);
image[i+1,j+1]:=@New;
if (i<20) and (i>10) then TImage(New).Picture.LoadFromFile("plus.bmp")
else TImage(New).Picture.LoadFromFile("minus.bmp");
TImage(New).Transparent:=true;
TImage(New).AutoSize:=true;
TImage(New).Left:=i*size;
TImage(New).Top:=j*size;
New.Parent:=Form1;
end;
end;
end;
← →
Двигатель внешнего сгорания (2007-08-05 23:13) [1]
> При запуске на форме создаются 800 изображений,
Жуть.
Думаешь, это будет работать?
Может, задачу поставить целиком лучше?
← →
Anatoly Podgoretsky © (2007-08-05 23:22) [2]Это не жуть, а пазл.
А вот задачу надо ставить, вместо загадок для отвечающих.
Рассказывать надо что требуется сделать, а не как.
← →
DrPass © (2007-08-05 23:38) [3]
> А вот как обращаться к изображениям, созданным уже во время
> работы программы - никак не разберусь
А это тебе на что?
> image[i+1,j+1]:=@New;
Только сделай по-человечески
image[i+1,j+1]:= New;
и убери
if (i<=10)or(j<=10) then New.Name:="img"+"0"+IntTostr(i)+"0"+IntTostr(j)
else New.Name:=New.ClassName+IntTostr(i)+IntTostr(j);
- все равно ж имена не используешь
← →
{RASkov} © (2007-08-05 23:52) [4]> и убери
> if (i<=10)or(j<=10) then New.Name:="img"+"0"+IntTostr(i)
> +"0"+IntTostr(j)
> else New.Name:=New.ClassName+IntTostr(i)+IntTostr(j);
> - все равно ж имена не используешь
Собственно здесь вообще много чего поубирать можно :)
procedure draw(Cnv: TCanvas);
var i,j:integer;
begin
for I := 0 to n*2-1 do
for j := 0 to n-1 do
begin
image[i+1,j+1]:=TBitmap.Create;
if (i<20) and (i>10) then image[i+1,j+1].LoadFromFile("plus.bmp")
else image[i+1,j+1].LoadFromFile("minus.bmp");
image[i+1,j+1].Transparent:=true;
Cnv.Draw(i*size, j*size, image[i+1,j+1]);
end;
end;
Только.... автор, это не решение твоей проблемы, просто "оптимизация" твоего "куска" из [0] :)
Логически не верный код! Впрочем как вероятно и синтаксически )
← →
Ping (2007-08-06 00:22) [5]array[0..n-1][0..m-1] of TImage;
← →
balepa © (2007-08-06 09:17) [6]
> Ping (06.08.07 00:22) [5]
> array[0..n-1][0..m-1] of TImage;
array[0..n-1,0..m-1] of TImage;
← →
E (2007-08-06 15:37) [7]Задача:
Требуется анимировать процессы происходящие в p-n переходе диода. Есть положительные и отрицательные заряды. Каждое изображение - это заряд. И требуется эти все заряди хаотически перемещать.
Вот выше написали как создать изображения. А вот как ими управлять всеми в цикле, например?
← →
{RASkov} © (2007-08-06 16:58) [8]> [7] E (06.08.07 15:37)
Type
TZaryad = record
BMP: TBitmap;
Left: Integer;
Top: Integer;
Width: Integer;
Height: Integer;
....
end;
TZaryads: array of TZaryad;
var Zards: TZaryads;
.....
procedure CreateZaryads;
begin
SetLength(Zards, <Кол-во зарядов>);
for N:=0 to High(Zards) do begin
Zards.BMP:=TBitmap.Create;
Zards.BMP.LoadFromFile("");
Zards.Left:=RAndom();
.....
end;
end;
.................
procedure StepZaryad(Zar: TZaryad);
begin
Zar.Left:=Zar.Left+1;
......
end;
procedure DrawZaryad(Can: TCanvas; Zar: TZaryad);
begin
......
Can.Draw(Zar.Left, Zar.Top, Zar.BMP);
.....
end;
procedure PaintZaryads(Canv: TCanvas);
begin
for N:=0 to High(Zards) do begin
StepZaryad(Zards[N]);
DrawZaryad(Canv, Zards[N]);
end;
end;
procedure TForm.TimerTimer();
begin
PaintZaryads(Canvas);
end;
Только для раздумья....
← →
TStas © (2007-08-06 23:02) [9]Обращаться крайне просто: сохранить на них куда-то указатели. Например, очень подходит для этого TList. Вопрос другой: зачем как сложно? И Так ресурсоемко? Почему не рисовать сразу на канве, тем более, что это заряды, т. е. точки?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c