IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Динамическое создание объектов
сообщение
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Привет всем.

Такой вопрос: как можно динамически создавать много объектов? Допустим, нажали на кнопку - создался объект, ещё раз нажали - ещё раз создался, новый, такой же.. Можно, конечно, создать массив нужного типа и конструировать по одному элементу, но мне кажется, это как-то не комильфо в плане экономии памяти. Как быть?

Добавлено через 14 мин.
Сейчас я так попробовал:

var images:array of TImage;
...
getmem(images[val],sizeof(TImage)); //val - номер создаваемого элемента


Ошибка Incompatible Types, на индекс указывает. Может, нельзя выделять память именно для элемента массива?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Вообще-то у класса есть конструктор.

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;
Идея понятна?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Ну это да, конструктор есть. А ведь переменная в обработчике кнопки одна, а мне надо много объектов создавать. И как я потом смогу обратиться к нужному?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
А ведь переменная в обработчике кнопки одна, а мне надо много объектов создавать. И как я потом смогу обратиться к нужному?
А по имени и сможешь. Скажем, так:

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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Оо здорово, спасибо smile.gif


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Я решил оформить поиск компонента по имени функцией, так как строка длинная, а использоваться будет часто, получилось это:

Function TForm1.find_comp(name:string):TImage;
begin
result:=(Form1.FindComponent(name) as TImage);
end;


Компилируется, но вылетает AV. Компонент с именем name я создавал, только без format, а просто присваивал img.name:='name';. Нужный компонент точно типа TImage.

Добавлено через 7 мин.
Да, кажется, это из-за формата.. А нельзя без этого? Я так-то знаю, что эта функция делает, но зачем это для свойства name, которое, как я понял, имеет строковый тип?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Сделал с форматом. format('road_1%.2d',[1]); Ищу по road_101, всё равно АВ, в моей функции result содержит nil, типа не находит. У меня всё это дело находится внутри моего класса, может, это мешает?

Добавлено через 12 мин.
lol.gif в последних моих постах можете проследить, к чему может привести невнимательность)) Ищу компонент на форме, хотя в качестве парента указывал не форму...

Извиняюсь за кросспостинг.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.10.2020 16:36
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name