Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2011, 19:23   #1
bemm
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 10
По умолчанию воспроизведение видео из exe

Добрые люди, кто-нибудь знает как воспроизвести видео, "запиханного" с помощь ресурса в exe файл?
bemm вне форума Ответить с цитированием
Старый 24.02.2011, 19:49   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Извлекать видео из ресурса и воспроизводить его.
Человек_Борща вне форума Ответить с цитированием
Старый 24.02.2011, 20:44   #3
bemm
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 10
По умолчанию

а нельзя поподробней, если не сложно? :-)
bemm вне форума Ответить с цитированием
Старый 24.02.2011, 21:00   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Код:
var
  ResHandle: THandle;
  MemHandle: THandle;
  MemStream: TMemoryStream;
  ResPtr: PByte;
  ResSize: Longint;
begin
  ResHandle := FindResource(hInstance, PChar('Название'), 'Тип данных');
  MemHandle := LoadResource(hInstance, ResHandle);
  ResPtr := LockResource(MemHandle);
  MemStream := TMemoryStream.Create;
  ResSize := SizeOfResource(hInstance, ResHandle);
  MemStream.SetSize(ResSize);
  MemStream.Write(ResPtr^, ResSize);
  FreeResource(MemHandle);
  MemStream.Seek(0, 0);
  {Тут загружаем файл из потока MemStream}
  MemStream.Free;
Человек_Борща вне форума Ответить с цитированием
Старый 24.02.2011, 22:20   #5
bemm
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 10
По умолчанию

не матерись сильно)))
{Тут загружаем файл из потока MemStream} это что? и как там че заргужать?
bemm вне форума Ответить с цитированием
Старый 24.02.2011, 22:56   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ну, это воспроизведение видео из потока(из памяти), т.к. файл не сохранён.

Вот извлечение в папку назначения, написал спец. для твоего случая:
Код:
Procedure SaveResToFile(ResName,ResDataType,SaveDestination:string);
var
  ResHandle: THandle;
  MemHandle: THandle;
  MemStream: TMemoryStream;
  ResPtr: PByte;
  ResSize: Longint;
begin
MemStream := TMemoryStream.Create;
try
  ResHandle := FindResource(hInstance, PChar(ResName), PChar(ResDataType));
  MemHandle := LoadResource(hInstance, ResHandle);
  ResPtr := LockResource(MemHandle);
  ResSize := SizeOfResource(hInstance, ResHandle);
  MemStream.SetSize(ResSize);
  MemStream.Write(ResPtr^, ResSize);
  FreeResource(MemHandle);
  MemStream.Seek(0, 0);
  MemStream.SaveToFile(SaveDestination);
finally
  MemStream.Free;
  end;
end;
Допустим:
myJPEG.rc:
Код:
SMI JPEG "SDT.jpg"
Собираем ресурс(там картинка).

Далее юзаем процедуру:
Код:
//Извлекаем картинку из ресурсов , в папку e:\Video\
SaveResToFile('SMI','JPEG','E:\Video\');

Последний раз редактировалось Человек_Борща; 24.02.2011 в 23:03.
Человек_Борща вне форума Ответить с цитированием
Старый 24.02.2011, 23:08   #7
MalishOK
Новичок
Джуниор
 
Регистрация: 24.02.2011
Сообщений: 1
По умолчанию

для тех, кому еще позже понадобится. Проблема решена данным способом:
1) Через блокнот создается файл определения ресурса (Resource Definition) (текстовый) с именем, скажем, myavi.rc (с обязательным расширением RC).
2) Затем он компиируется через brcc32
3) Осталось подключить его:

Код:
uses ...,ShellAPI;

implementation

{$R *.DFM}
{$R C:\MyAVI.res}

procedure TForm1.FormCreate(Sender: TObject);
var
  sei: TShellExecuteInfo;
  ResStr: TResourceStream;
begin
  ResStr:= TResourceStream.Create(HInstance, 
                            'AVI_1', PChar('AVIVIDEO'));
  try
    ResStr.SaveToFile('Temp.avi');
    ZeroMemory(@sei, SizeOf(sei));
    with sei do
    begin
      cbSize := SizeOf(sei);
      fMask  := SEE_MASK_NOCLOSEPROCESS or 
                SEE_MASK_INVOKEIDLIST
      Wnd   := Form1.Handle;
      lpVerb := 'open';
      lpFile := PChar('Temp.avi');
      nShow := SW_SHOWNORMAL;
    end;
    ShellExecuteEX(@sei);  
  finally
    ResStr.Free;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if FileExists('Temp.avi') then 
    DeleteFile('Temp.avi');
end;

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 25.02.2011 в 08:32.
MalishOK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
воспроизведение видео ZhekON Мультимедиа в Delphi 20 11.08.2016 08:32
Воспроизведение онлайн-видео trad Общие вопросы C/C++ 1 14.12.2010 15:02
Воспроизведение видео с устройства 856100 Мультимедиа в Delphi 4 24.05.2010 16:57
Воспроизведение видео на Panel Vladya Мультимедиа в Delphi 2 01.04.2009 19:32
воспроизведение видео сторонним софтом Noor Общие вопросы Delphi 2 25.01.2007 09:37