ISPicture2

DLL ISPicture2 13-02-2014

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

Shegorat

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

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

Информация:

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

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

Узнать больше об этом ресурсе...
 

Вложения

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

Ну и нужно добавить - не откажусь от любой посильной помощи :)
 
Последнее редактирование:
Добавлено управление громкостью и воспроизведением, полная совместимость с Анси и Юникод.
Решена проблема ложного срабатывания антивируса Доктор Веб.
 
Any help Help is appreciated get this error in above script: Unknown identifier 'TTrackBar'

I doesn't change anything in script!!
 
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!!
 
У меня тоже видяхи нет, а Инка еще и выругалась матом при деинициализации....
 
Последнее редактирование:
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!!
 
Можно использовать модуль подгрузки кодека от 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;
Модуль достаточно понятно разъяснен, чтобы им мог воспользоваться даже начинающий. но самое главное - идея - подобным образом можно задействовать любой кодек, зная его файлы и то, какие библиотеки должны быть временно зарегистрированы в системе. Естественно, формат видео должен соответствовать используемому кодеку.
 
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;
 
Назад
Сверху