:: Меню ::

Головна
Передмова
СЕРЕДОВИЩЕ РОЗРОБКИ C++ BUILDER
Початок роботи
Перший проект
ПРАКТИКУМ ПРОГРАМУВАННЯ
Графіка
Мультимедіа
Бази даних
Компонент програміста
Консольне застосування
Довідкова система
Створення настановного диска
Приклади програм
C++ Builder — короткий довідник
Книга для гостей
Контакти
Добавити у вибране

:: Друзі ::

 

:: Лічильники ::

=

 

 

 

 

 

Підключення файлу ресурсів



Для того, щоб ресурси, що знаходяться у файлі ресурсів, були доступні програмі, в текст програми треба помістити інструкцію (директиву), яка повідомить компілятор, що у виконуваний файл слід додати вміст файлу ресурсів.

У загальному вигляді ця директива виглядає таким чином:

#pragma resource Файлресурсов

де Файлресурсов — ім'я файлу ресурсів.

Наприклад, для програми flight_l директива, що забезпечує включення вмісту файлу ресурсів у виконуваний файл, виглядає так:

#pragma resource "images.res"

Завантажити бітовий образ з ресурсу можна за допомогою методу Loadfromresourcename який має два параметри: ідентифікатор програми і ім'я ресурсу. Як ідентифікатор програми використовується глобальна змінна Hinstance. Ім'я ресурсу має бути представлене у вигляді строкової константи.

Наприклад, в програмі flight_l інструкція завантаження фону з ресурсу виглядає так:

back->loadfromresourcename((int)Hinstance,"factory");

Як приклад в лістингу 3.8 приведений фрагмент програми flight_l — функція Tform1:: Formcreate яка забезпечує завантаження бітових образів з ресурсів.

 Лістинг 3.8. Завантаження бітових образів з ресурсу 

// підключити  файл ресурсів,   в якому знаходяться 
//  необхідні програмі бітові образи 
#pragma resource  "images.res"
void__fastcall Tforml::formcreate(Tobject *Sender)
{
// завантажити фоновий малюнок з ресурсу
back = new Graphics::tbitmap();
back->loadfromresourcename((int)Hinstance,"factory");
// встановити розмір клієнтської (робочою) області форми 
 //відповідно до розміру фонового малюнка 
Clientwidth = back->width; 
Clientheight = back->height;
// завантажити зображення об'єкту з ресурсу 
sprite = new Graphics::tbitmap();
sprite->loadfromresourcename((int)Hinstance,"aplane"); 
sprite->transparent = 
   true;
x=-20; // щоб літак "вилітав" з-за лівого кордону вікна
у=20;
}

Переваги завантаження картинок з ресурсу програми очевидні: при розповсюдженні програми не треба піклуватися про те, щоб під час роботи програми були доступні файли ілюстрацій, оскільки всі необхідні програмі картинки знаходяться у виконуваному файлі.

Тепер розглянемо, як можна реалізувати в діалоговому вікні програми виведення банера, що є послідовністю картинок, що змінюють один одного (кадрів). Кадри банера зазвичай знаходяться в одному файлі або в одному ресурсі. На початку роботи програми вони завантажуються в буфер (об'єкт типу Tbitmap). Виведення кадрів банера зазвичай виконує функція обробки сигналу від таймера (події ontimer), яка виділяє черговий кадр і виводить його на поверхню форми.

Вивести кадр банера (фрагмент бітового образу) на поверхню форми можна за допомогою методу copyrect який копіює прямокутну область однієї графічної поверхні на іншу.

Інструкція застосування методу Copyrect у загальному вигляді виглядає так:
Canvasl->copyrect(Область1,   Canvas2,   Область2)

де:

  •  Canvas1 — поверхня, на яку виконується копіювання;
  •  Canvas2 — поверхня, з якою виконується копіювання;
  •  Область1 — структура типу Trectяка задає положення і розмір області, куди виконується копіювання (приймач);
  •  Область2 — структура типу Trect яка задає положення і розмір області, звідки виконується копіювання (джерело).


Визначити прямокутну область, заповнити поля структури Trect можна за допомогою функції Rect або Bounds. Функції Rect треба передати як параметри координати лівого верхнього і правого ніжнего кутів області, функції Bounds — координати лівого верхнього кута і розмір області. Наприклад, якщо треба визначити прямокутну область, то це можна зробити так: ret = Rect(x1,y1,x2,y2) або так: ret = Bounds(x1,y1,w,h)

де x1, y1 — координати лівого верхнього кута області; х2, у2 — координати правого нижнього кута області; w і h — ширина і висота області.

Наступна програма (її текст приведений в лістингу 3.9) виводить в діалогове вікно банер — рекламне повідомлення. На мал. 3.23 приведені кадри цього банера (вміст файлу baner.bmp), а на мал. 3.24 — діалогове вікно. Форма програми містить один-єдиний компонент — таймер.



Мал. 3.23. Кадри банера



Мал. 3.24. Відтворення банера у вікні програми


Лістинг 3.9. Банер (baner.h, baner_.cpp)

// baner.h
class Tforml : public Tform
{ published:
Ttimer *Timerl;
void__fastcall   Formcreate(Tobject *Sender);
void __fastcall  Timeritimer(Tobject *Sender);
private:
Graphics::tbitmap *baner; // банер
Trect kadr;               // кадр банера
Trect scr;                // область відтворення банера
int w, h;                 // розмір кадру
int з;                    // номер відтворного кадру
public:
_fastcall Tforml(Tcomponent* Owner);
};
// baner_.cpp
#define FBANER "borland.bmp" // банер
#define NKADR 4 // кількість кадрів в банері
void__fastcall Tforml::formcreate(Tobject *Sender)
{
baner = new Graphics::tbitmap();
baner->loadfromfile(FBANER);   // завантажити банер
h = baner->height;
w = baner->width / NKADR;
scr = Rect(10,10,10+w,10+h); // положення і розмір області
// відтворення банера kadr = Rect(0,0,w,h);    
// положення і розмір першого кадру
//у банері 
}
//  обробка  події Ontimer
void__fastcall Tforml:rtimerltimer(Tobject *Sender)
{
// вивести кадр банера
Canvas->copyrect(scr,baner->canvas,kadr);
// підготуватися до відтворення наступного кадру
if (з < NKADR)
{
// відтворний в даний момент
// кадр — не останній
с++;
kadr.Left += w;
kadr.Right += w;
 }
else
{
з = 0;
kadr.Left = 0;
kadr.Right = w;
 } 
 }

Програма складається з двох функцій. Функція Tform1:: Form-create створює об'єкт Tbitmap і зафужаєт в нього банер — BMP-файл, в якому знаходяться кадри банера. Потім, використовуючи інформацію про розмір завантаженого бітового образу, функція встановлює значення характеристик кадру: висоту і ширину.

Основну роботу в програмі виконує функція обробки події ontimer яка виділяє з бітового образу Baner черговий кадр і виводить його на поверхню форми. Виділення кадру і його отрісовку шляхом копіювання фрагмента картинки з однієї поверхні на іншу виконує метод copyrect (мал. 3.25)якому як параметри передаються координати області, куди потрібно копіювати, поверхня і положення області, звідки потрібно копіювати. Положення фрагмента у фільмі, тобто координата х лівого верхнього кута, визначається множенням ширини кадру на номер поточного кадру.



Мал. 3.25. Метод Copyrect копіює в область Rect1 поверхні Canvas1 область Rect2 з поверхні Canvas2

 


стеклопластиковые лодки, Москва Дешевые gorod-krasnodar.com/ankets/cheap .
x

:: Наша кнопка ::

Отримати код:

Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


:: Реклама ::


:: Посилання ::

-


 

 

 


Copyright by Zvircom © 2009