powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ShockwaveFlash проиграть из MemoryStream?
14 сообщений из 14, страница 1 из 1
ShockwaveFlash проиграть из MemoryStream?
    #39475329
AlexMik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ресурсный файл. Нужно проиграть из него SWF-ку.
Но дело в том, что ShockwaveFlash не имеет LoadFromStream.

Пока сделал через одно место вот так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
var MS: TMemoryStream;
     tmpfilename : String;
     tmp_exist_file: TextFile;

----------------------------------------------

    tmpfilename :='scheme.swf';
    ShockwaveFlash:=TShockwaveFlash.Create(MSG_Doc);
    ShockwaveFlash.Parent:=MSG_Doc;
    ShockwaveFlash.Align:=alClient;
    MS := TMemoryStream.Create;
    MS.LoadFromStream(GLVfsPAKAGE0.GetFile(base_path+'ext_data/SWF/'+swf_viewing_name));
    MS.SavetoFile(tmpfilename);
    ShockwaveFlash.Movie:=ExtractFilePath(Application.ExeName)+tmpfilename;
    ShockwaveFlash.Play;
    ShockwaveFlash.CallFunction('<invoke name="CallMeFromApplication"><arguments><string>'+swf_sending_var+'</string></arguments></invoke>');
    MS.free;
    // Проверяем удаляемый файл
    AssignFile(tmp_exist_file,tmpfilename);
    {$I-}
    Reset(tmp_exist_file);
    {$I+}
    if IOResult=0 then
    begin
      CloseFile(tmp_exist_file);
      DeleteFile(tmpfilename);
    end;
  end;


А без таких костылей через темповский файл можно?
Буду очень благодарен.
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39475334
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле многое так делается: картинки, мс-офис, пдф.
Так что все ок. Не парься :)
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39475614
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexMik
Код: pascal
1.
 DeleteFile(tmpfilename);

Я бы рекомендовал CreateFile + FILE_FLAG_DELETE_ON_CLOSE or FILE_ATTRIBUTE_TEMPORARY
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39475716
Dunkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Не будет ведь работать. Файл созданный с такими параметрами доступен только по хендлу(?)
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39475735
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DunkinФайл созданный с такими параметрами доступен только по хендлу(?)С какого перепугу?
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39475794
Dunkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
var
  h: THandle;
  fn: string;
  data, rd: AnsiString;
  fsize: Cardinal;
begin
  fn := IOUtils.TPath.GetTempFileName;
  h := CreateFile(PChar(fn), GENERIC_READ or GENERIC_WRITE, 0, nil,
    CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_RANDOM_ACCESS or
    FILE_FLAG_DELETE_ON_CLOSE, 0);
  if h = INVALID_HANDLE_VALUE then
    raise Exception.Create('Can''t create file ' + fn);
  data := 'Строка';
  FileWrite(h, data[1], Length(Data));
  fsize := GetFileSize(h, nil);
  ShowMessage(IntToStr(fsize));
  SetLength(rd, fsize);
  FileSeek(h, 0, 0);
  FileRead(h, rd[1], Length(rd));
  ShowMessage(rd);
  with TStringList.Create do
  try
    LoadFromFile(fn);
    ShowMessage(Text);
  finally
    Free;
  end;



С такого: FILE_FLAG_DELETE_ON_CLOSE. В примере часть проверок пропустил.
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39475796
Dunkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexMik,

А для флэша был f-in-box.
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39475981
AlexMik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dunkin,

Да, F-In-Box и есть, но все версии кроме самой последней не работают на Win10. Надо платить деньги. :)
Поэтому пока выкрутился так. А там посмотрим.

Всем спасибо! Vasilisk, совет к сведению принял.
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39476220
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dunkin
Код: pascal
1.
2.
3.
 h := CreateFile(PChar(fn), GENERIC_READ or GENERIC_WRITE, >>0<<<, nil,
    CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_RANDOM_ACCESS or
    FILE_FLAG_DELETE_ON_CLOSE, 0);

Кто ж Вам доктор? Откройте для себя FILE_SHARE_READ
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39476237
AlexMik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Туплю... :(
Перед запуском программы проверяю хвосты, которые могут остаться после, скажем, вылета программы.
Так вот - файл ode.dll не удаляется кодом:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  // Проверяем удаляемый файл и удаляем его
  tmpfilename:='ode.dll';
  AssignFile(tmp_exist_file,tmpfilename);
  {$I-}
  Reset(tmp_exist_file);
  {$I+}
  if IOResult=0 then
  begin
    CloseFile(tmp_exist_file);
    DeleteFile(ExtractFilePath(Application.ExeName)+tmpfilename);
  end;


Любой другой - нормально. Этот ни в какую.
Если в процессе работы программы вытягивается из ресурса, то после закрытия - удаляется. Этим же кодом. Если кинуть вручную - не удаляется гад.

В чем трабл?
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39476246
AlexMik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для смеха добавлю - RenameFile - работает.
Удалять - не хочет.
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39476249
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexMikДля смеха добавлю - RenameFile - работает.
Удалять - не хочет.Значит файл кем-то используется
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39476278
Dunkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_Кто ж Вам доктор? Откройте для себя FILE_SHARE_READ
Файл стал доступен из внешних приложений. Не знаю как флэш, но WebBrowser, например, такие файлы не открывает.
...
Рейтинг: 0 / 0
ShockwaveFlash проиграть из MemoryStream?
    #39476290
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DunkinWebBrowser, например, такие файлы не открывает.Может, ему нужен еще FILE_SHARE_WRITE или он сам пытается его открыть монопольно. Так тут вопрос не в атрибутах, а в совместной работе с файлом
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ShockwaveFlash проиграть из MemoryStream?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]