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

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

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

Ветеран


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


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

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


Изменения
Автор: Serega
Дата: 13-08-2011
Вложения
Тип файла: 7z Inno Setup [все вопросы] часть 1.7z
(1.34 Mb, 908 просмотров)
Тип файла: 7z Inno Setup [все вопросы] часть 2.7z
(3.12 Mb, 806 просмотров)
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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] - Скачать;

  • InnoSetup Script Joiner - Программа для объединения нескольких скриптов InnoSetup в один;

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


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

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 00:28, 04-11-2010

 

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

Ветеран


Contributor


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

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


Цитата Qu@dr0:
1) Как сделать, чтобы строка с галочкой (про сохранение в UTF-8) не была так далеко от формы ввода имени, а располагалась прямо под ней вплотную?
2) Как добавить под этой строкой про UTF-8 (не прямо под ней, а на 3 пробела ниже) информацию следующего содержания:
"Вы в любое время сможете сменить никнейм, для этого войдите в папку игры, откройте Блокнотом файл rev.ini, найдите строчку PlayerName и после знака "=" впишите желаемый никнейм." »
Измените процедуру InitializeWizard:
Код: Выделить весь код
...
ConvertCheckBox := TCheckBox.Create(WizardForm);
with ConvertCheckBox do
begin
    Parent := RevEmuPage.Surface;
    SetBounds(RevEmuPage.Edits[0].Left, RevEmuPage.Edits[0].Top + ScaleY(30), ScaleX(200), ScaleY(17));
    Caption := 'Сохранить в UTF-8';
end;

with TLabel.Create(WizardForm) do
begin
    Parent := RevEmuPage.Surface;
    Caption := 'Вы в любое время сможете сменить никнейм, для этого войдите в папку игры, откройте Блокнотом файл rev.ini, найдите строчку PlayerName и после знака "=" впишите желаемый никнейм.';
    SetBounds(0, ConvertCheckBox.Top + ScaleY(25), WizardForm.InnerNotebook.Width, ScaleY(34));
    WordWrap := True;
    Transparent := True;
end;
Координаты по высоте галки и надписи регулируйте по своему усмотрению (выделено красным).

Цитата Qu@dr0:
И чтобы выравнивание этого текста было по ширине (так выглядит лучше) »
Доступно выравнивание только по правой, левой сторонам и по середине.


Цитата Qu@dr0:
Хоть программированием я никогда не занимался и уровень знаний в этой области нулевой, но ошибку (спасибо, что была она не очень сложной) в скрипте я нашёл и даже исправил))) Правда, интуиции хватило только на это, да ещё на изменение имеющихся текстов в окне... »
Qu@dr0, респект. Я тоже не программист и, как и вы, начинал изучение Inno с анализа чужих кодов.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:47, 23-09-2011 | #3201



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

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


Ветеран


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

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


Опять столкнулся с проблемой что когда идет установка и слайд-шоу то прогресс бара почему то не видно(скрипт в ЛС даю)

Отправлено: 20:06, 23-09-2011 | #3202


Аватара для Gnom_aka_Lexander

Ветеран


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

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


insombia, В этот ра скрипт не нужен У IsSlideShow специфика такая - изображения всегда поверх всего. ПРосто сдвинь прогрессбар так, что слайды его не закрывали.

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


Отправлено: 20:10, 23-09-2011 | #3203


Ветеран


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

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


Лександер то прикол в том что вчера(до того как я кидал тебе скрипт все было нормально) но проблема решается так

procedure CurStepChanged2(CurStep: TSetupStep);
var res: integer;
begin
CurStepChanged1(CurStep: TSetupStep);
if CurStep = ssPostInstall then begin
If Soft.Checked then begin
WizardForm.FileNameLabel.Caption:=ExpandConstant('{cm:SoftInstall}');
Exec(ExpandConstant('Hard Reset repack\Redist\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('Redist\DirectX'), SW_SHOW, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('Hard Reset repack\Redist\vcredist.exe'), '/Q', ExpandConstant('Redist'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
end;

если CurStepChanged1(CurStep: TSetupStep); убрать все нормально но архивы не распаковываются а если оставить то не видно прогресс бара

может вообще убрать слайды?

Отправлено: 20:20, 23-09-2011 | #3204


Новый участник


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

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


El Sanchez, почти всё работает прекрасно. Кроме сохранения введённого в форму никнейма в кодировке UTF-8. Я ввожу в форму никнейм спецсимволами, отмечаю пункт "Сохранить в UTF-8", однако в rev.ini вместо символов вписываются вопросительные знаки, т.е. всё сохраняется в ANSI без спецсимволов.

Можно ли сделать, чтобы введённый в форму никнейм сохранялся в кодировке UTF-8, а кодировка остальной части файла оставалась ANSI?
Например, в Notepad++ можно вставить в rev.ini отдельное слово, выделить его, нажать "Encoding -> Convert to UTF-8 without BOM", и rev.ini будет в ANSI, кроме единственного слова, которое будет в UTF-8. Реально ли такое сделать в скрипте InnoSetup?

И можно ли встроить опцию "Восстановление", которую можно выбрать в "Программах и компонентах", и которая бы удаляла все новые и изменённые файлы и восстанавливала состояние, которое было сразу после установки?

Если бы были такие Pascal-скрипты с подробным описанием вплоть до каждого параметра и значения, изучать было бы гораздо легче и быстрее, а то читаю этот скрипт и 99% текста ни о чём не говорит...

Отправлено: 22:52, 23-09-2011 | #3205


Ветеран


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

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


В 6 исдоне есть ошибка что припустим у меня распаковывает архивы а у других людей нет как быть?

Отправлено: 09:35, 24-09-2011 | #3206


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

Ветеран


Contributor


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

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


Цитата Qu@dr0:
Я ввожу в форму никнейм спецсимволами, отмечаю пункт "Сохранить в UTF-8", однако в rev.ini вместо символов вписываются вопросительные знаки, т.е. всё сохраняется в ANSI без спецсимволов »
Qu@dr0, а что вы хотели? ANSI не знает ваших спецсимволов, поэтому документ, открытый в ANSI-кодировке, неизвестные символы будет отображать абы как. Кстати, Блокнот не годится для редактирования rev.ini, пользуйтесь, например, AkelPad. В инсталляторе вбейте никнейм кириллицей с конвертацией в UTF-8 и откройте потом его в AkelPad. Никнейм будет крякозяблами, это нормально, в статусной строке - ANSI.

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

Отправлено: 11:21, 24-09-2011 | #3207


Новый участник


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

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


El Sanchez, тут важно не то, как никнейм отображается при открытии rev.ini в редакторах, а как его понимает сама игра.

Сейчас хоть отмечай "сохранить в UTF-8" в инсталляторе, хоть не отмечай, а сохраняются вопросительные знаки вместо спецсимволов. А через тот же Notepad++ можно сохранить так, чтобы и файл вроде как остался в ANSI, и никнейм игра поняла нормально, например:

rev.ini


При открытии rev.ini в том же обычном "Блокноте" в строке PlayerName отображаются кракозябры, а игра всё воспринимает нормально.

Фишка в том, что никнейм спецсимволами можно сделать только в UTF-8, но если сохранить в UTF-8 весь rev.ini, игра будет работать некорректно, а если в UTF-8 будет только никнейм, а остальной файл - в ANSI, то и игра запустится нормально, и спецсимволы в никнейме не потеряются.
Можно ли, чтобы при отмечании пункта "Сохранить в UTF-8" rev.ini сохранялся в таком виде, как по вышеупомянутой ссылке?

Отправлено: 15:35, 24-09-2011 | #3208


Новый участник


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

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


Qu@dr0,
Я тоже не понимаю в программировании но у меня есть код который работает как надо но есть одно но. надо его поправить добавить смену ClanTag и чтоб продолжение без ввода символа было не возможным
кстати сохраняет ник нормально (utf-8)
читать дальше »
[code]
const
CP_ACP = 0; CP_UTF8 = 65001;
var
SystemPage, SelectTasksPage: TWizardPage;
RequirementsLbl: TLabel;
Edit, Edit1: TNewEdit;
Nick: string;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

procedure CreatePageComponents;
var
Pdm: string;
vr,VidRam : Longint;
Version: TWindowsVersion;
begin
SystemPage:=CreateCustomPage(wpLicense, ExpandConstant('Выбор ника'), ExpandConstant('Выбор Ника'));
Edit := TNewEdit.Create(SystemPage);
Edit.Top := ScaleY(8);
Edit.Width := SystemPage.SurfaceWidth div 2 - ScaleX(8);
Edit.Text := 'Ник';
Edit.Parent := SystemPage.Surface;
end;

procedure InitializeWizard;
begin
CreatePageComponents;
end;

function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPostInstall) then
begin
SetIniString('steamclient', 'PlayerName', AnsiToUTF8(Edit.Text), ExpandConstant('{app}')+'\rev.ini');
end;
end;

Последний раз редактировалось leha---83, 24-09-2011 в 20:42.


Отправлено: 20:32, 24-09-2011 | #3209


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

Ветеран


Contributor


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

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


leha---83, имя игрока, предложенное Qu@dr0, вашим кодом нормально не перекодируется, будут те же вопросительные знаки, проверено.
Qu@dr0, попробовал несколько вариантов перекодировки, все не то, плюнул, написал по-своему. Требуется юникодная версия компилятора:
читать дальше »

Код: Выделить весь код
[code]
#ifndef UNICODE
    #error Unicode version of Inno Setup is required to compile this script
#endif

var
    RevEmuPage: TInputQueryWizardPage;
    ConvertCheckBox: TCheckBox;

procedure SetNickname(Nickname: String; Filename: String; IsConvert: Boolean);
var
    arrAnsi, arrUtf8: TArrayOfString;
    i: Integer;
begin
    if IsConvert then
    begin
        LoadStringsFromFile(Filename, arrAnsi);
        SetArrayLength(arrUtf8, 1);
        for i := 0 to GetArrayLength(arrAnsi)-1 do
        begin
            if Pos(LowerCase('PlayerName='), LowerCase(arrAnsi[i])) = 0 then
                SaveStringToFile(Filename, arrAnsi[i] + #13#10, i <> 0)
            else begin
                arrUtf8[0] := Copy(arrAnsi[i], 0, Length('PlayerName=')) + Nickname + #10;
                SaveStringsToUTF8File(Filename, arrUtf8, i <> 0);
            end;
        end;
    end else SetIniString('steamclient', 'PlayerName', Nickname, Filename);
end;

procedure NicknameOnChange(Sender: TObject);
begin
    WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> '';
end;

//
procedure InitializeWizard();
begin
    RevEmuPage := CreateInputQueryPage(wpInfoAfter, 'Настройка RevEmu', '', 'Пожалуйста, введите данные профиля и нажмите Далее.');
    with RevEmuPage do
    begin
        Add('Ник:', False);
        Edits[0].OnChange := @NicknameOnChange;
    end;
    ConvertCheckBox := TCheckBox.Create(WizardForm);
    with ConvertCheckBox do
    begin
        Parent := RevEmuPage.Surface;
        SetBounds(RevEmuPage.Edits[0].Left, RevEmuPage.Edits[0].Top + ScaleY(40), ScaleX(200), ScaleY(17));
        Caption := 'Сохранить в UTF-8';
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
    if CurPageID = RevEmuPage.ID then WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> '';
    if CurPageID = wpFinished then SetNickname(RevEmuPage.Values[0], ExpandConstant('{app}\rev.ini'), ConvertCheckBox.Checked);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:28, 24-09-2011 | #3210



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Утилиты - [addon] Inno Setup CrOsP Наборы обновлений для Windows XP/2003/Windows 7 33 11-05-2011 16:03
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Inno Setup 5.3.6 OSZone Software Новости программного обеспечения 0 15-11-2009 17:30
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход