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


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

Сообщений: 786


IWImageList1->Draw
« : 20 Сентябрь 2013, 22:15:28 »

Подскажите, пожалуйста, если картинки постоянно накладываются друг на друга, то нижние картинки стираются или происходит увеличение файла т.к. картинки складываются в стопку?
Вот код из 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());
IWCheckBox1->Enabled = true;
}
 
//затем по таймеру на фон накладываются маленькие картинки
void __fastcall TIWForm1::IWButton2Click(TObject *Sender)
{
 
if(IWImage1->Picture->Bitmap->Empty)
{
 throw Exception(L"Не загружена картинка подложки");
}
 
int X = 20;
int Y = 20;
int row = 1;
int gen = 0;
 
for (int i = 0; i IWImageList1->Count; i++)
{
 gen = Random(27);
 IWImageList1->Draw(IWImage1->Picture->Bitmap->Canvas, X, Y, gen);
 X = X + 64 + 30;
 //разбить на строки, всего 28 картинок
 if(row % 7 == 0)
  {
Y = Y + 64 + 30;
X = 20;
  }
 row++;
}
 
}
 
void __fastcall TIWForm1::IWTimer1Timer(TObject *Sender)
{
IWButton2Click(0);
}
Записан
volvo877
Глобальный модератор


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

Сообщений: 891


Re: IWImageList1->Draw
« Ответ #1 : 21 Сентябрь 2013, 14:17:35 »

Исходников TIWImageList нет, но у его предка, у TCustomImageList, рисование осуществляется через BitBlt, то есть новое изображение замещает собой старое. Скорее всего, и здесь - то же самое.
Записан
SilverFish
Участник


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

Сообщений: 786


Re: IWImageList1->Draw
« Ответ #2 : 21 Сентябрь 2013, 15:17:42 »

ОГРОМНОЕ СПАСИБО!
Записан
SilverFish
Участник


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

Сообщений: 786


« Ответ #3 : 22 Сентябрь 2013, 15:06:49 »

При срабатывании таймера страница полностью перегружается. А можно ли добиться того, чтобы фоновая картинка не перегружалась, а перегружались бы только маленькие картинки, которые сверху фоновой картинки?
Пробовала использовать событие TIWForm1::IWTimer1AsyncTimer. В точках останова видно, что это событие отрабатывается, однако картинки не меняются. В связи с этим вообще не понятно в чем может быть польза от события OnAsyncTimer?

Код
#include 
#pragma hdrstop
#include
#include
#include "ServerController.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
__fastcall TIWForm1::TIWForm1(TComponent* Owner)
       : TIWAppForm(Owner)
{
 
}
//---------------------------------------------------------------------------
 
void setAsMainForm() {
 TIWForm1::SetAsMainForm();
}
#pragma startup setAsMainForm
 
//1. Загрузить картинку фон
void __fastcall TIWForm1::IWButton1Click(TObject *Sender)
{
std::auto_ptrTJPEGImage> JPG(new TJPEGImage);
JPG->LoadFromFile("wwwroot\\images\\map1.jpg");
IWImage1->Picture->Bitmap->Assign(JPG.get());
}
//---------------------------------------------------------------------------
//2. На фон поставить 28 маленьких картинок
void __fastcall TIWForm1::IWButton2Click(TObject *Sender)
{
 
if(IWImage1->Picture->Bitmap->Empty)
{
 throw Exception(L"Фоновая картинка не загружена");
}
 
int X = 20;
int Y = 20;
int row = 1;
int gen = 0;
 
for (int i = 0; i IWImageList1->Count; i++)
{
 gen = Random(27);
 IWImageList1->Draw(IWImage1->Picture->Bitmap->Canvas, X, Y, gen);
 X = X + 64 + 30;
 //28 картинок размером 64х64 пикселя отображаем в 4 строки
 if(row % 7 == 0)
  {
  Y = Y + 64 + 30;
  X = 20;
  }
 row++;
}
 
}
//---------------------------------------------------------------------------
 
void __fastcall TIWForm1::IWAppFormCreate(TObject *Sender)
{
 Randomize();
}
//---------------------------------------------------------------------------
 
void __fastcall TIWForm1::IWTimer1Timer(TObject *Sender)
{
IWButton2Click(0);
}
//-------------------------------------------------------------------------
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

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