Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2010, 16:12   #1
Dalagardi
Пользователь
 
Регистрация: 16.01.2010
Сообщений: 38
Вопрос Проблема с созданием динамических объектов. (Delphi7)

Нужно на панели создать n-количество Timage, картинки для которых будут выбираться из OpenPictureDialog(В прогрессии из DirectoryListBox). На подобие обычных программ для просмотра изображений.
Ниже мой код...Я уверен что в коде накосячил, но жду помощи =)

Код:
var
 DinP:array of timage;
  p:^Timage;
  i:integer;

procedure TForm1.FormCreate(Sender: TObject);

getmem(p,sizeof(Timage));
setlength(DinP,timage.InstanceSize);
openpicturedialog1.Execute;

for i:=0 to openpicturedialog1.Files.Count do
begin
dinp[i]:=Timage.Create(self);
dinp[i].Stretch:=true;
dinp[i].Parent:=panel1;
dinp[i].Picture.loadfromfile(form1.OpenpictureDialog1.Files.names[i]);
dinp[i].Left:=i*100+10;
end;
Dalagardi вне форума Ответить с цитированием
Старый 15.03.2010, 16:16   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Конечно, накосячил. Раз массив динамический, то перед созданием объекта для него нужно выделить память
SetLength(DinP, длина_массива)
то есть Вам нужна еще переменная count - для хранения числа элементов массива DinP (не забудьте сначала инициализировать ее нулем).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 15.03.2010 в 16:46.
Utkin вне форума Ответить с цитированием
Старый 15.03.2010, 17:15   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
перед созданием объекта для него нужно выделить память
SetLength(DinP, длина_массива)
У него это есть
Цитата:
Сообщение от Dalagardi Посмотреть сообщение
Код:
setlength(DinP,timage.InstanceSize);
Вот только длина_массива не timage.InstanceSize, а 0 и в цикле увеличивать
Помимо этого, нет конструкции if openpicturedialog1.Execute then ..., а файлы брать надо из OpenpictureDialog1.Files.strings[i], а не names ()
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление динамических объектов / полная очистка формы 095 Общие вопросы Delphi 3 23.04.2012 16:09
Имя динамических объектов PVD Общие вопросы Delphi 26 09.02.2010 15:38
Процедуры для динамических объектов Fruit Общие вопросы Delphi 8 30.12.2008 21:10
Delphi: Проблема с созданием объектов Omedus Помощь студентам 4 08.08.2008 18:42