Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 780

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте! У меня такой вопрос - я сделала программу в Delphi, которая воспроизводит мелодии через компонент TMediaPlayer - но сама программа читает файлы с компьютера, а как сделать, чтобы она занесла те файлы в себя и читала их с самой программы а не компьютера?
Спасибо)

Violina Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Violina (статус: Посетитель)
Вопрос отправлен: 22 июля 2008, 15:01
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович

Здравствуйте, Violina!
Есть готовые решения, например http://3d2f.com/programs/20-174-bind-to-exe-library-download.shtml
но можно такое сделать и самостоятельно. Идея в том, что можно что угодно дописать в exe-файл ПОСЛЕ кода. Пишете код, который читает и пишет данные начиная с ЛЮБОГО байта из файла ParamStr(0) (имя Вашего exe-шника, даже если пользователь его переименует) и сохраняет во временный файл (или сразу проигрывайте поток). Компилируете. Получаете результирующий размер файла. Вставляете его в программу вместо "ЛЮБОГО байта". Перекомпилируете программу - размер не изменяется - Ваша программа будет писать и читать дополнительные данные из себя не нанося вред основному коду.
Если изменять дополнительные данные не надо, то можно использоапть такое решение: http://www.delphidabbler.com/articles?article=2

Ответ отправил: Помфюк Владимир Степанович (статус: Абитуриент)
Время отправки: 22 июля 2008, 15:40
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 23 июля 2008, 11:06; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 22 июля 2008, 15:32 [#1]:

использовать ресурсы?
Галочка "подтверждения прочтения" - вселенское зло.
Violina

Violina (статус: Посетитель), 22 июля 2008, 16:07 [#2]:

Помфюк Владимир Степанович, большое Вам спасибо - я скачала по ссылке http://3d2f.com/programs/20-174-bind-to-exe-library-download.shtml (не знааю что это) если Вам, не трудно - расскажите, пожалуйста как это мне может помочь - ато я знакома с Delphi на уровне не на таком уровне высоком... Заранее спасибо...

Вадим К, я Вам так же примного благодарна, толкьо не могли бы мне обьяснить, как именно их использовать? Просто я в этом не соображаю! Спасибо 8)
Вадим К

Вадим К (статус: Академик), 22 июля 2008, 16:25 [#3]:

просто зайдите в поиск по вопросам и поишите по слову ресурс. А там будет понятно, что делать дальше.
Галочка "подтверждения прочтения" - вселенское зло.
Вадим К

Вадим К (статус: Академик), 22 июля 2008, 16:29 [#4]:

вот парочка ссылок
http://articles.org.ru/docum/resurs.php
http://programmersclub.ru/simply-art-resursi/
http://www.delphimaster.ru/articles/usedll/
Галочка "подтверждения прочтения" - вселенское зло.
Violina

Violina (статус: Посетитель), 22 июля 2008, 17:28 [#5]:

Вадим К, большое спасибо - я так и сделала сначала - была вот здесь, например, http://programmersclub.ru/simply-art-resursi/ - но ничего толком не поняла... на других ссылках, что Вы дали - тоже ноль для меня... Есть более легкий спобов привязать к программе mp3 файлы? Ато боюсь я так не справлюсь... для меня это слишком сложно 8(
Вадим К

Вадим К (статус: Академик), 22 июля 2008, 17:33 [#6]:

Вот если бы вы пояснили, зачем так делать. ведь исполняемый файл будет большим.
не проще ли рядом положить?
Чем вызваны опасения?
Галочка "подтверждения прочтения" - вселенское зло.
Violina

Violina (статус: Посетитель), 22 июля 2008, 17:45 [#7]:

Стоп - рядом - хорошая идея - тоесть можно сделать так - что exe файл программы будет в однйо папке с воспроизводимыми файлами и будет воспроизводить их через exe файл программы, независимо от места расположения этой папки? Я правильно поняла?
Вадим К

Вадим К (статус: Академик), 22 июля 2008, 17:56 [#8]:

конечно можно. если ещё красивее - то сделать папочку рядом с программой и положить туда.
Но для полной красоты, нужно что бы ваша программа при старте проверяла, а всё ли нужное на месте и если что - рекомендовала переустановить себя (обратиться к разработчику/почитать мануалы/и так дальше).
для этого понадобяться такие функции-конструкции
Проверим, есть ли файл на месте
if not fileexists('имяфайла') then begin
  ShowMessage('Упс, файл такой то не найден. Программа скоропостижно завершается');
Application.terminate;
end;
Получим путь к файлу, который лежит в папке mp3 рядом c ехе.
ExtractFilePath(Application.ExeName)+'mp3\music.mp3'
некоторые будут рекомендовать писать напрямую - тоесть 'mp3\music.mp3', но так лучше не делать. Если текущий каталог будет сменён (пользователь использовал OpenDialog, запускает с автозагрузки, сделал хитрый ярлык), то программа не будет работать.
Галочка "подтверждения прочтения" - вселенское зло.
Violina

Violina (статус: Посетитель), 22 июля 2008, 18:12 [#9]:

Ух... большое спасибо - пошла пробовать! Может что и выйдет! Еще раз спасибо!
Violina

Violina (статус: Посетитель), 22 июля 2008, 20:27 [#10]:

Ну в общем это снова я - что-то я долазилась что у меня проэкт теперь и запускаться не хочет - но я пока не спешу его делать заново, так как знаю что это не то, если не трудно подскажите мне как его сделать, что бы exe файл находил mp3 файлы, спрятаные в папке рядом с ним... вот грубо - у меня проект, например, лежит в папке Music надиске D - я в этой папке создал папку mp3, например. Как я делала - я на форум клала компонент TMediaPlayer в свойстве FileName выбирала файл sound1.mp3 - получалось типа такого D:\Music\mp3\sound1.mp3 - и оно воспроизводило с той папки файл - но если я все перемещу - то оно оспроизводить не будет - если не трудно, покажите на конкретно моем примере, какой код и где его вписать... ато я 2 часа промучалась и вернулась на начало... Заранее громадейшее спасибо... ато у меня голова уже квадратная.. эх...
Вадим К

Вадим К (статус: Академик), 22 июля 2008, 22:40 [#11]:

что и куда перемещаем?
естественно, если саму программу переместить и не положить рядом файлы с музыкой, то естественно ничего не получиться воспроизвести.
Как проверить, есть ли файл на месте - я написал. Попробуйте переформулировать вопрос - что и куда копируете.

Хотя...
я кажеться знаю. вы прописали путь к mp3 файлу в свойствах компонента MediaPlayer. В таком случае при запуске он естественно будет ругаться, так как ищет по абсолютному пути. Я понимаю, что это удобно, но надо это делать по другому. Есть два пути. Первый - прописать путь относительный. То есть, ручками отредактировать свойство, оставивь там только mp3\sound1.mp3.
Второй способ заключается в том, что свойство остаётся пустым, а заполняется в тот момент, когда надо воспроизводить. Где то так
  MediaPlayer1.FileName := ExtractFilePath(Application.ExeName)+'mp3\music.mp3';
  MediaPlayer1.Play;
Это достаточно правильный вариант.
Галочка "подтверждения прочтения" - вселенское зло.
Violina

Violina (статус: Посетитель), 23 июля 2008, 10:43 [#12]:

Еще раз большое Вам спасибо - но у меня все равно пока не получается - щас напишу что сделала - может пдскажите, что не правильно сделала... в общем я просто щас на форму кладу компонент TMediaPlayer и на FormCreate пишу

MediaPlayer1.Open;
MediaPlayer1.FileName := ExtractFilePath(Application.ExeName)+'mp3\Bayou.mp3';
MediaPlayer1.Play;

где названия mp3 файла Bayou.mp3 лежит в папке mp3 рядом с Project1.exe

Спасибо...
Вадим К

Вадим К (статус: Академик), 23 июля 2008, 11:03 [#13]:

подумайте головой, как компонент может открыть файл, если он ещё не знает, какой? Как минимум переставте местами первые две строки.
Галочка "подтверждения прочтения" - вселенское зло.
Violina

Violina (статус: Посетитель), 23 июля 2008, 11:06 [#14]:

Точно... большое спасибо... 8) Аж стыдно как-то... спасибо)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:28
Выполнено за 0.02 сек.