Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > TImage и массив ссылок на него


Автор: SydeX 28.11.2005, 16:10
Приветсвтую люди добрые.
Вот какой вопрос.
Есть у меня 9 картинок - стоящих в три ряда.
(что-то типа галлереи)
Проблем, будучи жутко ленивым во всех процедурах которые работают с этим гридом прописывать имя каждого по миллиону раз лень.
Сделан массив ссылок на каждый из элементов:

TImage * MyImages;
TImage MyImages[0] = Form55->Image1;
TImage MyImages[1] = Form55->Image2;
...
etc.

Вроде всё работает - ссылки сохраняются, если меняешь корневые проперти класса TImage тоже всё хоккей, (ну вроде визибл, не-визибл етс).
Самое интересное начинается потом - когда нужно загрузить в них картинку.
Если обращаюсь по массиву - MyImages[0]->Picture->Bitmap->LoadFromStream(MyStream);
Моментально ловлю эксепшн.
При этом, если загружаю Image1->Picture->Bitmap->LoadFromStream(MyStream);

Дело проходит без проблем.
smile smile smile
Думал может каким то образом не инициализируются элементы класса.
Пробовал так:
MyImages[0]->Picture = new TPicture();
MyImages[0]->Picture->Bitmap = new Graphics::Bitmap();
MyImages[0]->Picture->Bitmap->LoadFromStream(MyStream);
при этом ловлю эксепшн всё в том же месте.

Я в тупике.
Может кто нибудь может объяснить, что ему не нравится ?

Автор: _hunter 28.11.2005, 16:37
а сам Image кто создавать будет?
+ запись
TImage MyImages[0] = Form55->Image1;
абсолютно неправильная: ты в каждой строке создаеш по массиву.

Автор: SydeX 28.11.2005, 16:48
Погодь _hunter,

В каком плане сам Image ?
Я же не создаю новую картинку - я создаю ссылку на имеющийся объект.

С массивом ляп понял. Спасибо.

Автор: _hunter 28.11.2005, 16:57
ссылка то ссылка, но что будет если ты форму закроеш? ( или у тебя код этот в той же форме? )
+ зачем, в таком случае, Picture ( и Bitmap ) создавать? -- они уже в предке созданы должны быть.

Автор: SydeX 28.11.2005, 17:10
Ну закрою - и открою снова, что должно измениться ?
Код в той же форме - объект создаётся по FormCreate при загрузке приложения. Сам по себе никуда не девается закрыта ли форма или нет...
кстати,
ImageGrid[0] = Form55->Image1;
с ссылками...так и не понял
Эта строчка (где ImageGrid это тот же MyImages) чем он тебе так не угодил ?
Это же массив ссылок (* * - по сути)
Где каждая ссылка приравнивается к ссылке на класс. То есть получается массив ссылок на классы.
(TImage * Image1 по определению в Form55.h является соответственно ссылкой на класс)

Автор: _hunter 28.11.2005, 17:29
как эти имаджи создаются я не знаю, но судя по коду они просто болтаются на форме. значит при уничтожении формы и они за компанию грохнутся. а ты где-то будеш продолжать их использовать.
только это мне и не нравится

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)