Ресурсы в exe
От: Аноним  
Дата: 14.07.02 06:53
Оценка:
Всем привет! Вопрос по Delphi 6.
Как упаковать в ехе-файл другие файлы (картинки, звук, видео и т.п.) и как обратиться к ним (в коде этого-же ехе-шника)? Хотелось что-бы все, что нужно для моей программы хранилось в ней-самой-же.
Если тут много оъяснять, где это поподробнее расписано?
Спасибо.
Re: Ресурсы в exe
От: Hacker_Delphi Россия  
Дата: 15.07.02 02:04
Оценка: 9 (2)
Здравствуйте Аноним, Вы писали:

А>Всем привет! Вопрос по Delphi 6.

А>Как упаковать в ехе-файл другие файлы (картинки, звук, видео и т.п.) и как обратиться к ним (в коде этого-же ехе-шника)? Хотелось что-бы все, что нужно для моей программы хранилось в ней-самой-же.
А>Если тут много оъяснять, где это поподробнее расписано?
А>Спасибо.
Создаешь rc файл. В нем описываешь свои ресурсы примерно так:

myres.rc:
BMP1 BITMAP bmp1.bmp
BMP2 BITMAP bmp2.bmp
SOMEDATA RCDATA somedata_file.something

То есть, .BMP картинки кидаешь как BITMAP остальные данные — как RCDATA.
далее компилируешь такой командой:
brc32 myres.rc

А в самой программе их грузишь так:
{$R myres.res}
//Эта строка их прилинковала к EXE

procedure SomeInitialization;
var
  RS: TResourceStream;  
  Size: integer;
begin
  FBMP1 := TBitmap.Create;
  FBMP1.LoadFromResourceName(hInstance, 'BMP1');
// то же самое для BMP2
  RS := TResourceStream.Create(hInstance, 'SOMEDATA', RT_RCDATA);
  Size := RS.Size;
  SOMEDATA := AllocMem(Size)
  RS.Read(SOMEDATA^, Size);
  RS.Free;
end;

Вот и все
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re: Ресурсы в exe
От: SSI Россия  
Дата: 15.07.02 17:25
Оценка:
Спасибо Hacker_Delphi!
Попробую разобраться.
Beeper
Re[2]: hInstance
От: Хитрик Денис Россия RSDN
Дата: 17.07.03 06:54
Оценка:
Здравствуйте, Hacker_Delphi, Вы писали:

H_D>  FBMP1.LoadFromResourceName(hInstance, 'BMP1');


А где можно поподробнее о сабже узнать? Чего это такое?
hInstance уникален для .exe? для .bpl? Или, по-другому, SysInit.pas цепляется к пакету, екзешнику или к каждому модулю?

В хелпе искал, но, видимо, не справиться мне с его логикой
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[3]: hInstance
От: Hacker_Delphi Россия  
Дата: 17.07.03 07:57
Оценка:
Здравствуйте, Хитрик Денис, Вы писали:

ХД>А где можно поподробнее о сабже узнать? Чего это такое?

Надо было начинать программировать еще под Windows 3.1 там все только через API делалось — там все эти понятия и появились...
ХД>hInstance уникален для .exe? для .bpl? Или, по-другому, SysInit.pas цепляется к пакету, екзешнику или к каждому модулю?

для .exe, .bpl, .dll это — hmodule...
... << RSDN@Home 1.1 alpha 1 >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[2]: Ресурсы в exe
От: WD  
Дата: 17.07.03 10:54
Оценка:
Здравствуйте, Hacker_Delphi, Вы писали:
H_D>
H_D>procedure SomeInitialization;
H_D>var
H_D>  RS: TResourceStream;  
H_D>  Size: integer;
H_D>begin
H_D>  FBMP1 := TBitmap.Create;
H_D>  FBMP1.LoadFromResourceName(hInstance, 'BMP1');
H_D>// то же самое для BMP2
H_D>  RS := TResourceStream.Create(hInstance, 'SOMEDATA','RT_RCDATA');
H_D>  Size := RS.Size;
H_D>  SOMEDATA := AllocMem(Size)
H_D>  RS.Read(SOMEDATA^, Size);
H_D>  RS.Free;
H_D>end;
H_D>


а какой типа должен быть у SOMEDATA ? pointer ?
Re[3]: Ресурсы в exe
От: Hacker_Delphi Россия  
Дата: 17.07.03 11:12
Оценка:
Здравствуйте, WD, Вы писали:

WD>а какой типа должен быть у SOMEDATA ? pointer ?

Pointer, PChar, PInteger, PWord и так далее... короче — любой указатель, что очевидно из конструкции SOMEDATA^

Я, кстати, обычно пользую PChar — тогда можно пользоваться SOMEDATA[0]...

... << RSDN@Home 1.1 alpha 1 >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[4]: hInstance
От: Хитрик Денис Россия RSDN
Дата: 23.07.03 12:01
Оценка:
Здравствуйте, Hacker_Delphi, Вы писали:

ХД>>А где можно поподробнее о сабже узнать? Чего это такое?

H_D>Надо было начинать программировать еще под Windows 3.1 там все только через API делалось — там все эти понятия и появились...



ХД>>hInstance уникален для .exe? для .bpl? Или, по-другому, SysInit.pas цепляется к пакету, екзешнику или к каждому модулю?

H_D>для .exe, .bpl, .dll это — hmodule...

У меня такой вопрос, в справке Дельфи об этом (о переменной hInstance) есть хоть что-нибудь? Или постигать всё только по исходникам?
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Help D7
От: akasoft Россия  
Дата: 23.07.03 19:01
Оценка: 10 (1)
Здравствуйте, Хитрик Денис, Вы писали:


ХД>У меня такой вопрос, в справке Дельфи об этом (о переменной hInstance) есть хоть что-нибудь? Или постигать всё только по исходникам?


Из справки D7. Курсивом выделены линки на доп. информацию, опять же в справке.

HInstance variable

Indicates the handle for a module.

Unit

SysInit

Category

application-level information

Delphi syntax:

var HInstance: LongWord;

C++ syntax:

extern PACKAGE int HInstance;

Description

HInstance provides a unique instance handle for the application or library.

... << RSDN@Home 1.1 alpha 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.