Войти

Показать полную графическую версию : Скрипты 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

MrLOLs
13-07-2011, 20:19
Помогите оптимизировать код

Function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;
function NextButtonClick(CurPageID: Integer): Boolean;
var i: Integer;
Begin
Result:=True;
if CurPageID = wpSelectDir then
begin
for i:= 1 to Length(WizardForm.DirEdit.Text) do
if WizardForm.DirEdit.Text[i] > #122 then
begin
MsgBox(cm('Cyrillic'), mbError, mb_Ok);
Result:=False;
Exit;
end;
if (Pos(Uppercase(ExpandConstant('{pf}')), Uppercase(ExpandConstant('{app}'))) > 0)
or (Pos(Uppercase(ExpandConstant('{win}')), Uppercase(ExpandConstant('{app}'))) > 0) then
begin
MsgBox(cm('SysDirSelect'), mbError, mb_Ok);
Result:=False;
Exit;
end;
end;
End;

Можно объединить begin MsgBox ...... end
а также условия Pos(Uppercase(ExpandConstant('{...}'))

Gnom_aka_Lexander
13-07-2011, 21:26
Можно объединить begin MsgBox ...... end
а также условия Pos(Uppercase(ExpandConstant('{...}')) »Можно, у меня както так вышло:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
Function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

function NextButtonClick(CurPageID: Integer): Boolean;
var i: Integer; S:String; One,Two: Boolean;

Begin Result:=True; if CurPageID = wpSelectDir then begin

for i:= 1 to Length(WizardForm.DirEdit.Text) do if (WizardForm.DirEdit.Text[i] > #122)
then begin One:=True;S:='Cyrillic'; end;

if (Pos(Uppercase(ExpandConstant('{pf}')), Uppercase(ExpandConstant('{app}'))) > 0) then Two:=True;
if (Pos(Uppercase(ExpandConstant('{win}')),Uppercase(ExpandConstant('{app}'))) > 0) then Two:=True;

if Two then S:='SysDirSelect'; if One or Two then begin
MsgBox(S, mbError, mb_Ok); Result:=False; Exit;end; end; End;

MrLOLs
13-07-2011, 22:25
Лександер, Спасибо!

Код запрещает устанавливать программу в папку Windows или Program Files, а также запрещает использовать кириллицу в пути установки.

Serega
13-07-2011, 22:40
Вот конечный вариант »
Для чего вы используете Function cm(Message: String): String;, на мой взгляд бесполезная функция. Так же в цикле for...to...do не хватает Break;, т.е. для чего перебирать дальше, если мы уже нашли...
Как говорят, оптимизации кода нет предела, но всё же я бы записал так:


function NextButtonClick(CurPageID: Integer): Boolean;
var
i: Integer;
path: string;
begin
if CurPageID = wpSelectDir then
begin
path := Uppercase(WizardForm.DirEdit.Text);
if (Pos(Uppercase(ExpandConstant('{pf}')), path) > 0)
or (Pos(Uppercase(ExpandConstant('{win}')), path) > 0) then
begin
MsgBox(ExpandConstant('{cm:SysDirSelect}'), mbError, MB_OK);
Exit;
end;
for i := 1 to Length(path) do
if path[i] > #122 then
begin
MsgBox(ExpandConstant('{cm:Cyrillic}'), mbError, MB_OK);
Exit;
end;
end;
Result := True;
end;

MrLOLs
13-07-2011, 23:32
Соединил два предложенные варианта:

Function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;
function NextButtonClick(CurPageID: Integer): Boolean;
var
i: integer;
path,s: string;
One,Two: boolean;
Begin
Result:=True;
if CurPageID = wpSelectDir then
begin
path:= Uppercase(WizardForm.DirEdit.Text);

for i := 1 to Length(path) do if path[i] > #122 then
begin One:=True;S:=cm('Cyrillic'); end;

if (Pos(Uppercase(ExpandConstant('{pf}')), path) > 0) or (Pos(Uppercase(ExpandConstant('{win}')), path) > 0) then
begin Two:=True;S:=cm('SysDirSelect'); end;

if One or Two then
begin
MsgBox(S, mbError, mb_Ok); Result:=False; Exit;
end;

end;
End;

Если не подключать ф-ю Function cm в этом варианте, то CustomMessages не сработает

ILIA_1992
14-07-2011, 01:05
помогите разобраться с прогой regshot
Дело в том,что мне нужен реестр игры властелин колец,хоть и игра запускается с русским текстом и звуком во время игры но во время показа роликов звука нет.
Поэтому нужен реестр
Помогите

Rikill
14-07-2011, 01:23
Neutron, изменить сетапник нереально (разве что иконку), так что смысла в проверке сумм нету.

R.i.m.s.k.y.
14-07-2011, 08:01
Дело в том,что мне нужен реестр игры властелин колец,хоть и игра запускается с русским текстом и звуком во время игры но во время показа роликов звука нет.
Поэтому нужен реестр »
вывод в стиле "таракан без ног не слышит" :)
звуковые файлы могут распаковываться не только в {app}, но и в {appdata}, моидокументы

ILIA_1992
14-07-2011, 14:56
может нужно было поставить [ht=http://img.ii4.ru/images/2011/07/14/127569_Bezemyanney.jpg[/ht] галочку возле rus

У меня после добавления реестра игра стала на аглийском и звук в роликах появился но на английском.ВЧём может быть проблема???

ILIA_1992
14-07-2011, 20:38
Neutron, я немного не понял,в моих документах ничего кроме сохранённого профиля и конфигурации грфики нет

MrLOLs
14-07-2011, 22:13
Помогите, как я могу выдать сообщение только пользователям Windows 7, с помощью http://wiki.delphi-jedi.org/wiki/JCL_Help:IsWin7 или http://wiki.delphi-jedi.org/wiki/JCL_Help:TWindowsVersion
Только без помощи Major, Minor.

Habetdin
14-07-2011, 23:01
MrLOLs, пример:

procedure CurPageChanged(CurPageID: Integer);
var
Version: TWindowsVersion;
begin
if CurPageID = wpWelcome then
begin
GetWindowsVersionEx(Version);
if (Version.Major = 6) and (Version.Minor = 1) then
begin
MsgBox('Привет, пользователь Windows 7 / Windows Server 2008 R2!', mbInformation, mb_Ok);
end;
end;
end;

tiestos
14-07-2011, 23:49
как сюда перенести чекбоксы с vscredit и directX
http://i25.fastpic.ru/big/2011/0714/cc/49fa5afe9141c7c48899850fe8569fcc.jpg

MrLOLs
15-07-2011, 00:00
tiestos, как на счет использования этого перевода украинского языка http://www.jrsoftware.org/files/istrans/Ukrainian-7/Ukrainian-7-5.1.11.isl (кандидата в официальный перевод), на который я потратил кучу времени.

tiestos
15-07-2011, 00:25
спасибо, я сам перевёл, меня устраивает)

murlakatamenka
15-07-2011, 01:08
tiestos, так можно
[Tasks]
Name: additional; Description: "Дополнительнео ПО";
Name: additional\dx; Description: "Обновить DirectX"; Flags: unchecked
Name: additional\vcr; Description: "Обновить библиотеки Visual C++"; Flags: unchecked;

[Run]
Filename: {src}\Redist\DirectX\dxsetup.exe; Tasks: additional\dx; StatusMsg: Обновление DirectX ...; Parameters: /silent;
Filename: {src}\Redist\vcredist_x86.exe; Tasks: additional\vcr; StatusMsg: Обновление библиотек Visual C++ ...; Parameters: /q;

ILIA_1992
18-07-2011, 13:32
у меня вопрос.Возможно ли сделать так,чтобы инсталлятор брал иконку с авторуна ,чтобы потом иконка создалать там куда прописана иконка
и как в setup.exe можно изменить версию файла первоначальная стоит 0.0.0.0

valyok666
18-07-2011, 16:17
ILIA_1992,
AppVersion=2.9b\\\пример
SetupIconFile=Setup.ico

tiestos
18-07-2011, 23:57
Какие есть еще методы сжатия кроме 7Zip-Srep-Precomp-Arc?

Rikill
19-07-2011, 00:26
tiestos, тут не принято это обсуждать и считается офтопиком, т.к. не касается инно, я не нашёл такой темы на осзоне, но возможно вам помогут тут (http://forum.ru-board.com/topic.cgi?forum=5&topic=32025) и тут (http://forum.ru-board.com/topic.cgi?forum=5&topic=30239&start=0)




© OSzone.net 2001-2012