Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 5]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


audiofeel
Тут помочь, к сожалению не смогу, так как юникодовой версией никогда не пользовался. Конкретно у себя ошибку выловить не смог, проверил несколько раз. Версия та же, что и у вас, только ANSI
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:53, 22-03-2013 | #1951



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для audiofeel

Пользователь


Сообщения: 128
Благодарности: 22

Профиль | Отправить PM | Цитировать


Цитата Gnom_aka_Lexander:
Грубых ошибок не вижу, которые могли-бы вызвать ошибки. CallbackCtrl.dll там лишняя »
значить ошибки есть "мелкие" P.S. может такое быть из за восьмерки

Отправлено: 10:55, 22-03-2013 | #1952


Аватара для Gnom_aka_Lexander

Ветеран


Сообщения: 978
Благодарности: 564

Профиль | Сайт | Отправить PM | Цитировать


audiofeel, ошибки там такие, которые на работу кода не влияют, только на скорость его работы, не более. у меня восьмерка х64, версия инно такая-же как у тебя, все нормально работает. ты скрипт не забыл сохранить перед тем, как заливать его?

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:58, 22-03-2013 | #1953


Аватара для audiofeel

Пользователь


Сообщения: 128
Благодарности: 22

Профиль | Отправить PM | Цитировать


Цитата Gnom_aka_Lexander:
ты скрипт не забыл сохранить перед тем, как заливать его? »
я отправил копию = а в чем подвох та. если "CallbackCtrl.dll" там лишняя - как от ниё отказаться правильно

Последний раз редактировалось audiofeel, 22-03-2013 в 11:16.


Отправлено: 11:03, 22-03-2013 | #1954


Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


audiofeel
Да нет, не в восмёрке дело: сейчас выловил ошибку. Происходит она в OnTimer после прерывания установки. Потестите код в объединённом виде, так проще увидеть ошибку.

читать дальше »
Код: Выделить весь код
#define AppName "Resident Evil 6"

//#include "Slides\slides.iss"
#include "ISDone\ISDone.iss"

[Setup]
AppName=test
AppVerName=test
DefaultDirName={pf}\test

[Run]
Filename: {src}\test.exe; Tasks: test

[Tasks]
Name: test; Description: test; GroupDescription: test; Flags: unchecked

[Files]
Source: Slides\isSlideShow.dll; DestDir: {tmp}; Flags: dontcopy
Source: Slides\CallbackCtrl.dll; DestDir: {tmp}; Flags: dontcopy
Source: Slides\*.jpg; DestDir: {tmp}; Flags: dontcopy

[UninstallDelete]
Type: filesandordirs; Name: {app}

[...Code]
type
  TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
  TimerID: LongWord;
  CurrentPicture:integer;
  PicList: TStringlist;

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeSlideShow(Hwnd:Thandle; l,t,w,h:integer;Animate:boolean; Stretch:integer); external 'InitializeSlideShow@files:isslideshow.dll stdcall';
procedure DeinitializeSlideShow; external 'DeinitializeSlideShow@files:isslideshow.dll stdcall';
procedure ShowImage(ipath:PChar; Effect:integer); external 'ShowImage@files:isslideshow.dll stdcall';

var
  welcomBevel, welcomBevel1, welcomBevel2, welcomBevel3, DirBevel, DirBevel1, DirBevel2, TasksBevel  : TBevel;
  WelcomeLbl, TasksLbl, FinLbl  : TLabel;
  
procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
 CurrentPicture:=CurrentPicture+1;
 if CurrentPicture=piclist.count+1 then CurrentPicture:=1;
 ShowImage(piclist.strings[CurrentPicture - 1], 1);
end;

procedure InitializeWizard();
begin
  WizardForm.ClientWidth  := ScaleX(548);
  WizardForm.ClientHeight := ScaleX(360);
  WizardForm.InnerNotebook.Hide;
  WizardForm.OuterNotebook.Hide;

  WizardForm.NextButton.SetBounds(378,322,80,30);
  WizardForm.CancelButton.SetBounds(459,322,80,30);
  WizardForm.BackButton.SetBounds(297,322,80,30);

  WizardForm.Bevel.Parent := WizardForm;
  WizardForm.Bevel.Width  := WizardForm.ClientWidth;
  WizardForm.Bevel1.Parent := WizardForm;
  WizardForm.Bevel1.Top   := ScaleX(55);
  WizardForm.Bevel1.Width := WizardForm.ClientWidth;

  WizardForm.WizardBitmapImage.Parent := WizardForm;
  WizardForm.WizardBitmapImage.SetBounds(30,30,489,170);
  WizardForm.WizardSmallBitmapImage.Parent := WizardForm;
  WizardForm.WizardSmallBitmapImage.SetBounds(0,0,WizardForm.ClientWidth,55);

  WizardForm.PageDescriptionLabel.Parent := WizardForm;
//  WizardForm.PageDescriptionLabel.Transparent := True;
  WizardForm.PageDescriptionLabel.Left        := ScaleX(20);

  WizardForm.PageNameLabel.Parent := WizardForm;
//  WizardForm.PageNameLabel.Transparent := True;
  WizardForm.PageNameLabel.Left        := ScaleX(10);

  WizardForm.SelectDirBrowseLabel.Parent := WizardForm;
  WizardForm.SelectDirBrowseLabel.Font.Height := -12;
  WizardForm.SelectDirBrowseLabel.Font.Name   := 'Arial';
  WizardForm.SelectDirBrowseLabel.Caption     := 'Если вы хотите выбрать другую папку, нажмите «Обзор».' + #13#10 + '            Нажмите «Далее», чтобы продолжить.'
  WizardForm.SelectDirBrowseLabel.SetBounds(119,244,330,30);

  WizardForm.SelectDirLabel.Parent := WizardForm;
  WizardForm.SelectDirLabel.Font.Height := -12;
  WizardForm.SelectDirLabel.Font.Name   := 'Arial';
  WizardForm.SelectDirLabel.Left        := ScaleX(31);
  WizardForm.SelectDirLabel.Top         := ScaleY(78);

  WizardForm.DirEdit.Parent := WizardForm;
  WizardForm.DirEdit.Font.Height := -12;
  WizardForm.DirEdit.Font.Name   := 'Arial';
  WizardForm.DirEdit.SetBounds(31,99,402,30);

  WizardForm.DirBrowseButton.Parent := WizardForm;
  WizardForm.DirBrowseButton.SetBounds(440,98,80,25);

  WizardForm.GroupEdit.Parent := WizardForm;
  WizardForm.GroupEdit.Font.Height := -12;
  WizardForm.GroupEdit.Font.Name   := 'Arial';
  WizardForm.GroupEdit.SetBounds(31,181,402,30);

  WizardForm.GroupBrowseButton.Parent := WizardForm;
  WizardForm.GroupBrowseButton.SetBounds(440,180,80,25);

  WizardForm.SelectStartMenuFolderLabel.Parent := WizardForm;
  WizardForm.SelectStartMenuFolderLabel.Font.Height := -12;
  WizardForm.SelectStartMenuFolderLabel.Font.Name   := 'Arial';
  WizardForm.SelectStartMenuFolderLabel.Left        := ScaleX(31);
  WizardForm.SelectStartMenuFolderLabel.Top         := ScaleY(159);

  WizardForm.TasksList.Parent := WizardForm;
  WizardForm.TasksList.SetBounds(30,85,490,115);
  WizardForm.TasksList.BorderStyle := bsSingle;

  WizardForm.StatusLabel.Parent := WizardForm;
  WizardForm.StatusLabel.Font.Height := -12;
  WizardForm.StatusLabel.Font.Name   := 'Arial';
  WizardForm.StatusLabel.Left        := ScaleX(20);
  WizardForm.StatusLabel.Top         := ScaleX(235);

  WelcomeLbl:=TLabel.Create(WizardForm);
  With WelcomeLbl do begin
    Transparent :=true;
    Parent      := WizardForm;
    Alignment   := taCenter;
    WordWrap    := True;
    Font.Height := -12;
    Font.Name   := 'Arial';
    Caption     := 'Вас приветствует мастер установки «{#AppName}»' + #13#10 + 'Рекомендуется закрыть все прочие приложения перед тем, как продолжить.' + #13#10 + 'Нажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти.';
    Left        := ScaleX(21);
    Top         := ScaleY(243);
    Width       := ScaleX(500);
  end;

  welcomBevel := TBevel.Create(WizardForm);
  with welcomBevel do
  begin
    Parent := WizardForm;
    Left   := ScaleX(10);
    Top    := ScaleY(10);
    Width  := ScaleX(529);
    Height := ScaleY(210);
    Style  := bsRaised;
  end;

  welcomBevel1 := TBevel.Create(WizardForm);
  with welcomBevel1 do
  begin
    Parent := WizardForm;
    Left   := ScaleX(20);
    Top    := ScaleY(20);
    Width  := ScaleX(509);
    Height := ScaleY(190);
  end;

  welcomBevel2 := TBevel.Create(WizardForm);
  with welcomBevel2 do
  begin
    Parent := WizardForm;
    Left   := ScaleX(10);
    Top    := ScaleY(230);
    Width  := ScaleX(529);
    Height := ScaleY(72);
  end;

  welcomBevel3 := TBevel.Create(WizardForm);
  with welcomBevel3 do
  begin
    Parent := WizardForm;
    Left   := ScaleX(20);
    Top    := ScaleY(240);
    Width  := ScaleX(509);
    Height := ScaleY(52);
    Style  := bsRaised;
  end;

  DirBevel := TBevel.Create(WizardForm);
  with DirBevel do
  begin
    Parent := WizardForm;
    Left   := ScaleX(10);
    Top    := ScaleY(65);
    Width  := ScaleX(529);
    Height := ScaleY(155);
    Style  := bsRaised;
  end;

  DirBevel1 := TBevel.Create(WizardForm);
  with DirBevel1 do
  begin
    Parent := WizardForm;
    Left   := ScaleX(20);
    Top    := ScaleY(75);
    Width  := ScaleX(509);
    Height := ScaleY(73);
  end;

  DirBevel2 := TBevel.Create(WizardForm);
  with DirBevel2 do
  begin
    Parent := WizardForm;
    Left   := ScaleX(20);
    Top    := ScaleY(158);
    Width  := ScaleX(509);
    Height := ScaleY(51);
  end;

  TasksBevel := TBevel.Create(WizardForm);
  with TasksBevel do
  begin
    Parent := WizardForm;
    Left   := ScaleX(20);
    Top    := ScaleY(75);
    Width  := ScaleX(509);
    Height := ScaleY(134);
  end;

  TasksLbl:=TLabel.Create(WizardForm);
  With TasksLbl do begin
    Transparent :=true;
    Parent      := WizardForm;
    Alignment   := taCenter;
    AutoSize    := True;
    WordWrap    := True;
    Font.Height := -12;
    Font.Name   := 'Arial';
    Caption     := 'Выберите компоненты, которые Вы хотите установить;' + #13#10 + 'снимите флажки с компонентов, устанавливать которые не требуется.' + #13#10 + 'Нажмите «Установить», когда вы будете готовы начать установку.';
    Left        := ScaleX(21);
    Top         := ScaleY(243);
    Width       := ScaleX(500);
  end;

  FinLbl:=TLabel.Create(WizardForm);
  With FinLbl do begin
    Transparent :=true;
    Parent      := WizardForm;
    Alignment   := taCenter;
    WordWrap    := True;
    Font.Height := -12;
    Font.Name   := 'Arial';
    Caption     := '«{#AppName}» установлена на Ваш компьютер.' + #13#10 + 'Приложение можно запустить с помощью соответствующего значка.' + #13#10 + 'Нажмите «Завершить», чтобы выйти из программы установки.'
    Left        := ScaleX(21);
    Top         := ScaleY(243);
    Width       := ScaleX(500);
  end;
  
  PicList:=tstringlist.Create;
  ExtractTemporaryFile('1.jpg');
  ExtractTemporaryFile('2.jpg');
  ExtractTemporaryFile('3.jpg');
  ExtractTemporaryFile('4.jpg');
  ExtractTemporaryFile('5.jpg');
  ExtractTemporaryFile('6.jpg');
  ExtractTemporaryFile('7.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\1.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\2.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\3.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\4.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\5.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\6.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\7.jpg');
end;

Procedure HideComponents();
begin
    WizardForm.WizardBitmapImage.Hide;
    WizardForm.WizardSmallBitmapImage.Hide;
    WizardForm.Bevel1.Hide;
    WelcomeLbl.Hide;
    welcomBevel.Hide;
    welcomBevel1.Hide;
    welcomBevel2.Hide;
    welcomBevel3.Hide;
    WizardForm.PageDescriptionLabel.Hide;
    WizardForm.PageNameLabel.Hide;
    DirBevel.Hide;
    DirBevel1.Hide;
    DirBevel2.Hide;
    WizardForm.SelectDirBrowseLabel.Hide;
    WizardForm.SelectDirLabel.Hide;
    WizardForm.DirEdit.Hide;
    WizardForm.DirBrowseButton.Hide;
    WizardForm.GroupEdit.Hide;
    WizardForm.GroupBrowseButton.Hide;
    WizardForm.SelectStartMenuFolderLabel.Hide;
    TasksBevel.Hide;
    WizardForm.TasksList.Hide;
    TasksLbl.Hide;
    FinLbl.Hide;
    WizardForm.StatusLabel.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
    FindHandle1,ColFiles1,CurIndex1,tmp:integer;
    ExecError:boolean;
    InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Hide;
    WizardForm.CancelButton.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption := 'Распаковка архивов...';
    //WizardForm.StatusLabel.Left := ScaleX(20);
    //WizardForm.StatusLabel.Top := ScaleX(350);
    ISDoneCancel:=0;

ExtractTemporaryFile('unarc.dll');
#ifdef PrecompInside
ExtractTemporaryFile('CLS-precomp.dll');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('packjpg_dll1.dll');
ExtractTemporaryFile('precomp.exe');
ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef SrepInside
ExtractTemporaryFile('CLS-srep.dll');
#endif
ExtractTemporaryFile('facompress.dll');
#ifdef records
ExtractTemporaryFile('records.inf');
#endif
ExtractTemporaryFile('russian.ini');

#ifdef precomp
  PCFVer:={#precomp};
#else
  PCFVer:=0;
#endif
    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, 0,0,0, MainForm.Handle, 0, @ProgressCallback) then begin
      repeat
        if not SrepInit('',512,0) then break;
        if not PrecompInit('',128,PCFVer) then break;
        if not FileSearchInit(false) then break;

        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

//        if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

        ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
    HideControls;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
  if CurPageID=wpWelcome then begin
    HideComponents;
    WizardForm.WizardBitmapImage.Show;
    WelcomeLbl.Show;
    welcomBevel.Show;
    welcomBevel1.Show;
    welcomBevel2.Show;
    welcomBevel3.Show;

  end;
  if CurPageID=wpSelectDir then begin
    HideComponents;
    WizardForm.WizardSmallBitmapImage.Show;
    WizardForm.Bevel1.Show;
    WizardForm.PageDescriptionLabel.Show;
    WizardForm.PageNameLabel.Show;
    DirBevel.Show;
    DirBevel1.Show;
    DirBevel2.Show;
    welcomBevel2.Show;
    welcomBevel3.Show;
    WizardForm.SelectDirBrowseLabel.Show;
    WizardForm.SelectDirLabel.Show;
    WizardForm.DirEdit.Show;
    WizardForm.DirBrowseButton.Show;
    WizardForm.GroupEdit.Show;
    WizardForm.GroupBrowseButton.Show;
    WizardForm.SelectStartMenuFolderLabel.Show;

  end;
  if CurPageID=wpSelectTasks then begin
    HideComponents;
    WizardForm.WizardSmallBitmapImage.Show;
    WizardForm.Bevel1.Show;
    WizardForm.PageDescriptionLabel.Show;
    WizardForm.PageNameLabel.Show;
    welcomBevel2.Show;
    welcomBevel3.Show;
    DirBevel.Show;
    TasksBevel.Show;
    WizardForm.TasksList.Show;
    TasksLbl.Show;

  end;
  if CurPageID=wpInstalling then begin
    InitializeSlideShow(WizardForm.Handle, 30, 30, scaleX(490), ScaleY(170), true, 2);
    CurrentPicture:=1;
    ShowImage(piclist.strings[CurrentPicture-1], 1);
    TimerID:=SetTimer(0, 0, 6000, WrapTimerProc(@OnTimer, 4));
    HideComponents;
    welcomBevel.Show;
    welcomBevel1.Show;
    welcomBevel2.Show;
    WizardForm.StatusLabel.Show;
  end;

  if CurPageID=wpFinished then begin
    HideComponents;
    WizardForm.WizardBitmapImage.Show;
    welcomBevel.Show;
    welcomBevel1.Show;
    welcomBevel2.Show;
    welcomBevel3.Show;
    FinLbl.Show;
    DeinitializeSlideShow;
    KillTimer(0, TimerID);
   
  end;

  if (CurPageID = wpFinished) and ISDoneError then
  begin
    WizardForm.Caption:= 'Ошибка распаковки!';
    FinLbl.Font.Color:= clRed;
    FinLbl.Caption:= SetupMessage(msgSetupAborted) ;
    FinLbl.Left := ScaleX(95);
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID=wpSelectProgramGroup) or (PageID=wpReady) or (PageID=wpSelectComponents) then Result:=true;
end;

procedure DeinitializeSetup();
begin
  DeinitializeSlideShow;
  KillTimer(0, TimerID);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:22, 22-03-2013 | #1955


Аватара для audiofeel

Пользователь


Сообщения: 128
Благодарности: 22

Профиль | Отправить PM | Цитировать


saurn, без ошибки! (раз пять пробовал) появилась другое = эффект перехода один и тот же или вообще слайд шоу нет стоит первая и все. может менять картинки и друг за другом без интервала а может и через 10 секунд и через 20, причем чередуется может менять эффект а может один и тот же

Последний раз редактировалось audiofeel, 22-03-2013 в 12:08.


Отправлено: 11:50, 22-03-2013 | #1956


Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


audiofeel,
Эффекты я не трогал, хотя соединил скрипты на скорую руку, исключительно чтобы проверить, может и намудрил что) Проверте на своем скрипте, что вы выкладывали. Только в процедуре CurPageChanged на wpFinished добавьте деинициализацию слайдшоу и убийство таймера.

Код: Выделить весь код
DeinitializeSlideShow;
KillTimer(0, TimerID);
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:06, 22-03-2013 | #1957


Аватара для audiofeel

Пользователь


Сообщения: 128
Благодарности: 22

Профиль | Отправить PM | Цитировать


Цитата saurn:
Только в процедуре CurPageChanged на wpFinished добавьте деинициализацию слайдшоу и убийство таймера. »
да нет все есть (когда в пустую "не найдено архива" работает более менее и эффект меняется и интервал почти такой какой задан) - с архивом (на 90 сек) начинает выше описанные выкрутасы

Последний раз редактировалось audiofeel, 22-03-2013 в 12:26.


Отправлено: 12:12, 22-03-2013 | #1958


Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


audiofeel
Есть еще такой вариант слайдшоу по таймеру. Попробуйте.

читать дальше »
Код: Выделить весь код
#define TIME_FOR_VIEW 10

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=..

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: InnoCallback.dll; Flags: dontcopy noencryption nocompression solidbreak;
Source: .bmp; Flags: dontcopy noencryption nocompression solidbreak;

Source: D:\Games\StarCraft enGB\StarDat.mpq; DestDir: {app}

[...code]
const
n=21; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
For i:=1 to X do A:=A+chr(i);
B:='';
For i:=1 to X do begin
  j:=Random(Length(A)-1)+1;
  C:='';
  B:=B + A[j];
  for k:=1 to Length(A) do
  if k<>j then C:=C+A[k];
  A:=C;
end;
for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
then begin
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+ inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
  if (currTime/{#TIME_FOR_VIEW} = N) then currTime:=0;
end;
end;

procedure InitializeWizard;
begin
bmp:=get_unique_random_number(N);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY (12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N do ExtractTemporaryFile('Image_ '+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageNameLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageNameLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;

procedure DeInitializeSetup();
begin
KillTimer(0, TimerID);
end;

Последний раз редактировалось saurn, 22-03-2013 в 13:38.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:37, 22-03-2013 | #1959


Аватара для audiofeel

Пользователь


Сообщения: 128
Благодарности: 22

Профиль | Отправить PM | Цитировать


saurn, ошибка при компиляции = одну "исправил" другая вышла

Последний раз редактировалось audiofeel, 27-07-2013 в 21:32.


Отправлено: 13:02, 22-03-2013 | #1960



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход