PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 [63] 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

El Sanchez
05-04-2011, 21:09
Как сделать чтобы инсталлятор примерно на этапе после нажатия на Установить и до распаковки файлов чтобы он переименовал папку '{userdocs}\EA Games\The Sims 2' в '{userdocs}\EA Games\The Sims 2_old' если она есть? »
gigabyte502, к первому устанавливаемому файлу добавляете параметр BeforeInstall:

[Files]
Source: file1.exe; DestDir: {app}; BeforeInstall: RenameFolder
...
Source: fileN.exe; DestDir: {app}

[Code]
procedure RenameFolder;
begin
RenameFile(ExpandConstant('{userdocs}\EA Games\The Sims 2'), ExpandConstant('{userdocs}\EA Games\The Sims 2_old'));
end;

Vamp1re
05-04-2011, 21:15
Лександер, я читал там есть прогресс бар но он мне почемуто ненравиться! особенно етот круг под линией прогресса

insombia
05-04-2011, 21:19
Как сделать чтобы установка ушла в левый угол экрана я просто не могу найти,и как сделать чтобы после установки устанавлевался директ и такое разное у меня что-то не получается

Gnom_aka_Lexander
05-04-2011, 22:23
Как сделать чтобы установка ушла в левый угол экрана »
Прогрессбар в маленьком окне В левом нижнем углу (http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=2419&limit=1&m=1#1)

EvilAlex
06-04-2011, 07:30
Доброго времени суток форумчане !

Вы кнопки для инсталов сами делаете или же есть какая-то прога ?

Зарание спасибо за ответ ...

Krinkels
06-04-2011, 13:56
EvilAlex
Смотря какие кнопки ты имеешь ввиду. Если текстуры для кнопок то лучше рисовать самому, а если чисто кнопки то тут 2 варианта:
1. Руками
2. Воспользоваться компилятором от китайцев и там использовать редактор. Но опять же придется поработать ручками
:)

EvilAlex
06-04-2011, 16:45
Krinkels, понятно, спосиб .

Gnom_aka_Lexander
06-04-2011, 21:13
Подскажите пожалуйста, есть-ли команда, которая полностью отменить все изменнения, которые внесла процедура? например, процедура создает огромнейшую кучу лейбелов, чекбоксов, эдитов, а по нажатию кнопки все это убирается. на данный момент у меня для этого служит еще одна процедура, которая скрывает элементы, созданные предидущей процедурой. Вопрос - нельзя-ли это както оптимизировать?

Serega
06-04-2011, 22:19
какой командой завершить созданную процедуру? »
end;

P.S.
Какой вопрос - такой ответ... :)

Serega
07-04-2011, 13:08
Лександер, конечно для каждого случая нужно смотреть, но вот накидал, как пример:


[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
var
pnl: TPanel;

procedure CreateControl(const ParentControl: TWinControl);
// создаём все контролы
var
i, lLeft, cLeft, aTop: Integer;
begin
aTop := ScaleY(10);
for i := 0 to 14 do
begin
with TLabel.Create(ParentControl) do
begin
Parent := ParentControl;
AutoSize := True;
Left := ScaleX(50);
Top := aTop;
Caption := 'TLabel № ' + IntToStr(i+1);
end;
with TCheckBox.Create(ParentControl) do
begin
Parent := ParentControl;
SetBounds(ScaleX(200), aTop, ScaleX(100), ScaleY(14));
Caption := 'TCheckBox № ' + IntToStr(i+1);
end;
with TEdit.Create(ParentControl) do
begin
Parent := ParentControl;
SetBounds(ScaleX(350), aTop, ScaleX(100), ScaleY(20));
Text := 'TEdit № ' + IntToStr(i+1);
end;
aTop := aTop + ScaleY(21);
end;
end;

function DetectControl(const ParentControl: TWinControl): Boolean;
// проверяем наличие контролов
var
i: Integer;
begin
Result := False;
for i := 0 to ParentControl.ControlCount-1 do
if (ParentControl.Controls[i] is TLabel) or // проверяем, что контрол TLabel
(ParentControl.Controls[i] is TCheckBox) or // проверяем, что контрол TCheckBox
(ParentControl.Controls[i] is TEdit) then // проверяем, что контрол TEdit
begin
Result := True;
Break;
end;
end;

procedure ClearAllControl(const ParentControl: TWinControl);
// уничтожаем все контролы
var
i: Integer;
begin
{ откровенно говоря с repeat..until ерись полнейшая... }
repeat
for i := 0 to ParentControl.ControlCount-1 do
if (ParentControl.Controls[i] is TLabel) or // проверяем, что контрол TLabel
(ParentControl.Controls[i] is TCheckBox) or // проверяем, что контрол TCheckBox
(ParentControl.Controls[i] is TEdit) then // проверяем, что контрол TEdit
{ видимо какой-то глюк, но такое ощущение, что в этой процедуре не происходит задержки и
цикл продолжается не дождавшись выполнения, в связи с чем некоторые контролы остаются }
ParentControl.Controls[i].Free;
until not DetectControl(ParentControl); // чтоб не зависнуть в цикле пришлось сделать доп. проверку
end;

procedure ButtonClick(Sender: TObject);
begin
case TButton(Sender).Tag of
0: CreateControl(pnl);
1: ClearAllControl(pnl);
end;
end;

procedure InitializeWizard();
var
i, aLeft: Integer;
begin
pnl := TPanel.Create(WizardForm);
with pnl do
begin
Parent := WizardForm;
Left := 0;
Top := 0;
Align := alClient;
end;

aLeft := ScaleX(100);
for i := 0 to 1 do
begin
with TButton.Create(WizardForm) do
begin
Parent := pnl;
SetBounds(aLeft, WizardForm.CancelButton.Top, ScaleX(150), ScaleY(23));
case i of
0: Caption := 'Создать все контролы';
1: Caption := 'Разрушить все контролы';
end;
OnClick := @ButtonClick;
Tag := i;
aLeft := aLeft + ScaleX(160);
end;
end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm := False;
end;

EvilAlex
07-04-2011, 13:59
Доброго времени суток !

Как зделать 3 разных кнопки в инстоляторе (Назад, Далее , Установить/Отмена/Завершить/выбор папок) ?

сами кнопки есть: http://rghost.ru/5110713 ...

вот если что скрипт: http://rghost.ru/5110569

вот что выдает инстал при запуске:
http://www.pictureshack.ru/images/371dsfsd.JPG

испробовал все что пришло на ум, помогите пожалуйсто .

если что: http://rghost.ru/5110611

Зарание благодарю .

P.S. Кнопки есть но они не подогнаны пока под инстал =)

Gnom_aka_Lexander
07-04-2011, 14:29
Serega, спасибо, видимо, как сейчас есть - проще не придумаеш, так что не буду и голову ломать, просто хочется избавиться от километров кода :)
EvilAlex, такая ошибка говорит о том, что есть обращение к файлу, а сам файл отсутствует(буквалный перевод - деление на ноль:)) сейчас посмотрю твой скрипт.
Позже:
У тебя ошибку выбивает модуль фриарк. видимо гдето здорово попортил процедуры обращения к нему, либо удалил какой-нибудь нужный для модуля файл. если есть не испорченый скрипт - дай мне его, встрою тебе разные кнопки.

EvilAlex
07-04-2011, 14:37
Лександер, скорее всего удолил, там 3 кнопки и я заменял в некоторых местах названия, может где-то что-то не то сделал ...

Edison007
07-04-2011, 16:07
Парни у кого-нибудь есть код на реализацию токого: http://i2.pixs.ru/storage/3/2/7/Bezimyanni_2836350_1987327.jpg

EvilAlex
07-04-2011, 17:00
Edison007,

Для такова нет Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
Apache Server at i2.pixs.ru Port 80

Edison007
07-04-2011, 17:10
EvilAlex
http://s51.radikal.ru/i132/1104/0f/4faebeaff7dd.jpg

ChVL
07-04-2011, 19:27
В секции [Setuр] есть строка:
AlwaysRestart=yes
Как прописать, чтобы она действовала только на Win 7? Т.е. чтобы окно с предложением перезагрузки появлялось на Win 7, а на ХР его не было?

R.i.m.s.k.y.
07-04-2011, 19:53
попробуй в коде NeedRestart := True

var Version: TWindowsVersion;
....
GetWindowsVersionEx (Version);
if ( (Version.Major = 6) and (Version.Minor >= 1) ) then begin
...
NeedRestart := True
...
end;

Не проверял - не обещаю что сработает.

Gnom_aka_Lexander
07-04-2011, 19:59
ChVL, У меня вот так прокатило:
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[_code]
var Version: TWindowsVersion;
function NeedRestart(): Boolean;
begin
GetWindowsVersionEx (Version);
if ( (Version.Major = 6) and (Version.Minor >= 1) ) then begin
Result := True;
end;
end;

LordSP
07-04-2011, 21:34
Ребят,есть такие вопросы:

1. Можно ли как-нибудь поменять расширение файла при разделении на тома?,к примеру: (не Setup-1.bin,а задать свое Data000.idd,как в Smart Install Maker,при этом сжатие тоже остается)




© OSzone.net 2001-2012