Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.11.2011, 20:02
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию Вложенные файлы

Как в программу вложить свой файл (текст, картинку, музыку и т.д.) и потом в процессе работы загружать его. Все файлы программы должны быть в одном программном *.ехе файле.
Как быть. Куда добавлять, где смотреть, как прочитать?
В плане внешних фалов я так понимаю используется подобные команды как:
Код:
Image1.Picture.LoadFromFile(GetCurrentDir + '\Image.bmp');
Ответить с цитированием
  #2  
Старый 01.11.2011, 20:06
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

В ресурс.
Создай *.rc файл, в нем напиши что-то типа:
Код:
SOUN1 MUSICS "C:\...\1.wav"
, открой его в brcc32.exe, программа тебе выдаст файл с расширением res, в коде добавь
Код:
{$R ResName.res}
, после чего сможешь выполнить код
Код:
SndPlaySound(L"SOUND1", SND_MEMORY)
.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 01.11.2011, 21:38
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
SndPlaySound(L"SOUND1", SND_MEMORY)
Ошибка в коде...

Кстати о создании *.res файла. В место столь сложных функций можно и лучше воспользоватся простым редактором ресурсов, вроде этого Resource Hacker. Результат один и тот же. Так зачем тратить лишнее время на компиляцию.

Последний раз редактировалось Kaktuz, 01.11.2011 в 21:47.
Ответить с цитированием
  #4  
Старый 01.11.2011, 22:27
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

А если кроме дельфи ничего нет?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 01.11.2011, 22:40
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
А если кроме дельфи ничего нет?
Тогда создавать BAT файлы с генерацией списка и компиляцией

Не совсем понимаю как, но вот при таком способе вложенный файл работает.
Код:
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  
Старый 01.11.2011, 22:46
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

А чего тут понимать? Исходники Дельфи посмотри, как он грузит из ресурса, дополнительно почитай справку и всё станет понятно.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 07.01.2012, 20:00
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Вложенные файлы это хорошо. А если нужно (хочется) что бы они были внешние. Это по той же схеме работает?
Подымал о создании *.dll файла под (win32) что бы потом его еще UPX-сом сжать и норм. Но реально без понятия как.
Ответить с цитированием
  #8  
Старый 07.01.2012, 21:52
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Kaktuz
... Это по той же схеме работает?
Подымал о создании *.dll файла под (win32) что бы потом его еще UPX-сом сжать и норм. Но реально без понятия как.
Работает, если понимаешь, что делаешь и как. Тоже касается DLL или собственного формата.
Чтобы получить более развёрнутый ответ, нужно немного напрячь серое вещество и чётко сформулировать вопрос.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 07.01.2012, 22:33
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Вот создается RES файл. В него засовываются данные. После чего он подключается к проекту и все данные помещаются в готовый EXE файл.
А вот если мне не хочется что бы они были в моем EXE проекта, а были внешние, в одном файле. Подобно RES, но RES не получится сжать UPX, поэтому возможно можно создать файл win32 (подобие файлов с иконками в Windows) и потом его использовать, сжимать.
Ответить с цитированием
  #10  
Старый 07.01.2012, 22:39
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Сжатие файлов не зависит от формата в котором хранятся эти файлы (res, dll или другое), только от самих файлов. Если во внешнем файле хранить jpg никакой UPX не поможет.
При хранении в dll имеются встроенные в ОС механизмы для считывания, при собственном формате, потребуется самому разработать возможность считки.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 10.01.2012, 22:00
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Хорошо. Ну а если тогда пользоваться хотя бы тем же res файлом. Как это осуществить? Как сделать его внешним файлов ресурсов?
Ответить с цитированием
  #12  
Старый 10.01.2012, 22:08
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Никак. Озвучь наконец, чего добиваешься?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #13  
Старый 10.01.2012, 22:22
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Вот к примеру обычная загрузка 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;
Все просто, понятно и прекрасно. Но! Как я понимаю HInstance обозначение внутреннего пути. Хотелось бы сделать его внешним. Что бы наш файл с ресурсами не компилировался внутрь программы, а был внешним.
Ответить с цитированием
  #14  
Старый 10.01.2012, 22:38
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

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;
тебе уже туеву хучу раз сказали, внешним ресурсным файлом может выступать dll, со всеми прелестями загрузки в виде одной, так тобой любимой, строки:
Код:
  Bmp.LoadFromResourceName(hDll, 'BMP256');
где hDll - хендл загруженной dll-ки.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:24.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025