C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: ImageList  (Прочитано 4647 раз)
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


ImageList
« : 18 Сентябрь 2013, 17:16:08 »

После старта программа прочтет данные из внешнего источника и сделает следующее:
расположит на форме уже готовую нужную картинку подложку, на картинке будет, например, нарисован фрагмент улицы. Согласно данным полученным из внешнего источника, программа также должна создать несколько ImageList и заполнить их рисунками. После этого надо расположить  рисунки из этих ImageList поверх картинки подложки в нужных местах.
Вопрос такой: как лучше организовать перенос картинок из ImageList-ов на поверхность картинки подложки? Надо будет динамически создавать компоненты Image располагать их в нужных местах картинки подложки и загружать в эти динамические Image картинки из ImageList?
Или как правильно организовать такой перенос картинок из ImageList-ов на поверхность картинки подложки?
Спасибо.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: ImageList
« Ответ #1 : 20 Сентябрь 2013, 12:23:15 »

Для IntraWEB приложения удалось сделать таким кодом:
Код
void __fastcall TIWForm1::IWButton1Click(TObject *Sender)
{
 std::auto_ptrTJPEGImage> JPG(new TJPEGImage);
 JPG->LoadFromFile("wwwroot\\images\\map1.jpg");
 IWImage1->Picture->Bitmap->Assign(JPG.get());
}
//---------------------------------------------------------------------------
 
void __fastcall TIWForm1::IWButton2Click(TObject *Sender)
{
int X = 20;
int Y = 20;
for (int i = 0; i IWImageList1->Count; i++)
{
 IWImageList1->Draw(IWImage1->Picture->Bitmap->Canvas, X, Y, i);
 X = X + 100;
}
}
 

Скажите почему картинки успешно располагаются поверх только если IWImage1 не пустой?
Если пробовать код IWButton2Click без предварительного нажатия IWButton1Click то картинки из IWImageList1 не отображаются.
Почему нельзя переносить картинки из IWImageList в пустой IWImage?
« Последнее редактирование: 20 Сентябрь 2013, 12:34:42 от SilverFish » Записан
volvo877
Глобальный модератор


Сказали спасибо: +736/-1
Offline

Сообщений: 891


Re: ImageList
« Ответ #2 : 20 Сентябрь 2013, 12:51:11 »

Потому что Bitmap еще не создан. Если сделать:
Код
void __fastcall TIWForm1::IWButton2Click(TObject *Sender)
{
   int X = 20;
   int Y = 20;
   IWImage1->Picture->Bitmap = new TBitmap;
   IWImage1->Picture->Bitmap->SetSize(IWImage1->Width, IWImage1->Height);
   for (int i = 0; i IWImageList1->Count; i++)
   {
       IWImageList1->Draw(IWImage1->Picture->Bitmap->Canvas, X, Y, i);
       X = X + 100;
   }
}
 
, то все будет прекрасно отображаться.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: ImageList
« Ответ #3 : 20 Сентябрь 2013, 16:08:18 »

Большое спасибо.
Подскажите, пожалуйста, а не будет ли утечки памяти?
IWImage1->Picture->Bitmap = new TBitmap;
нигде нет delete.
Записан
volvo877
Глобальный модератор


Сказали спасибо: +736/-1
Offline

Сообщений: 891


Re: ImageList
« Ответ #4 : 20 Сентябрь 2013, 16:25:04 »

А что, после вот этого кода:
Цитировать
Код
IWImage1->Picture->Bitmap->Assign(JPG.get());
тоже будет утечка? Вообще-то за этим должен следить TIWImage. Проверять, заполнен ли Bitmap чем-нибудь, и если да - то вызывать деструктор объекта...
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: ImageList
« Ответ #5 : 20 Сентябрь 2013, 16:34:38 »

Цитировать
тоже будет утечка?

Тут точно не будет т.к. auto_ptr 

Цитировать
Вообще-то за этим должен следить TIWImage.

Ясно. Спасибо.

А еще такой вопрос...
Почему все перестает работать если изменить код и написать так:
Код
void __fastcall TIWForm1::IWButton1Click(TObject *Sender)
{
 IWImage1->Picture->LoadFromFile("wwwroot\\images\\map1.jpg");
//std::auto_ptr JPG(new TJPEGImage);
//JPG->LoadFromFile("wwwroot\\images\\map1.jpg");
//IWImage1->Picture->Bitmap->Assign(JPG.get());
}

Теперь если вызвать IWButton2Click все пропадает и главная картинка и картинки из IWImageList1 не появляются.


Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


« Ответ #6 : 12 Октябрь 2013, 10:54:32 »

должно работать 
у тебя библиотечка подключена?
#include
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.108 секунд. Запросов: 21.