Завантаження зображення або курсору з res-файлу - delphi sources faq

Завантаження зображень і курсорів з RES-файлів

Зображення і курсори можуть зберігатися в файлах ресурсів (RES) і прілінковивают (связаваться) до EXE-файлу вашої програми. RES-файли можуть створюватися за допомогою Delphi утиліт Image Editor і Borland Resource Workshop, що входять в поставку Delphi RAD Pack. Зображення і курсори, збережені в RES-файлах (після упаковки їх в EXE або DLL) можуть бути вилучені за допомогою API функцій LoadBitmap і LoadCursor відповідно.

Функція API LoadBitmap визначена наступним чином:

Перший параметр повинен містити дескриптор модуля (EXE або DLL), що містить файл RES, з якого ви хочете отримати ресурс. Delphi зберігає дескриптор запущеного EXE-файлу в глобальній змінній з ім'ям Hinstance. У наведеному нижче прикладі ми припускаємо, що модуль, з якого ми намагаємося завантажити зображення, - ваше додаток. Проте, модуль міг би бути іншим EXE- або DLL-файлом. Наступний приклад завантажує зображення з ім'ям BITMAP_1 з RES-файлу, прілінкованние до EXE-файлу програми:

Є один недолік використання API виклику LoadBitmap: LoadBitmap все ж є API викликом Windows 3.0, і вантажить зображення тільки як DDB (Device Dependent Bitmaps). Це може викликати проблеми з палітрою кольорів при завантаженні DIB (Device Independent Bitmaps) з RES-файлу. Наведений нижче код може використовуватися для отримання DIB-ів з RES-файлів. Даний код завантажує зображення як загальний ресурс, передає його в потік, після чого робить Delphi виклик LoadFromStream, який реалізує палітру автоматично.

Функція API LoadCursor визначена наступним чином:

Потім додайте наступні два рядки до обробника події форми OnCreate:

або ж ви можете змінити один зі стандартних курсорів Delphi як показано нижче (константи Cursor описані в електронній довідці в статті Cursors Property):

Примітка: в нормальній ситуації необхідно видалити будь-які ресурси курсорів за допомогою DeleteCursor, тим не менш, в Delphi в цьому немає необхідності, оскільки Delphi сама видаляє всі курсори з масиву Cursors.