Это мощное бесплатное средство для создания установочных пакетов (дистрибутивов) программ. Поддерживается шифрование, установка пароля, различные задачи по завершении установки. По сравнению с NSIS (основной конкурент на бесплатной основе) проще в настройке, имеет более понятную структуру скрипта, но генерит на 200-300 кб больший инсталятор. На данный момент он конкурирует и даже превосходит многие коммерческие установщики по функциональности и стабильности.
Последние версии: Inno Setup QuickStart Pack (ansi)5.4.2 [17.03.2011] Скачать (1.7 Mb) Inno Setup QuickStart Pack (unicode)5.4.2 [17.03.2011] Скачать (2 Mb) Русификатор для Inno Setup версии 5.4.x от vadimsva Скачать
Расширения от ResTools Inno Setup Compiler5.4.1 - 5.4.2 build 110319 Скачать (2.71 Mb)|Зеркало (1.54 Mb) - убраны картинки для уменьшения размера архива Inno ISCmplr Setup5.4.2 build 110329 Скачать (1.6 Mb)|Зеркало Добавляет списку компонентов возможность сворачивать дочерние элементы. Содержит более удобный редактор, кроме того, компилятор имеет множество других возможностей и новых функций. На сайте автора также есть дополнительные библиотеки. Русификатор для Inno Setup Enhanced (Restools) версии 5.4.x (ansi и unicode) от vadimsva Скачать
Сборки Inno Setup: InnoUltra5.4.2 [28.04.2011] от Gnom Сборка инструментов для работы со скриптами InnoSetup. Содержит в себе все обновленные инструменты для работы, сборка постоянно обновляется. Полная версия|Облегченная версия|Update
Как много дел считались невозможными, пока они не были осуществлены. (Гай Плиний Секунд) Не занимаюсь подключением FreeArc/ISDone к чужим скриптам.
Дата: Вторник, 12.04.2011, 15:11 | Сообщение # 166
Злой модер
Модератор
Сообщений: 186
Статус: Offline
-Shank-, к ISwin7 есть справка? нужно ее читать, возможно там не предусмотрена обработка вновь созданных кнопок. или эту строчку нужно размещать после создания кнопки в одной процедуре. Нужно скрипт постмотреть, я с ISwin7 всерьез не ковырялся.
Дата: Вторник, 12.04.2011, 15:22 | Сообщение # 167
Пользователь
Сообщений: 16
Статус: Offline
Собственно вот скрипт Script Если есть желание, можно посмотреть)
Gnom, Спасибо за помощь , проблема решилась, путем отката на более позднюю версию ISwin7 И сразу встречный вопрос, возможно ли сюда прикрутить лого,только не кликабельное...., убрав кнопку "инфо"?
Сообщение отредактировал -Shank- - Вторник, 12.04.2011, 15:35
Дата: Вторник, 12.04.2011, 15:39 | Сообщение # 168
Местный гуру
Администратор
Сообщений: 150
Статус: Offline
Quote (Gnom)
задался целью воспроизвести ГОГ-инсталл, ищу простые пути, пока там три кнопки, которые сменяются в зависимости от набора компонентов страницы думал, нельзя-ли одной обойтись
Ну можно сделать примерно так
Code
var Flag1, Flag2: Boolean;
procedure btnClick(Sender: Tobject); begin if Flag1 then begin //что-то делаем Flag1:= False; Flag2:= True; end else if Flag2 then begin //что-то делаем Flag1:= True; Flag2:= False; end; end;
Как много дел считались невозможными, пока они не были осуществлены. (Гай Плиний Секунд) Не занимаюсь подключением FreeArc/ISDone к чужим скриптам.
Дата: Вторник, 12.04.2011, 18:36 | Сообщение # 170
Пользователь
Сообщений: 23
Статус: Offline
У меня появилась идейка насчёт модуля XVID. Идея такая, сделать во время инсталяции выбор видео, которое будешь смотреть, в любое время по кнопочке можно прервать показ видео и начать смотреть другое. Кто нибудь сможет мне в этом помочь?
Добавлено (12.04.2011, 18:24) --------------------------------------------- я вот смог сделать воспроизведение по клику, но вот как приостановить видео, может быть так?:
Code
mciSendString('close video1 ','',0,0);
Добавлено (12.04.2011, 18:36) --------------------------------------------- Хотя ладно сам разберусь
Сообщение отредактировал Riper - Вторник, 12.04.2011, 18:31
Дата: Вторник, 12.04.2011, 19:17 | Сообщение # 171
Злой модер
Модератор
Сообщений: 186
Статус: Offline
Riper, пожалел-бы пользователей, на моих 8-и гигах оперативки это может и будет без проблем работать, а ты представь, у человека гиг оперативки, идет распаковка прекомпа и ему захотелось переключить ролик...
Дата: Вторник, 12.04.2011, 19:28 | Сообщение # 173
Пользователь
Сообщений: 26
Статус: Offline
Не пойму почему не происходит сообшение WM_ACTIVATE?
const WM_ACTIVATE=$0006;
var Memo1:TMemo;
procedure activ(var Msg: TMsg; var Handled: Boolean); begin if Msg.message=WM_ACTIVATE then Memo1.Lines.Add('Ативно'); end;
procedure InitializeWizard(); begin Memo1:=TNewMemo.Create(WizardForm); with Memo1 do begin Parent:=WizardForm; Left:=25; Top:=188; Width:=101; Height:=42; end; Application.OnMessage:=@activ; end;
Сообщение отредактировал DaRKdemoN - Вторник, 12.04.2011, 19:29
Дата: Вторник, 12.04.2011, 19:34 | Сообщение # 174
Злой модер
Модератор
Сообщений: 186
Статус: Offline
Riper, тогда проще можно, привязать к проверке системных требований, и сделать логическую цепочку - если объем озу меньше 2-х гиг, то видео вообще не показывается, если объем ОЗУ меньше 4-х гиг, то видео показывается, но нет возможности его переключать. Кстати, логика несложная, но если использовать ее для тяжелых красивостей инсталла, то на трекерах будет меньше ругани на кривые руки репакеров.
procedure CurPageChanged(CurPageID: Integer); begin if CurPageID = wpWelcome then WizardForm.WizardSmallBitmapImage.Hide else WizardForm.WizardSmallBitmapImage.Show; if CurPageID = wpWelcome then WizardForm.WelcomeLabel1.Show else WizardForm.WelcomeLabel1.Hide; end;
Дата: Вторник, 12.04.2011, 19:52 | Сообщение # 175
Пользователь
Сообщений: 23
Статус: Offline
Gnom Хорошая идея с сис.требованиями, но наверное позже сделаю и при чьей-то помощи, а пока буду скрипт "обтачивать", заготовочку на тест к выходным выложу. Кстати а почему переключение будет при ОЗУ не меньше 4 гиг. это же можно сделать так: при нажатие вот такая процедура
Code
mciSendString('close video1 ','',0,0);
и сразу же восстанавливается меню выбора, я не думаю что это будет занимать много памяти
Quote (Riper)
Кстати а почему переключение будет при ОЗУ не меньше 4 гиг.
Это я для примера, нужно тестить режимы дозволенногоGNOM @GNOMИспользуй тег hr для отделения своего сообщения от сообщения пользователяShegorat
Сообщение отредактировал Gnom - Вторник, 12.04.2011, 20:02
Дата: Вторник, 12.04.2011, 20:11 | Сообщение # 176
Местный гуру
Администратор
Сообщений: 150
Статус: Offline
Quote (DaRKdemoN)
Не пойму почему не происходит сообшение WM_ACTIVATE?
А что ты пытаешься сделать? То что ты написал это функция реагирования на сообщение WM_ACTIVATE, отправленное самой форме или ее дочернему окну.
Quote (Riper)
Хорошая идея с сис.требованиями, но наверное позже сделаю и при чьей-то помощи, а пока буду скрипт "обтачивать", заготовочку на тест к выходным выложу. Кстати а почему переключение будет при ОЗУ не меньше 4 гиг. это же можно сделать так: при нажатие вот такая процедура
Ну для начала видео можно вообще не открывать при ОЗУ меньше 2 гб. И просто сделать менюшку, в которой можно выбрать видео, а также кнопки включения/выключения видео. Когда освобожусь - завтра-послезавтра - возможно помогу реализовать
P.S. Написал первую версию парсера компонентов, ну точнее это не первая версия, а первая, которую я выкладываю. Пока нет поддержки флага exclusive, но в будущем планирую этот недостаток исправить, а также добавить ботву.
procedure AddChaild(ParentID, ID: Integer); var n: integer; begin n:= GetArrayLength(Comps[ParentID].ChaildID); SetArrayLength(Comps[ParentID].ChaildID, n+1); Comps[ParentID].ChaildID[n]:= ID; end;
function ISChaild(ParentID, ItemID: Integer): Boolean; var n: integer; begin Result:= False; for n:=0 to GetArrayLength(Comps[ParentID].ChaildID)-1 do begin if Comps[ParentID].ChaildID[n]=ItemID then begin Result:= True; Break; end; end; end;
function GetParent(ItemID: Integer): Integer; var n: integer; begin Result:=-1; for n:= ItemID downto 0 do begin if ISChaild(n, ItemID) then begin Result:= n; Break; end; end; end;
function NextParent(LastParent, ItemID: Integer): Integer; var n: integer; begin Result:=-1; if LastParent=0 then Exit; for n:= LastParent-1 downto 0 do begin if ISChaild(n, ItemID) then begin Result:= n; Break; end; end; end;
procedure CompOnClick(Sender: TObject); var i,n, b,f, z,x, CID,PID: Integer; begin if ActiveFlag1 then Exit; //get index of sender n:= xComp; CID:=0; for i:=0 to n-1 do begin if (Comps[i].Box=Sender) or (Comps[i].Desc=Sender) then begin CID:= i; Break; end; end;
//label click event if (comps[CID].Desc = Sender) then begin Comps[CID].Box.Checked:= not Comps[CID].Box.Checked; end;
if not ActiveFlag1 then begin ActiveFlag1:= True;
if (CID<>(xComp-1))and(Comps[CID].Box.State<>cbGrayed) then begin for i:=0 to GetArrayLength(Comps[CID].ChaildID)-1 do begin f:= Comps[CID].ChaildID[i]; Comps[f].Box.Checked:= Comps[CID].Box.Checked; end; end;
PID:= GetParent(CID); if PID<>-1 then begin repeat z:=0; x:=0; for i:=0 to GetArrayLength(Comps[PID].ChaildID)-1 do begin f:=Comps[PID].ChaildID[i]; if (not Comps[f].Exclusive)and(Comps[f].Box.Checked) then x:=x+1; if Comps[f].Exclusive then z:=z+1; end; if (x=(GetArrayLength(Comps[PID].ChaildID)-z)) then Comps[PID].Box.Checked:= True else if (x=0) then Comps[PID].Box.Checked:= False else if (x>0)and(x<(GetArrayLength(Comps[PID].ChaildID)-z)) then Comps[PID].Box.State:= cbGrayed; Pid:= NextParent(PID, CID); until (PID=-1); end;
for i:=0 to n-1 do begin WizardForm.ComponentsList.Checked[i]:= Comps[i].Box.Checked; end; end;
ActiveFlag1:= False; end;
function TrimEx(S: String): String; begin while S[1]=' ' do Delete(S, 1, 1); while S[Length(S)]=' ' do SetLength(S, length(S)-1); Result:= S; end;
function ParseCmd(var S: string; Cmd: string): String; var i, i1, k: Integer; begin i:= Pos(AnsiLowercase(Cmd), AnsiLowercase(S)); if i > 0 then begin k:=i; while (S[k]<>';')and(k<>Length(S)) do k:=k+1; i1:=i+length(cmd); Result:= Copy(S, i1, k-i1); Delete(S, i, k-i+1); Result:= TrimEx(result); end; end;
function DelQuotes(S: String): String; begin if (S<>'') then begin if (S[1]='"')and(S[Length(S)]='"') then begin Delete(S, 1, 1); SetLength(S, Length(S)-1); end; end; Result:= S; end;
procedure ParseComponents(ALeft, ATop: Integer); var i, N, k, Left, Top: Integer; Lvl: Byte; str: array of string; s1: string; skip: boolean; begin s1:= '{#Comps}'; repeat k:= Pos('|', s1); if k=1 then begin Delete(s1, 1, 1); CONTINUE end; if k>0 then begin i:= GetArraylength(str); SetArrayLength(str, i+1); str[i]:= Copy(s1, 1, k-1); Delete(s1, 1, k); end; if (k=0)and(Length(s1)>0) then begin i:= GetArraylength(str); SetArrayLength(str, i+1); str[i]:= s1; SetLength(s1, 0); end; until (Length(s1)=0);
n:= WizardForm.ComponentsList.ItemCount; SetArrayLength(Comps, N); xComp:=N; for i:=0 to N-1 do begin lvl:= WizardForm.ComponentsList.ItemLevel[i] Comps[i].Name:= DelQuotes(ParseCmd(str[i], 'name:')); Comps[i].Flags:= DelQuotes(ParseCmd(str[i], 'flags:')); Comps[i].ItemID:= i;
Comps[i].Level:= Lvl; end; for i:= 0 to N-1 do begin skip:= false; for k:=i+1 to N-1 do begin if (Comps[k].Level<=Comps[i].Level) then Skip:= true; if (Comps[k].Level>Comps[i].Level)and(not skip) then AddChaild(i, k); end; end; end;
procedure InitializeWizard(); begin ParseComponents(20, 100) end;
Как много дел считались невозможными, пока они не были осуществлены. (Гай Плиний Секунд) Не занимаюсь подключением FreeArc/ISDone к чужим скриптам.
Дата: Вторник, 12.04.2011, 20:41 | Сообщение # 178
Пользователь
Сообщений: 26
Статус: Offline
Shegorat Вообще WM_ACTIVATE это для примера мне надо чтоб если происходит определённое сообщение выполнялось что-то ещё. Например при активации окна что-бы в мэмо писалось "АКТИВНО", а при де активации окна "НЕАКТИВНО" как в примере, но он не работает. Подскажи если можешь что я не так делаю.