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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 1 988

/ вопрос решён /

Здравствуйте, уважаемые эксперты! Моя программа использует avi файл. Подскажите как упаковать этот файл в ресурс, а то приходится указывать путь к нему, а это очень не удобно.

Ученый Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Ученый (статус: 8-ой класс)
Вопрос отправлен: 12 октября 2008, 17:30
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Аксион

Здравствуйте, Ученый!
Сначала кидаем avi ролик на диск с (для быстрого доступа) обзываем его например: avi.avi
Создаем файл avi.RC и в него записываем: avi RCDATA "avi.avi" сохраняем.
Входим в командную строку (cmd) и пишем команду: brcc32 C:\avi.RC
На диске с появится файл avi.res с запакованым в нём avi роликом, осталось его только подключить и использовать...

Ответ отправил: Аксион (статус: 4-ый класс)
Время отправки: 12 октября 2008, 17:49
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, Ученый!
Сначала вы заворачиваете авик в ресурс, как описал Блазер. А когда вам надо его проиграть, то сперва выворачиваете ваш ресурс во временный файл, а затем проигрываете его проигрывателем MediaPlayer. После того, как файл стал не нужным, то удаляете его.

{ Генерим имя врменненого файла }
function GetTempFile : String;
var
   TempDir,
   TempFile : packed array [0..MAX_PATH] of Char;
begin
   GetTempPath(MAX_PATH, TempDir);
   Windows.GetTempFileName(TempDir, 'avi', 0, TempFile);
   Result := TempFile;
end;
procedure PlayMyAvi;
var
   ResStream : TResourceStream;
   tmpFile : String;
begin
   tmpFile := GetTempFile;
   ResStream := TResourceStream.Create(Handle, '<имя ресурса>', RT_RCDATA);
   ResStream.SaveToFile(tmpFile);
   ResStream.Free;
{ тут проигрываем его с помощью MediaPlayer. Оставляю это за вами. }
   DeleteFile(tmpFile);
end;

P.S. Жклаю удачи.

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 13 октября 2008, 11:27
Оценка за ответ: 5

Комментарий к оценке: СПАСИБО!

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

Всего сообщений: 7; последнее сообщение — 13 октября 2008, 14:02; участников в обсуждении: 2.
Ученый

Ученый (статус: 8-ой класс), 12 октября 2008, 18:05 [#1]:

to Блазер! А как можно теперь проиграть avi используя ресурс? Расскажите пожалуйста, если это вас не затруднит...
Ученый

Ученый (статус: 8-ой класс), 13 октября 2008, 12:07 [#2]:

to Feniks. Делаю как вы мне сказали, выдает ошибку [Error] Unit1.pas(40): Undeclared identifier: 'Handle'. И ещё не могли бы вы мне помочь с кодом в том месте где вы пишете { тут проигрываем его с помощью MediaPlayer.}. Заранее спасибо!
Вадим К

Вадим К (статус: Академик), 13 октября 2008, 12:11 [#3]:

to Ученый. Если дефли ругается на handle, то это значит, что этот юнит не имеет формы. Не удалили ли Вы случайно её?
Галочка "подтверждения прочтения" - вселенское зло.
Ученый

Ученый (статус: 8-ой класс), 13 октября 2008, 12:19 [#4]:

to Вадим К . Набираю следущее:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
Panel1: TPanel;
MediaPlayer1: TMediaPlayer;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
function GetTempFile : String;
var
TempDir,
TempFile : packed array [0..MAX_PATH] of Char;
begin
GetTempPath(MAX_PATH, TempDir);
Windows.GetTempFileName(TempDir, 'avi', 0, TempFile);
Result := TempFile;
end;
procedure PlayMyAvi;
var
ResStream : TResourceStream;
tmpFile : String;
begin
tmpFile := GetTempFile;
ResStream := TResourceStream.Create(Handle, 'avi.RES', RT_RCDATA);
ResStream.SaveToFile(tmpFile);
ResStream.Free;
{ тут проигрываем его с помощью MediaPlayer. Вот здесь у меня возник вопрос! }
DeleteFile(tmpFile);
end;

end.
Форма вроде бы на месте. Только как воспоизведение с помощью MediaPlayer сделать пока не могу догадаться.
Вадим К

Вадим К (статус: Академик), 13 октября 2008, 13:33 [#5]:

ну при таком раскладе делфи конечно не найдёт. пишем вместо handle
Form1.handle и радуемся жизни.
Галочка "подтверждения прочтения" - вселенское зло.
Ученый

Ученый (статус: 8-ой класс), 13 октября 2008, 13:54 [#6]:

А не подскажете код , чтобы это все через MediaPlayer воспроизвести...
Вадим К

Вадим К (статус: Академик), 13 октября 2008, 14:02 [#7]:

А в чём проблема? в нежилании писать самому? вообще то у медиаплеера есть событие "закончилась песенка". Вот в нем надо определиться, какая будет следующей (просто счётчик увеличиваем на 1 и смотрим, не вылезли ли за пределы списка. Если нет, то присваиваем медиалееру новую композицию и пускаем дальше, Кода то на пару строк.
Галочка "подтверждения прочтения" - вселенское зло.

31 января 2011, 19:32: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

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

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