|
Вопрос # 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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|