powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование графических ресурсов в Делфи
4 сообщений из 4, страница 1 из 1
Использование графических ресурсов в Делфи
    #32353164
*E*G*O*R*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди простите меня за такое каверзные вопросы но просто очень нужно.

Кто работал с ресурсами в делфи.

Задача мне нужно загрузить файл ресурсов в Image.
Ресурсы Я делаю в Image Editor
что далбше.
Как мне их загрузить и как его вывести????
...
Рейтинг: 0 / 0
Использование графических ресурсов в Делфи
    #32353166
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это оправданно только если тебе нужно в рантайме грузить разные картинки в зависимости от каких-то условий или загружать одну картинку много раз. А иначе проще хранить данные прямо в TImage на форме
...
Рейтинг: 0 / 0
Использование графических ресурсов в Делфи
    #32353231
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изображения и курсоры могут храниться в файлах ресурсов (RES) и прилинковываться (связаваться) к EXE-файлу вашего приложения. RES-файлы могут создаваться с помощью Delphi утилит Image Editor и Borland Resource Workshop, входящие в поставку Delphi RAD Pack. Изображения и курсоры, хранимые в RES-файлах (после упаковки их в EXE или DLL) могут быть извлечены с помощью API функций LoadBitmap и LoadCursor соответственно.

Функция API LoadBitmap определена следующим образом:

Код: plaintext
function LoadBitmap(Instance: THandle; BitmapName: PChar): HBitmap;     


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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
procedure TForm1.Button1Click(Sender: TObject);
var
Bmp: TBitmap;
begin
Bmp := TBitmap.Create;
Bmp.Handle := LoadBitmap(HInstance,'BITMAP_1');
Canvas.Draw( 0 ,  0 , Bmp);
Bmp.Free;
end;


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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
HResInfo: THandle;
MemHandle: THandle;
Stream: TMemoryStream;
ResPtr: PByte;
ResSize: Longint;
begin
BMF.bfType := BM;
{Ищем, загружаем и блокируем ресурс, содержащий BITMAP_1}
HResInfo := FindResource(HInstance, 'BITMAP_1', RT_Bitmap);
MemHandle := LoadResource(HInstance, HResInfo);
ResPtr := LockResource(MemHandle);


{Создаем Memory-поток, устанавливаем его размер, записываем 
туда заголовок изображения и, наконец, само изображение }
Stream := TMemoryStream.Create;
ResSize := SizeofResource(HInstance, HResInfo);
Stream.SetSize(ResSize + SizeOf(BMF));
Stream.Write(BMF, SizeOf(BMF));
Stream.Write(ResPtr^, ResSize);


{Освобождаем поток и сбрасываем его позицию в  0 }
FreeResource(MemHandle);
Stream.Seek( 0 ,  0 );


{Создаем TBitmap и загружаем изображение из MemoryStream}
Bmp := TBitmap.Create;
Bmp.LoadFromStream(Stream);
Canvas.Draw( 0 ,  0 , Bmp);
Bmp.Free;
Stream.Free;
end;
...
Рейтинг: 0 / 0
Использование графических ресурсов в Делфи
    #32353293
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот еще пример (из моего проекта, Delphi5):

1. сначала делаем текстовой файл (icons.rc), в нем примерно такое:

1 BITMAP BSM95.BMP
2 BITMAP ELENA.BMP
3 BITMAP PIT80.BMP
4 BITMAP ALP.BMP
5 BITMAP TRT3.BMP
6 BITMAP DIA.BMP
103 ICON MAIN11.ICO
104 ICON MAIN21.ICO
105 ICON MAIN31.ICO

это соотв. номер ресурса, его тип и имя файла.
(номер задан нами)

2. Компилируем через BRCC32
(Borland Resource Compiler, находится в bin-директории Дельфи)
его опции видны при вызове без параметров.
получаем файл icons.res

3. В программе, в форме в которой надо вызвать из ресурса картинку,
после implementation ставим
{$R icons.res}

4. вызываем примерно так:
Image1.Picture.Bitmap.LoadFromResourceID( HInstance, 3 );
где Image1 - компонент TImage на форме,
HInstance- есть в хелпе,
'3' - номер ресурса из т.1, т.е должна показаться картинка
соответствующая файлу 'PIT80.BMP'
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование графических ресурсов в Делфи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]