|
Вопрос # 2 086/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
На форме есть кнопка, панель и имеется ресурс Test.res в котором упакован файл video.avi. Нужно чтобы при нажатии кнопки video.avi вопроизводился, а дисплеем была бы панель. У меня есть код ( см. приложение), но его надо доработать, а у меня что не получается это осуществить самостоятельно. Надеюсь на вашу помощь!
Приложение: Переключить в обычный режим- function GetTempFile : String;
- var
- TempDir,
- TempFile : packed array [0..MAX_PATH] of Char;
- begin
- GetTempPath(MAX_PATH, TempDir);
- Windows.GetTempFileName(TempDir, 'video', 0, TempFile);
- Result := TempFile;
- end;
- procedure PlayMyAvi;
- var
- ResStream : TResourceStream;
- tmpFile : String;
- begin
- tmpFile := GetTempFile;
- ResStream := TResourceStream.Create(Handle, 'Test', RT_RCDATA);
- ResStream.SaveToFile(tmpFile);
- ResStream.Free;
 |
Вопрос задал: Ученый (статус: 8-ой класс)
Вопрос отправлен: 14 ноября 2008, 18:44
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Feniks
Здравствуйте, Ученый!
Таксс.. Устроим разбор полетов... Почему вы упорно отказываетесь читать Хелп по Делфи? Там ведь все написано и примеры даже есть:
UINT GetTempFileName(
LPCTSTR lpPathName,
LPCTSTR lpPrefixString,
UINT uUnique,
LPTSTR lpTempFileName
);
А теперь по порядку:
1. lpPathName не может быть больше MAX_PATH-14, поэтому надо изменить на:
TempFile : packed array [0 .. MAX_PATH - 14] of Char;
2. lpPrefixString должен содержать три символа. А вы подставляете "video", а то уже 5 символов.
После выполнения данной функции вы должны получить имя файла вида:
path\preuuuu.tmp
Где:
path - путь к папке, полученный функцией GetTempPath.
pre - тот самый префикс, указанные вами три символа.
uuuu - автоматически сгенерированные символы для уникальности имени файла.
Едим дальше... Функции для извлечения ресурса и его сохранения вы используете верно. Это когда я вам их давал, а брал я из своего рабочего проекта. Если ресурс действительно есть, то он сохранится в файле tmpFile. Изходя из вашего кода, ресурс должен называться "test", так вы указывали в исходном файле ресурса test.rc перед тем, как вы его компилировали в ресурс test.res. Проверяйте, так ли это. Если файл сохраняется, поменяйте ему расширение с tmp на avi и попробуйте его открыть обычным проигрывателем. По ходу выполнения на каждом этапе смотрите чему равны все эти переменные.
Напомню, для того, что ресурсы действительно появились в проекте после компиляции, проект надо не просто компилировать, а именно билдить.
P.S. Желаю удачи.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 17 ноября 2008, 11:56
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 12; последнее сообщение — 15 ноября 2008, 09:46; участников в обсуждении: 3.
|
Вадим К (статус: Академик), 14 ноября 2008, 18:52 [#1]:
Так что же не получается? дописать ещё две строки, где вначале медиаплееру присваивается путь на сохранённый файл, потом плеер запускается.
Или вообще не сохраняет ресурс?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Ученый (статус: 8-ой класс), 14 ноября 2008, 19:03 [#2]:
Скорее всего вся проблема из-за этих двух строк, которые я к стыду моему не могу правильно написать. А ресурс сохраняет вроде, тк в нем еще и картинка лежит, ее программа находит.
|
|
Аксион (статус: 4-ый класс), 14 ноября 2008, 19:05 [#3]:
MediaPlayer1.Display:=panel1;
MediaPlayer1.FileName:=tmpFile;
MediaPlayer1.Play;
А так?
|
|
Аксион (статус: 4-ый класс), 14 ноября 2008, 19:06 [#4]:
только...tmpFile надо объявить как глобальную переменную...
|
|
Ученый (статус: 8-ой класс), 14 ноября 2008, 19:12 [#5]:
Объявляю tmpFile:string; при запуске выдает ошибку не удается опредилить тип устройства по указанному расширению имени файла
|
|
Аксион (статус: 4-ый класс), 14 ноября 2008, 19:17 [#6]:
tmpFile := GetTempFile;
Попробуй заменить на tmpFile := 'video.avi';
|
|
Аксион (статус: 4-ый класс), 14 ноября 2008, 19:18 [#7]:
А видео вообще из ресурса извлекается?
|
|
Ученый (статус: 8-ой класс), 14 ноября 2008, 19:29 [#8]:
пробовалл заменить tmpFile := 'video.avi'; ничего ни изменилось. Носчет видео возможно не извлекается. В коде (см. приложение) меня смещает строка Windows.GetTempFileName(TempDir, 'video', 0, TempFile); а именно слово 'video', потомучто я не знаю что там надо ставить и поставил наугад.
|
|
Вадим К (статус: Академик), 14 ноября 2008, 19:32 [#9]:
А если открыть видео прямо с диска медиаплеером, оно воспроизводиться? Не то, что было сохранено и излечено с ресурса, а оригинальное?
А потом и то, что с ресурса извлечено.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Ученый (статус: 8-ой класс), 14 ноября 2008, 19:35 [#10]:
воспроизводится. Только я вот в чем ошибся изначально: файл из ресурса не извлекается.
|
|
Ученый (статус: 8-ой класс), 14 ноября 2008, 19:56 [#11]:
может код не правильный для извлечения и сохранения файла?
|
|
Ученый (статус: 8-ой класс), 15 ноября 2008, 09:46 [#12]:
Народ може у кого-нибудь есть рабочий код извлечения и сохранения файла из ресурса? Просто ну очень нужно...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|