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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 2 086

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
На форме есть кнопка, панель и имеется ресурс Test.res в котором упакован файл video.avi. Нужно чтобы при нажатии кнопки video.avi вопроизводился, а дисплеем была бы панель. У меня есть код ( см. приложение), но его надо доработать, а у меня что не получается это осуществить самостоятельно. Надеюсь на вашу помощь!

Приложение:
  1. function GetTempFile : String;
  2. var
  3. TempDir,
  4. TempFile : packed array [0..MAX_PATH] of Char;
  5. begin
  6. GetTempPath(MAX_PATH, TempDir);
  7. Windows.GetTempFileName(TempDir, 'video', 0, TempFile);
  8. Result := TempFile;
  9. end;
  10. procedure PlayMyAvi;
  11. var
  12. ResStream : TResourceStream;
  13. tmpFile : String;
  14. begin
  15. tmpFile := GetTempFile;
  16. ResStream := TResourceStream.Create(Handle, 'Test', RT_RCDATA);
  17. ResStream.SaveToFile(tmpFile);
  18. 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]:

Народ може у кого-нибудь есть рабочий код извлечения и сохранения файла из ресурса? Просто ну очень нужно...

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

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