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