ISPicture2

DLL ISPicture2 13-02-2014

Нет прав для скачивания

Shegorat

Lord of Madness
Администратор
Пользователь Shegorat разместил новый ресурс:

ISPicture2 - Библиотека для вставки видео в инсталлятор Inno Setup.

Информация:

Описание:
ISPicture2 - Новая версия библиотеки для вставки видео на форму. Весь код библиотеки переписан с нуля.

Данная библиотека позволяет легко, всего с помощью пары функций, вставить видео или изображение на форму, при этом все контролы и прочие объекты на форме будут показываться также как и прежде.​
Узнать больше об этом ресурсе...
 

Вложения

LexBell

Борода
Супер модератор
От себя скажу. В планах - как и в старой версии - видео так-же как и в старой версии будет грузится из самой длл, в далеких планах - сделать единственный формат - бинк-видео, дабы вообще не зависеть от кодеков.
Дополнительно планирую бмп-кнопки - пнг даже пробовать не буду - для этого есть botva2.dll.
Совместимость с той-же botva2.dll невозможно, по техническим причинами. Единственное, по просьбам могу добавить возможность вставлять изображения через нее, но не кнопки.
Ну и главное, чем я сейчас занимаюсь - это активное общение с лабораторией DrWeb, надеюсь к финалу они учтут некоторые особенности кода и срабатываний на эту длл-ку от них не будет.

Ну и нужно добавить - не откажусь от любой посильной помощи :)
 
Последнее редактирование:

LexBell

Борода
Супер модератор
Добавлено управление громкостью и воспроизведением, полная совместимость с Анси и Юникод.
Решена проблема ложного срабатывания антивируса Доктор Веб.
 

Evilboy

Пользователь
Any help Help is appreciated get this error in above script: Unknown identifier 'TTrackBar'

I doesn't change anything in script!!
 

Evilboy

Пользователь
Guys it worked now and compiled the script but it doesn't show anything!!


Hey Mailchick an you give a sample !!
I mean a rar in which there is video and required files which is working properly!!



Thnx in advance!!
 

YURSHAT

Тех. админ
Администратор
У меня тоже видяхи нет, а Инка еще и выругалась матом при деинициализации....
 
Последнее редактирование:

Evilboy

Пользователь
PLz anyone give a example script with video which is working!!

When I try to compile it get compiled but video doesn't load don't know hat's the problem!!
 

LexBell

Борода
Супер модератор
Можно использовать модуль подгрузки кодека от South. Видео нет по единственной причине - нет кодека, который должен его воспроизвести.
Код:
[Files]
Source: compiler:Dll Pack\xvidcore.dll; Flags: dontcopy
Source: compiler:Dll Pack\xvidvfw.dll; Flags: dontcopy
[Code]
//Created by South.Tver 08.2010
//модуль проверяющий наличие в системе пользователя видеокодека XVID и устанавливающий его в случае отсутствия
// !!! для записи в системный каталог и в реестр необходимы права администратора !!!
var
  CanUseXvid,                 //флаг показывающий сможет ли в системе пользователя воспроизводиться видео,
                              //  т.е. либо кодек уже был, либо его не было, но мы его успешно установили, т.е. кодеком можно пользоваться
                              //в своем скрипте, после вызова XvidInstall, нужно использовать флаг CanUseXvid
                              //  т.к. вероятность того, что кодек в системе отсутвует и мы его тоже не смогли установить
                              //  хоть и не большая, но все-таки существует
                              //например
                              //...
                              //if CanUseXvid then begin
                              //  mciSendString('open myvideo.avi alias MyVideo parent '+IntToStr(WizardForm.Handle)+' style child','',0,0);
                              //  mciSendString('put MyVideo window at 0 0 704 272','',0,0);
                              //    mciSendString('play MyVideo repeat','',0,0);
                              //end;
                              //...
  XvidInstalled : boolean;    //локальная переменная для данного модуля, показывающая устанавливали мы кодек или нет. используется в XvidUnInstall
                              //XvidInstalled=False кодек в системе пользователя уже установлен или мы не смогли его установить,
                              //  т.е. при закрытии инсталла делать ничего не нужно
                              //XvidInstalled=True кодека в системе не было, но мы его успешно установили,
                              //  т.е. надо будет за собой прибраться при закрытии инсталла
procedure XvidDelete;
//тупо удаление кодека из системы
begin
  DeleteFile(ExpandConstant('{sys}\xvidcore.dll'));
  DeleteFile(ExpandConstant('{sys}\xvidvfw.dll'));
  RegDeleteValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32','VIDC.XVID');
end;
procedure XvidInstall;
//для проверки установлен ли кодек и его установки, в случае отсутствии кодека в системе, вызвать XvidInstall.
//например
//  procedure InitializeWizard;
//  begin
//    XvidInstall;
//  end;
//или
//  function InitializeSetup:boolean;
//  begin
//    XvidInstall;
//  end;
var
  f:boolean;
begin
  CanUseXvid:=False;    //пока кодеком нельзя пользоваться
  XvidInstalled:=False; //мы еще не устанавливали кодек
  //если кодек отсутствует или не корректно установлен
  if not (FileExists(ExpandConstant('{sys}\xvidcore.dll')) and
          FileExists(ExpandConstant('{sys}\xvidvfw.dll')) and
          RegValueExists(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32','VIDC.XVID')) then
    //попытемся установить кодек
    try
      XvidDelete; //на всякий случай чистим систему от остатков кодека, если была не удачная установка
      ExtractTemporaryFile('xvidcore.dll');
      ExtractTemporaryFile('xvidvfw.dll');
      //устанавливаем кодек - кладем dll'ки в %SystemRoot%\system32\ (из другого места работать не будет) и пишем необходимый ключик в реестр
      f:=FileCopy(ExpandConstant('{tmp}\xvidcore.dll'),ExpandConstant('{sys}\xvidcore.dll'),False);
      f:=f and FileCopy(ExpandConstant('{tmp}\xvidvfw.dll'),ExpandConstant('{sys}\xvidvfw.dll'),False);
      f:=f and RegWriteStringValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32','VIDC.XVID','xvidvfw.dll');
      if f then begin //если установка прошла успешно
        XvidInstalled:=True; //кодек мы поставили сами и его нужно будет потом удалить
        CanUseXvid:=True;    //кодек можно использовать
      end else XvidDelete;   //не удачная попытка установки кодека, чистим за собой на всякий случай
    except
    end
  else CanUseXvid:=True; //кодек уже существует в системе, можно пользоваться
end;
procedure XvidUnInstall;
//при завершении приложения обязательно вызвать XvidUnInstall,
//  если мы установили кодек в систему пользователя, то мусор в системе после себя оставлять очень плохо.
//например
//  procedure DeinitializeSetup;
//  begin
//    XvidUnInstall;
//  end;
//к тому же XvidInstall производит не полноценную установку кодека и в реестр вносятся не все записи.
//  т.е. видео сможет воспроизводится, но конвертировать видео файл из какого-нибудь формата в xvid при такой устновке не получится
begin
  //если XvidInstall устновил кодек, то удаляем его
  //если кодек уже был в системе или отсутствовал, а мы не смогли его установить, то ничего не делаем
  if XvidInstalled then XvidDelete;
end;
Модуль достаточно понятно разъяснен, чтобы им мог воспользоваться даже начинающий. но самое главное - идея - подобным образом можно задействовать любой кодек, зная его файлы и то, какие библиотеки должны быть временно зарегистрированы в системе. Естественно, формат видео должен соответствовать используемому кодеку.
 

sergey3695

Ветеран
Модератор
Shift85, просто видео нету, хотя прописаны действия. вот я закомментил ненужное. чтобы было видео, нужна проверка на кодеки (постом выше скрипт) ну и сами файлы (*.avi & xvidcore.dll & xvidvfw.dll)
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source : IsPicture2.dll; Flags : dontcopy;
;Source: fon.avi; Flags: dontcopy
Source: fon.bmp; Flags: dontcopy

[ code]
//----------------------------------------------------------------------------------\\
const   // жирность шрифта
  FW_DONTCARE   = 0;
  FW_THIN       = 100;
  FW_ULTRALIGHT = 200;
  FW_LIGHT      = 300;
  FW_NORMAL     = 400;
  FW_MEDIUM     = 500;
  FW_DEMIBOLD   = 600;
  FW_BOLD       = 700;
  FW_ULTRABOLD  = 800;
  FW_BLACK      = 900;

procedure IsPicInit(Handle : HWND);
   external 'IsPicInit@files:IsPicture2.dll stdcall delayload';
  // начало работы
  
procedure IsPicAddImg(fName : AnsiString); 
   external 'IsPicAddImg@files:IsPicture2.dll stdcall delayload';
  // изображение на заднем фоне
  
procedure IsPicAddVideo(fName : AnsiString; l, t, w, h : Integer); 
   external 'IsPicAddVideo@files:IsPicture2.dll stdcall delayload';
  // видео на заднем фоне
  
function IsPicReFont(height, Weight : Integer; Italic : Boolean) : HWND;
   external 'IsPicReFont@files:IsPicture2.dll stdcall delayload';
  // подмена шрифта для борьбы с артефактами сглаживания
  // height - Font.Height
  // Weight - жирность
  // Italic - наклонность
  
procedure IsPicStopVideo;
   external 'IsPicStopVideo@files:IsPicture2.dll stdcall delayload';
  // остановка воспроизведения видео - после этой команды
  // видео будет перемотано на начало и поставлено на паузу
  
procedure IsPicPauseVideo(play : Boolean);
   external 'IsPicPauseVideo@files:IsPicture2.dll stdcall delayload';
  // пауза видео
  // play -
  // если значение True, то продолжаем воспроизводить
  // если значение False, то ставим на паузу
  
procedure IsPicSetVolume(volume : Integer);
   external 'IsPicSetVolume@files:IsPicture2.dll stdcall delayload';
  // громкость видео от -10000 до 0.
  // -10000 - минимальное значение
  // 0 - максимальное значение
  
procedure IsPicDeInit;
   external 'IsPicDeInit@files:IsPicture2.dll stdcall delayload';
  // не забываем вызвать в DeinitializeSetup
//----------------------------------------------------------------------------------\\

procedure RunStop(Sender: TObject);
begin
//  IsPicPauseVideo(TNewCheckBox(Sender).Checked);
end;

procedure SetVolume(Sender: TObject);
begin
//  IsPicSetVolume(TTrackBar(Sender).Position);
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('fon.bmp');
//  ExtractTemporaryFile('fon.avi');
  with WizardForm do
  begin
    WizardBitmapImage.Free;
    WizardBitmapImage2.Free;
    
//----------------------------------------------------------------------------------\\
  // подменяем шрифты
    Font.Handle := IsPicReFont(Font.Height, FW_DEMIBOLD, False);
    WelcomeLabel1.Font.Handle := IsPicReFont(WelcomeLabel1.Font.Height, FW_BOLD, False);
    PageNameLabel.Font.Handle := IsPicReFont(PageNameLabel.Font.Height, FW_BOLD, False);
    FinishedHeadingLabel.Font.Handle := IsPicReFont(FinishedHeadingLabel.Font.Height, FW_BOLD, False);
//----------------------------------------------------------------------------------\\
 //----------------------------------------------------------------------------------\\
   // цвет прозрачности - $000008. Указываем его для элементов,которые должны быть прозрачными
    Color := $000008;
    WelcomePage.Color := $000008;
    InnerPage.Color := $000008;
    FinishedPage.Color := $000008;
    MainPanel.Color := $000008;
    DirEdit.Color := $000008;
    ReadyMemo.Color := $000008;
//----------------------------------------------------------------------------------\\
    Font.Color := clYellow;
    // запускам
    IsPicInit(Handle);
  end;
//----------------------------------------------------------------------------------\\
  // добавляем изображение на задний фон
  IsPicAddImg(ExpandConstant('{tmp}\fon.bmp'));
  // добавляем видео на задний фон
//  IsPicAddVideo(ExpandConstant('fon.avi'), 137, 113, 360, 200);
//----------------------------------------------------------------------------------\\

//----------------------------------------------------------------------------------\\
  // чекбокс - Пуск - Пауза
  with TNewCheckBox.Create(WizardForm) do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(24), ScaleY(330), ScaleX(90), ScaleY(14));
    Caption := 'Пуск - Пауза';
    Checked := true;
    OnClick := @RunStop;
  end;
  // трекбар - Громкость
  with TTrackBar.Create(WizardForm) do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(152), ScaleY(320), ScaleX(100), ScaleY(37));
    Min := -5000;
    Max := 0;
    Position := -3000;
    TickMarks := tmBoth;
    TickStyle := tsNone;
    OnChange := @SetVolume;
  end;
//  IsPicSetVolume(-3000);
//----------------------------------------------------------------------------------\\
end;

procedure DeinitializeSetup();
begin
  // завершаем работу
  IsPicDeInit;
end;
 
Сверху