Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: Vadikan
Дата: 22-05-2012
Описание: Закрыто
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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. Помощь и советы [часть 5]

Отправлено: 18:01, 29-08-2011

 

Аватара для Gnom_aka_Lexander

Ветеран


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

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


Ну, и нет пределов совершенству, как говорит Seregа, - в одной процедуре таймера сделал, до кучи - как говорится, пользуйте, как лучше нравится
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[*Code]
var
  SettingPanel   : TPanel;
  Flag           : boolean;
  Timer          : LongWord;

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

procedure MyTimer;
begin
  case Flag of
  True :
    begin
      if SettingPanel.Top = 0 then
        KillTimer(WizardForm.Handle, Timer);
      if SettingPanel.Top < 0 then SettingPanel.Top := SettingPanel.Top + ScaleY(3);
    end;
  False :
    begin
      if SettingPanel.Top = ScaleY(-315) then
        KillTimer(WizardForm.Handle, Timer);
      if SettingPanel.Top > ScaleY(-315) then SettingPanel.Top := SettingPanel.Top - ScaleY(3);
    end;
  end;
end;

procedure HideShow(Sender: TObject);
begin
  KillTimer(WizardForm.Handle, Timer);
  Timer := SetTimer(WizardForm.Handle, 1, 5 , CallbackAddr('MyTimer'));
  case Flag of
    True : TButton(Sender).Caption:='Show';
    False : TButton(Sender).Caption:='Hide';
  end;
  Flag:= not Flag;
end;

procedure InitializeWizard();
 begin
  Flag:= False;

  SettingPanel := TPanel.Create(WizardForm);
  with SettingPanel do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(0),ScaleY(-315),ScaleX(497),ScaleY(313));
    ParentBackground := False;
  end;

  with TButton.Create(WizardForm) do
  begin
    OnClick:= @HideShow;
    SetBounds(ScaleX(40),ScaleY(327),ScaleX(75),ScaleY(25))
    Caption:='Show';
    Parent:= WizardForm;
  end;
end;


Цитата Johny777:
для оптимизации или простоты? »
нет, это дескриптор таймера, по ид он не убивается, вроде.

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


Последний раз редактировалось Gnom_aka_Lexander, 17-05-2012 в 14:02.

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

Отправлено: 13:29, 17-05-2012 | #2071



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

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


Аватара для Johny777

Ветеран


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

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


Лександер,
ну та что на одной процедуре отличается от предыдущей тем, что её нельзя начать закатывать во время выката, а ту с двумя можно!
и везде SettingPanel.Top = -315 кажись правильнее будет записать SettingPanel.Top = ScaleY(-315)

El Sanchez,
думаю этим примерам прямая дорога в шапку, в "Ссылки на примеры скриптов"

Последний раз редактировалось Johny777, 17-05-2012 в 13:50.


Отправлено: 13:35, 17-05-2012 | #2072


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Johny777, поправил, теперь можно на ходу менять направление
В одной процедуре - просто меньше шансов запутаться в дальнейшем.

Цитата Johny777:
кажись правильнее будет записать SettingPanel.Top = ScaleY(-315) »
совершенно верно.

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

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

Отправлено: 13:38, 17-05-2012 | #2073


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

Ветеран


Contributor


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

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


Johny777, нужно рассчитывать интервал таймера и сдвиг контрола в зависимости от размеров самого контрола. Если у меня, к примеру, панель высотой в 2 пикселя и надо все это дела выкатить/закатить за, скажем, 1 сек., то фиксированный сдвиг в 3 пикселя и фиксированный интервал таймера в 5 мс не катят. Убил полдня на алгоритм, вот вариант.
читать дальше »

Код: Выделить весь код
[code]
var
    SettingPanel: TPanel;
    hBtn: TButton;
    //iStartTime: Integer; //debug
    iTimer, iRollInfo: Integer;

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 GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall'; //debug


procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD);
var
    iLen, iStep: Integer;
begin
    iLen := iRollInfo and $FFFF;
    iStep := (iRollInfo and $FF0000) shr $10;
    case iRollInfo shr $18 of
        $0: begin
                if SettingPanel.Left >= -iStep then
                begin
                    KillTimer(0, iTimer);
                    hBtn.Enabled := True;
                end;
                SettingPanel.Left := SettingPanel.Left + iStep;
                //WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Left); //debug
            end;
        $1: begin
                if SettingPanel.Left <= -iLen + iStep then
                begin
                    KillTimer(0, iTimer);
                    hBtn.Enabled := True;
                end;
                SettingPanel.Left := SettingPanel.Left - iStep;
                //WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Left); //debug
            end;
        $2: begin
                if SettingPanel.Top >= -iStep then
                begin
                    KillTimer(0, iTimer);
                    hBtn.Enabled := True;
                end;
                SettingPanel.Top := SettingPanel.Top + iStep;
                //WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Top); //debug
            end;
        $3: begin
                if SettingPanel.Top <= -iLen + iStep then
                begin
                    KillTimer(0, iTimer);
                    hBtn.Enabled := True;
                end;
                SettingPanel.Top := SettingPanel.Top - iStep;
                //WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Top); //debug
            end;
    end;
end;

procedure RollControl(Ctrl: TControl; dwTime, dwFlag: DWORD);
//  Ctrl    :   control
//  dwTime  :   rolling time, ms
//  dwFlag  :   roll type ($0 - left to right, $1 - right to left, $2 - top to bottom, $3 - bottom to top)
var
    iLen, iStep: Integer;
    iKoeff: Extended;
begin
    iLen := (dwFlag shr $1 xor $1)*Ctrl.Width + (dwFlag shr $1)*Ctrl.Height;
    repeat
        iStep := iStep + 1;
        iKoeff := (iStep * dwTime)/(iLen * 1000/64);
    until iKoeff >= 1;
    //
    if iRollInfo = 0 then iRollInfo := (dwFlag shl $18) or (iStep shl $10) or iLen else iRollInfo := iRollInfo xor $1000000;
    iTimer := SetTimer(0, 0, Trunc(iKoeff)*1000/64, CallbackAddr('TimerProc'));
end;

procedure HideShow(Sender: TObject);
begin
    //iStartTime := GetTickCount; //debug
    RollControl(SettingPanel, 1000, $2);
    TButton(Sender).Enabled := False;
end;

procedure InitializeWizard();
begin
    SettingPanel := TPanel.Create(WizardForm);
    with SettingPanel do
    begin
        Parent := WizardForm;
        SetBounds(ScaleX(0), ScaleY(-315), ScaleX(497), ScaleY(315));
        ParentBackground := False;
    end;

    hBtn := TButton.Create(WizardForm);
    with hBtn do
    begin
        OnClick := @HideShow;
        SetBounds(ScaleX(40), ScaleY(327), ScaleX(75), ScaleY(25));
        Caption := 'Show';
        Parent := WizardForm;
    end;
end;

Последний раз редактировалось El Sanchez, 20-05-2012 в 20:30. Причина: добавил неактивность кнопки во время анимации

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

Отправлено: 18:19, 17-05-2012 | #2074


Аватара для Johny777

Ветеран


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

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


Цитата El Sanchez:
Убил полдня на алгоритм »
опять же "неоценимая помощь"
Спасибо!

очень удобно то, что в процедуре настраивать ничего не нужно
записал в "HideShow" "$0"
(у меня ведь выкат слева)

а в закомментированных строках с препиской //debug на конце можно вписать изменение названия кнопки/выпадающего меню (у меня)
(MnuItem.Caption := ExpandConstant('{cm:Console0}'); MnuItem.Caption := ExpandConstant('{cm:Console1}'))
В общем разобрался немного! :
если попытаться закатить панель в процессе выката, то у неё слетают тормоза

Последний раз редактировалось Johny777, 20-05-2012 в 20:49.


Отправлено: 18:38, 17-05-2012 | #2075


Аватара для bugmenotagain

Старожил


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

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


какой выбрать уровень сжатия
fast
normal
max
ultra
чтобы данные не повредить чрезмерным сжатием

и галочку ставить "уплотненное сжатие файлов"?

Отправлено: 22:24, 18-05-2012 | #2076


Аватара для Johny777

Ветеран


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

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


Цитата bugmenotagain:
чтобы данные не повредить чрезмерным сжатием »
а такое бывает?
хз, тк не интересовался особо, но вроде прекомп может повредить и то при условиях...
но, что стоит в справке= одобрено
те сжимай как хош
вот например настройка на максимальное сжатие стандартными (встроенными. а инно использует lzma/lzma2 алгоритмы = 7Zip архиватор) средствами
читать дальше »

Compression=lzma2/ultra64
LZMAUseSeparateProcess=yes
LZMAMatchFinder=BT
LZMANumFastBytes=273
LZMADictionarySize=262144
///LZMADictionarySize=131072
InternalCompressLevel=ultra64
///SolidCompression=true
MergeDuplicateFiles=true

только словарь настрой тестами под себя
также если есть "тяжёлые" компоненты, то не используй SolidCompression=true, который может повысить уровень сжатия
и учти, что чем выше сжатие, тем дольше распаковка
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Цитата bugmenotagain:
и галочку ставить "уплотненное сжатие файлов"? »
есть классный GUI для создания скриптов "Inno Script Studio"
https://www.kymoto.org/inno-script-studio/download
попробуй

Последний раз редактировалось Johny777, 19-05-2012 в 00:13.

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

Отправлено: 23:31, 18-05-2012 | #2077


Аватара для bugmenotagain

Старожил


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

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


Цитата Johny777:
только словарь настрой тестами под себя »
что такое словарь и как его настораивать

Отправлено: 12:22, 19-05-2012 | #2078


Аватара для Johny777

Ветеран


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

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


Цитата bugmenotagain:
что такое словарь »
в гугл забей "словарь архиватора"

Цитата bugmenotagain:
и как его настораивать »
2 строки
используй одну из них
LZMADictionarySize=262144 ///(этот когда много мелких файлов)
LZMADictionarySize=131072
тесты покажут при каком сильнее жмёт

Последний раз редактировалось Johny777, 19-05-2012 в 14:35.


Отправлено: 14:26, 19-05-2012 | #2079


Аватара для bugmenotagain

Старожил


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

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


все эти программы для inno setup которые Я скачал однотипные и примитивные. нет нормального графического оформления, настройка страниц, отключение деинсталляции для определенных компонентов и еще много чего.

Цитата Johny777:
2 строки
используй одну из них
LZMADictionarySize=262144 ///(этот когда много мелких файлов)
LZMADictionarySize=131072
тесты покажут при каком сильнее жмёт »
не проще FreeArc'ом сжать? говорят мощная штука

Отправлено: 14:35, 19-05-2012 | #2080



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Test ferget Тест-форум 0 24-08-2011 01:25
test ! ! Aaa ! ! Тест-форум 0 23-04-2011 11:29
test Santa aka Snt Тест-форум 0 16-04-2011 22:35
test xolod. Программное обеспечение Linux и FreeBSD 0 19-04-2009 21:03
Test memory KEugeNik Хочу все знать 11 23-11-2003 23:11




 
Переход