![]() |
|
#1
|
|||
|
|||
![]() Как в программу вложить свой файл (текст, картинку, музыку и т.д.) и потом в процессе работы загружать его. Все файлы программы должны быть в одном программном *.ехе файле.
Как быть. Куда добавлять, где смотреть, как прочитать? В плане внешних фалов я так понимаю используется подобные команды как: Код:
Image1.Picture.LoadFromFile(GetCurrentDir + '\Image.bmp'); |
#2
|
||||
|
||||
![]() В ресурс.
Создай *.rc файл, в нем напиши что-то типа: Код:
SOUN1 MUSICS "C:\...\1.wav" Код:
{$R ResName.res} Код:
SndPlaySound(L"SOUND1", SND_MEMORY) — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
![]() Цитата:
![]() Кстати о создании *.res файла. В место столь сложных функций можно и лучше воспользоватся простым редактором ресурсов, вроде этого Resource Hacker. Результат один и тот же. Так зачем тратить лишнее время на компиляцию. Последний раз редактировалось Kaktuz, 01.11.2011 в 21:47. |
#4
|
||||
|
||||
![]() А если кроме дельфи ничего нет?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
![]() Цитата:
![]() Не совсем понимаю как, но вот при таком способе вложенный файл работает. Код:
procedure TForm1.Button3Click(Sender: TObject); var h: THandle; p: pointer; begin h := FindResource(hInstance, 'SOUND', 'MUSIC'); h := LoadResource(hInstance, h); p := LockResource(h); sndPlaySound(p, SND_MEMORY or SND_SYNC); UnLockResource(h); FreeResource(h); end; Последний раз редактировалось Kaktuz, 01.11.2011 в 22:45. |
#6
|
||||
|
||||
![]() А чего тут понимать? Исходники Дельфи посмотри, как он грузит из ресурса, дополнительно почитай справку и всё станет понятно.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
|||
|
|||
![]() Вложенные файлы это хорошо. А если нужно (хочется) что бы они были внешние. Это по той же схеме работает?
Подымал о создании *.dll файла под (win32) что бы потом его еще UPX-сом сжать и норм. Но реально без понятия как. |
#8
|
||||
|
||||
![]() Цитата:
Чтобы получить более развёрнутый ответ, нужно немного напрячь серое вещество и чётко сформулировать вопрос. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
|||
|
|||
![]() Вот создается RES файл. В него засовываются данные. После чего он подключается к проекту и все данные помещаются в готовый EXE файл.
А вот если мне не хочется что бы они были в моем EXE проекта, а были внешние, в одном файле. Подобно RES, но RES не получится сжать UPX, поэтому возможно можно создать файл win32 (подобие файлов с иконками в Windows) и потом его использовать, сжимать. |
#10
|
||||
|
||||
![]() Сжатие файлов не зависит от формата в котором хранятся эти файлы (res, dll или другое), только от самих файлов. Если во внешнем файле хранить jpg никакой UPX не поможет.
При хранении в dll имеются встроенные в ОС механизмы для считывания, при собственном формате, потребуется самому разработать возможность считки. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#11
|
|||
|
|||
![]() Хорошо. Ну а если тогда пользоваться хотя бы тем же res файлом. Как это осуществить? Как сделать его внешним файлов ресурсов?
|
#12
|
||||
|
||||
![]() Никак. Озвучь наконец, чего добиваешься?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#13
|
|||
|
|||
![]() Вот к примеру обычная загрузка Bitmap из ресурсов программы.
Код:
{$R Res.res} procedure TForm1.Button1Click(Sender: TObject); var Bmp: TBitmap; begin Bmp := TBitmap.Create; Bmp.LoadFromResourceName(HInstance, 'BMP256'); Image1.Picture.Assign(Bmp); Bmp.FreeImage; end; |
#14
|
||||
|
||||
![]() hInstance - указатель на хендл исполняемого файла (Indicates the handle for a module).
Эта красота, как ты выразился, "прячет" внутри себя подобный код: Код:
procedure TForm1.Button3Click(Sender: TObject); var h: THandle; p: pointer; begin h := FindResource(hInstance, 'SOUND', 'MUSIC'); h := LoadResource(hInstance, h); p := LockResource(h); // bla-bla-bla UnLockResource(h); FreeResource(h); end; Код:
Bmp.LoadFromResourceName(hDll, 'BMP256'); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |