Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Kashtan007
04-09-2014, 19:08
Добрый день. Нужна ваша помощь.
Мне нужно, чтобы на странице каталога была 2 чекбокса
-Удалить все старые моды
--Сохранить бекап старых модов
Выглядеть это должно так:
http://s018.radikal.ru/i524/1409/03/2883708d9c1a.png
1 чекбокс, должен удалять содержимое в res_mods\0.9.2\* и удалять папку xvm по пути res_mods\xvm.
2 чекбокс, должен делать бекап папки res_mods, по пути ModPack\BackUp\res_mods, а после удаление репака возвращал бекап в папку res_mods.
Есть еще 1 проблема:
У меня в репаке есть файл "bin" и в папке куда я ставлю репак он тоже есть. В следствии чего если я ставлю репак, то файл заменяется, а когда удаляешь репак то файл тоже удаляется и не запускается игра. Как сделать, чтобы когда устанавливаешь репак, то файл "bin" из папки куда ставишь репак копировался по пути ModPack\OriginalFiles, а после удаление возвращался на свое место.
Как это реализовать? Заранее спасибо всем за помощь.
kotyarko@fb
04-09-2014, 19:30
Добрый день. Нужна ваша помощь. »
Здорова, танкист :)
з.ы. модПак - это не репак.
Есть неплохой пример (http://www.koreanrandom.com/forum/topic/9050-инсталлятор-для-модпаков/?p=157502).
А зачем тебе *.bin в инсталляторе?
Kashtan007
04-09-2014, 19:37
kotyarko@fb, ок. Можно ли сделать это же, только на странице "Каталог"?
Да я просто так bin написал, вообще нужно файл path, чтобы переносило.
kotyarko@fb
04-09-2014, 19:44
вообще нужно файл path, чтобы переносило. »
Тогда используй CurStepChanged - для переноса файла во время установки;
и CurUninstallStepChanged - для восстановления при удалении.
Можно ли сделать это же, только на странице "Каталог"? »
Можно. Меняй параметры Parent у каждого элемента, и сотри создание страницы.
acer0072
04-09-2014, 21:48
Добрый день. Помогите прикрутить к чекбоксу "Перейти на сайт" - ссылку. Заранее спс. Пример скрипта http://rghost.ru/57851446
Dodakaedr
04-09-2014, 22:05
acer0072, попробуйте так, не проверял:
[Code]
procedure LinkOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://forum.oszone.net/thread-278998-147.html', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;
Link := TNewCheckBox.Create(WizardForm);
with Link do
begin
Parent := Component.Surface;
Left := ScaleX(315);
Top := ScaleY(200);
Width := ScaleX(200);
Height := ScaleY(17);
Caption := 'Перейти на сайт';
Checked:=True;
OnClick:=@LinkOnClick;
end;
acer0072
04-09-2014, 22:30
Спасибо. Но не сработало((. Это же отрабатывает на клик по ссылке. А мне нужен чекбокс.
Dodakaedr
04-09-2014, 22:37
Спасибо. Но не сработало(( »
Ну да)) а так?
Добавте это в секцию [Run]. Предыдущее удалите.
FileName: "http://forum.oszone.net/thread-278998-147.html"; Check: "LinkCheck"; Flags: shellexec skipifsilent
Nightwishh
04-09-2014, 23:32
Сдравствуйте. Хочу узнать правильно ли я выковарил нужный мне кусок кода для текстурирования чекбокса "Не создавать папку в меню"Пуск"[Setup]
WizardSmallImageFile=btnimage.bmp
AllowNoIcons=true
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DefaultGroupName=My Application
SolidCompression=true
Compression=none
InternalCompressLevel=ultra64
AlwaysRestart=true
OutputDir=.
[Icons]
Name: {group}\My Application; Filename: MyApp; WorkingDir: {app}
[ Code]
var
C: integer;
btnImgFile: AnsiString;
CheckAccept: array of TNewCheckListBox;
procedure NoIcons(Sender: TObject);
begin
WizardForm.NoIconsCheck.Checked:= CheckAccept[3].Checked[0];
case WizardForm.GroupEdit.Enabled of
True: begin
WizardForm.GroupEdit.Color := clNavy;
end;
False: begin
WizardForm.GroupEdit.Color := clSilver;
end;
end;
end;
procedure InitializeImage;
begin
ExtractTemporaryFile('{#SetupSetting("WizardSmallImageFile")}');
btnImgFile := ExpandConstant('{tmp}\{#SetupSetting("WizardSmallImageFile")}');
SetArrayLength(CheckAccept, 4);
for C:=0 to getArrayLength(CheckAccept)-1 do begin
CheckAccept[C] := TNewCheckListBox.Create(WizardForm);
CheckAccept[C].BorderStyle := bsNone;
CheckAccept[C].WantTabs := True;
end;
CheckAccept[3].Parent := WizardForm.NoIconsCheck.Parent;
with WizardForm.NoIconsCheck do begin
CheckAccept[3].SetBounds(WizardForm.NoIconsCheck.Left,WizardForm.NoIconsCheck.Top,WizardForm.NoIconsCheck.Width,Wi zardForm.NoIconsCheck.Height)
CheckAccept[3].AddCheckBoxEx(WizardForm.NoIconsCheck.Caption,'',0, False, True, True, True, nil, True);
CheckAccept[3].OnClickCheck:=@NoIcons;
Hide; end;
CheckAccept[3].LoadBtnBmpFromFile(btnImgFile);
end;
procedure InitializeWizard();
begin
InitializeImage;//эту строчку вписывать строго в самом низу процедуры
end;
[Files]
Source: FilesBmp\DirBitmap.bmp; Flags: dontcopy
Source: FilesBmp\GroupBitmap.bmp; Flags: dontcopy
Source: btnimage.bmp; Flags: dontcopy
Source: WizModernImage-IS.bmp; Flags: dontcopyВроде работает, но может его можно попроще сделать?
P.S. Код выдран из скрипта "inserimag4" авторы: Gnom3 (aka Gnom, Лександер),Shegorat,Krinkels
Kashtan007
04-09-2014, 23:40
kotyarko@fb, можно ли сделать чекбоксы не круглые, а квадратные, чтобы можно было сразу выбрать оба варианта?
kotyarko@fb
04-09-2014, 23:53
можно ли сделать чекбоксы не круглые, а квадратные, чтобы можно было сразу выбрать оба варианта? »
Можно. Надо их объявить не TNewRadioButton, а TNewCheckBox. При этом, скорее всего, нужно будет переделать логику их работы (ведь в данный момент они адаптированы под работу по отдельности, и их связывание, которое вы хотите сделать, может нарушить весь процесс: например, удалится и не забекапится или наоборот).
Вроде работает, но может его можно попроще сделать? »
Можно сократить буквально несколько строк, но смысла не вижу.
P.s. если вас интересует чистота в скрипте (не хотите забивать массивными кодами), то можете поместить секции [Files], [Code] из примера, написанного вами, в отдельный скрипт. И подключить его в основной через #include "Имя_скрипта.iss". И объединить процедуры InitializeWizard.
acer0072
05-09-2014, 09:21
Dodakaedr, спасибо. Помогло.
Использую функцию описание компонентов и картинки как можно вернуть на старую функцию чисто на картинки вот скрипт :http://rghost.ru/57859418
Nightwishh
05-09-2014, 15:10
Можно сократить буквально несколько строк, но смысла не вижу. »
Спасибо, теперь я в нём уверен!!!
El Sanchez
05-09-2014, 15:21
DfSdkS - я так понимаю что это ключ »
Dodakaedr, это имя службы.
Defragmentation-Service - имя »
Dodakaedr, это отображаемое/выводимое имя.
AfterInstall: "DoServiceInstall('{app}\DfSdkS.exe', 'DfSdkS', 'Defragmentation-Service', 'Defrag Service - powered by mst software')"; »
Dodakaedr, файл DfSdkS.exe имеет 2 параметра командной строки для (де)регистрации себя любимого в реестре: -install и -uninstall. Последний параметр явно фигурирует в оригинальном скрипте.
Dodakaedr
05-09-2014, 16:39
файл DfSdkS.exe имеет 2 параметра командной строки для (де)регистрации себя любимого в реестре: -install и -uninstall. Последний параметр явно фигурирует в оригинальном скрипте. »
Абсолютно верно! Я уже разобрался. Но зачем они тогда так мудруют если можно через секцию [Run] это сделать?!
Теперь понял почему: через секцию [Run] служба не устанавливается. Просто ключа "-install" не достаточно
Мне может кто нибудь код изменить который кинул выше
El Sanchez
05-09-2014, 19:20
через секцию [Run] служба не устанавливается. Просто ключа "-install" не достаточно »
Dodakaedr, почему? Мне хватило. В оснастке служба видна, запустить/остановить позволяет.
Мне может кто нибудь код изменить который кинул выше »
DimanTV, найдите и закомментируйте строки с CompDescText.
Dodakaedr
05-09-2014, 19:26
почему? Мне хватило. В оснастке служба видна, запустить/остановить позволяет. »
Как-то не понятно все работает. По экспериментировал:
1) Через секцию [Run] служба не устанавливалась;
2) Сделал через cmd все работает;
kotyarko@fb
05-09-2014, 19:41
Ни у кого ответа нет? (http://forum.oszone.net/post-2397897-1459.html)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC