Привет всем.
Такой вопрос: как можно динамически создавать много объектов? Допустим, нажали на кнопку - создался объект, ещё раз нажали - ещё раз создался, новый, такой же.. Можно, конечно, создать массив нужного типа и конструировать по одному элементу, но мне кажется, это как-то не комильфо в плане экономии памяти. Как быть?
Добавлено через 14 мин.
Сейчас я так попробовал:
var images:array of TImage;
...
getmem(images[val],sizeof(TImage)); //val - номер создаваемого элемента
Вообще-то у класса есть конструктор.
varИдея понятна?
count: integer =0;
procedure TForm1.Button1Click(Sender: TObject);
var memo: TMemo;
begin
memo := TMemo.Create(Form1);
memo.Parent := Form1;
memo.Visible := true;
memo.Text := IntToStr(count);
memo.Top := 10 * count;
memo.Left := 10 * count;
inc(count);
end;
Ну это да, конструктор есть. А ведь переменная в обработчике кнопки одна, а мне надо много объектов создавать. И как я потом смогу обратиться к нужному?
procedure TForm1.Button1Click(Sender: TObject);
var memo: TMemo;
begin
memo := TMemo.Create(Form1);
memo.Parent := Form1;
memo.Name := Format('MyMemo%.2d', [count]); // Назначаешь нужное имя.
memo.Visible := true;
memo.Text := IntToStr(count);
memo.Top := 20 * count;
memo.Left := 20 * count;
inc(count);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
(Form1.FindComponent('MyMemo02') as TMemo).Text := 'Oops'; // И обращаешься по нему к компоненту...
end;
Оо здорово, спасибо
Я решил оформить поиск компонента по имени функцией, так как строка длинная, а использоваться будет часто, получилось это:
Function TForm1.find_comp(name:string):TImage;
begin
result:=(Form1.FindComponent(name) as TImage);
end;
Сделал с форматом. format('road_1%.2d',[1]); Ищу по road_101, всё равно АВ, в моей функции result содержит nil, типа не находит. У меня всё это дело находится внутри моего класса, может, это мешает?
Добавлено через 12 мин.
в последних моих постах можете проследить, к чему может привести невнимательность)) Ищу компонент на форме, хотя в качестве парента указывал не форму...
Извиняюсь за кросспостинг.