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

leha---83
21-09-2011, 21:11
Вот и тоже видал где то но .....

Gnom_aka_Lexander
21-09-2011, 21:44
Есть вопрос. можно ли сделать так что бы в конце установки сделать поля: »
Как-то так:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
var
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
NewEdit1: TNewEdit;
NewEdit2: TNewEdit;
Lang: TNewComboBox;

procedure InitializeWizard();
begin
{ Label1 }
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Name := 'Label1';
Parent := WizardForm.FinishedPage;
Caption := 'Введите ваш никнейм:';
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(136);
Width := ScaleX(115);
Height := ScaleY(13);
end;

{ Label2 }
Label2 := TLabel.Create(WizardForm);
with Label2 do
begin
Name := 'Label2';
Parent := WizardForm.FinishedPage;
Caption := 'Введите ваш клан-тег:';
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(192);
Width := ScaleX(118);
Height := ScaleY(13);
end;

{ Label3 }
Label3 := TLabel.Create(WizardForm);
with Label3 do
begin
Name := 'Label3';
Parent := WizardForm.FinishedPage;
Caption := 'Выбрите язык клиента:';
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(240);
Width := ScaleX(121);
Height := ScaleY(13);
end;

{ NewEdit1 }
NewEdit1 := TNewEdit.Create(WizardForm);
with NewEdit1 do
begin
Name := 'NewEdit1';
Parent := WizardForm.FinishedPage;
Left := ScaleX(24);
Top := ScaleY(152);
Width := ScaleX(121);
Height := ScaleY(21);
end;

{ NewEdit2 }
NewEdit2 := TNewEdit.Create(WizardForm);
with NewEdit2 do
begin
Name := 'NewEdit2';
Parent := WizardForm.FinishedPage;
Left := ScaleX(24);
Top := ScaleY(208);
Width := ScaleX(121);
Height := ScaleY(21);
end;

{ Lang }
Lang := TNewComboBox.Create(WizardForm);
with Lang do
begin
Name := 'Lang';
Parent := WizardForm.FinishedPage;
Left := ScaleX(24);
Top := ScaleY(256);
Width := ScaleX(121);
Height := ScaleY(21);
DropDownCount := 2;
MaxLength := 2;
ParentColor := True;
Text := 'Русский';
Items.Text := 'Русский' + #13#10 +
'Английский';
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
s1,s2:String;
begin
If CurPageID=wpFinished Then
Begin
If Lang.Text = 'Русский' Then s1:=Russian else s1:=English;
SetIniString('Emulator', 'Language', s1, ExpandConstant('{app}\rev.ini'));
SetIniString('steamclient', 'PlayerName', s2, ExpandConstant('{app}\rev.ini'));
end;
Result:True;
end;
Времени нет на проверить-отладить да покорасивше сделать, но думаю, смысл понятен :)

leha---83
21-09-2011, 22:06
Лександер, Извени я новичек ругается на s1,s2:String;

insombia
21-09-2011, 22:07
leha---83 а что именно пишет?может просто это уже есть в скрипте

No4noylis
21-09-2011, 22:13
leha---83, напиши var над ними.

leha---83
21-09-2011, 22:14
http://s013.radikal.ru/i322/1109/dd/bb90aa9deb30t.jpg (http://radikal.ru/F/s013.radikal.ru/i322/1109/dd/bb90aa9deb30.png.html)

leha---83
21-09-2011, 22:17
Написал var результат

http://s47.radikal.ru/i116/1109/79/c18000fa6b18t.jpg (http://radikal.ru/F/s47.radikal.ru/i116/1109/79/c18000fa6b18.png.html)

insombia
21-09-2011, 22:39
leha---83 там же написано английский а ты туда русский паяешь

Gugle
22-09-2011, 13:12
Доброго времени суток!

Та же проблема с ethernet adapter, но с новой интерпретацией. Мне надо вытащить список адаптеров, но с использованием winpcap.
Проблема в том, что мне необходим порядок и название, в котором их выводит wpcap.

Сам я не силен в delphi/pascal, а посему мне не хватает мозгов переварить мануалы для написания проги. Не могу догнаться как инициализировать *.h для использования структур библиотеки. Примеры с использованием функций сторонных библиотек нашел, но как юзать структуры, которые есть в библиотеке не могу понять.
Прошу помощи гуру в реализации примерчика.

Ссылка на исходники и доки winpcap:
http://www.winpcap.org/docs/default.htm

Qu@dr0
22-09-2011, 16:06
Приветствую! Помогите пожалуйста!

Есть игра, запакованная в программу установки. Необходимо, чтобы перед последним окном (в котором есть единственная кнопка - "Завершить", и в которое через секцию [Run] можно вписать пункт запуска программы) в окне инсталлятора (не в отдельном окне!) появлялась форма ввода имени с надписью "Введите желаемое имя", и чтобы кнопка "Далее" не была доступна, пока не будет введёт хотя бы один символ, а введенное имя вписывалось в файл .ini секции [steamclient], параметр PlayerName=, т.е. введёшь в форму слово "Призрак" - и в файле .ini вписалось PlayerName=Призрак.

На прошлых страницах выкладывался скрипт, в котором я чуть подредактировал сообщения и файл, в который имя должно быть записано, однако он не подходит потому, что окно появляется уже после последнего окна установщика (о котором я писал в прошлом абзаце), а нужно, чтобы оно появлялось перед ним, и чтобы его размеры и оформление было такое же, как и у остальных окон установщика.
Кусок скрипта, секция [Code]: [Code]
var
Form: TSetupForm;

procedure ButtonClick(Sender: TObject);
begin
Form.Close;
end;

function GetNickName: string;
var
edt: TEdit;
begin
try
Form := CreateCustomForm;
with Form do
begin
ClientWidth := ScaleX(200);
ClientHeight := ScaleY(100);
Center;
Caption := 'Выбор имени игрока';
end;
with TLabel.Create(Form) do
begin
Parent := Form;
AutoSize := True;
Left := ScaleX(12);
Top := ScaleY(12);
Font.Size := 9;
Caption := 'Введите желаемое имя:';
end;
edt := TEdit.Create(Form);
with edt do
begin
Parent := Form;
SetBounds(ScaleX(10), ScaleY(35), Form.ClientWidth - ScaleX(20), ScaleY(17));
end;
with TButton.Create(Form) do
begin
Parent := Form;
SetBounds((Form.Width - Width) div 2, ScaleY(65), ScaleX(75), ScaleY(23));
Caption := 'OK';
OnClick := @ButtonClick;
end;
Form.ShowModal;
finally
Result := edt.Text;
Form.Free;
Form := nil;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
SetIniString('steamclient', 'PlayerName', GetNickName, ExpandConstant('{app}\rev.ini'))
end;

Также, если это возможно, то пусть под формой ввода имени будет пункт "Сохранить в UTF-8", на котором можно было бы поставить галочку, и если он выбран, то пусть введённое имя сохраняется в файл INI в кодировке UTF-8, не меняя при этом общую кодировку файла (ANSI).

Буду признателен за помощь!

insombia
22-09-2011, 17:22
как убрать выделенную (http://i32.fastpic.ru/big/2011/0922/7f/09b500f043008474a415065a4010227f.jpg) область чтобы осталось только закрыть и свернуть?

VinTagE
22-09-2011, 18:11
insombia, так
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[code]
const
GWL_STYLE = -16;

WS_MINIMIZEBOX = $20000;
WS_MAXIMIZEBOX = $10000;

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';

procedure initializeWizard();
begin
SetWindowLong(WizardForm.handle, GWL_STYLE, GetWindowLong(WizardForm.handle, GWL_STYLE)and(not WS_MINIMIZEBOX)and(not WS_MAXIMIZEBOX));
end;

insombia
22-09-2011, 18:32
Qu@dr0
[Icons]
Name: "{group}\delphi"; Filename: "{app}\DeadIslandGame.exe"; WorkingDir: "{app}";

[Run]
Description: "{cm:LaunchProgram, delphi}"; Filename: "{app}\DeadIslandGame.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent unchecked насчет ввода ника учись пользоваться поисковиком вчера был вопрос и на него был ответ так что ищи

insombia
22-09-2011, 19:00
Какая то фигня с исоде не распаковывает архивы хоть они указаны если что скрипт только в ЛС

Qu@dr0
22-09-2011, 19:35
insombia,
Compile Error!
Line: 140
Error: Column 35:
Unknown identifier 'Russian'
Чё вместо 'Russian' вписать? 0_о

А вообще, мне не нужны ни клан тег, ни выбор языка, как их выкорчевать из скрипта? Нужно только окно с формой ввода, введённые данные прописываются в файл .ini, потом идёт последнее окно с кнопкой "Завершить" и пунктом из секции [Run] и всё. Help.

Gnom_aka_Lexander
22-09-2011, 19:52
Qu@dr0, Вот так все работает, проверил. Лучше, если ини-файл будет в папке, где ему положено быть. В выделенной строке нужно указать путь к нему. оставил никэдит и выбор яззыка. Там был косячек, исправил.

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
var
{ NicEdit } Label1: TLabel; { NicEdit }
{ Lang } Label2: TLabel;{ Lang }
{ NicEdit } NicEdit: TNewEdit; { NicEdit }
{ Lang } Lang: TNewComboBox; { Lang }

procedure InitializeWizard();
begin
{ NicEdit }
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Parent := WizardForm.FinishedPage;
Caption := 'Введите ваш никнейм:';
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(192);
Width := ScaleX(118);
Height := ScaleY(13);
end;
{ NicEdit }

{ Lang }
Label2 := TLabel.Create(WizardForm);
with Label3 do
begin
Parent := WizardForm.FinishedPage;
Caption := 'Выбрите язык клиента:';
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(240);
Width := ScaleX(121);
Height := ScaleY(13);
end;
{ Lang }

{ NicEdit }
NicEdit := TNewEdit.Create(WizardForm);
with NicEdit do
begin
Parent := WizardForm.FinishedPage;
Left := ScaleX(24);
Top := ScaleY(208);
Width := ScaleX(121);
Height := ScaleY(21);
end;
{ NicEdit }

{ Lang }
Lang := TNewComboBox.Create(WizardForm);
with Lang do
begin
Parent := WizardForm.FinishedPage;
Left := ScaleX(24);
Top := ScaleY(256);
Width := ScaleX(121);
Height := ScaleY(21);
DropDownCount := 2;
MaxLength := 2;
ParentColor := True;
Text := 'Русский';
Items.Text := 'Русский' + #13#10 +
'Английский';
end;
{ Lang }
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var s1,s2:String;
begin
If CurPageID=wpFinished Then
Begin

{ Lang } If Lang.Text = 'Русский' Then s1:='Russian' else s1:='English'; { Lang }

{ NicEdit } s2:=NicEdit.Text; { NicEdit }
{ Lang } SetIniString('Emulator', 'Language', s1, ExpandConstant('{app}\rev.ini'));{ Lang }
{ NicEdit } SetIniString('steamclient', 'PlayerName', s2, ExpandConstant('{app}\rev.ini')); { NicEdit }
end;
Result:=True;
end; куски заключенные между { NicEdit } и { Lang } овечают за понятное, думаю, действие :)

Qu@dr0
22-09-2011, 21:54
Лександер,
получается такое:
http://s57.radikal.ru/i155/1109/fb/7224f7045823t.jpg (http://radikal.ru/F/s57.radikal.ru/i155/1109/fb/7224f7045823.jpg.html)
Зная наших пользователей, 90% просто не заметят форму ввода ника.

Как сделать, чтобы перед окном "Завершение мастера установки" появилось такое окно:
http://s16.radikal.ru/i191/1109/c8/7d59494f2681t.jpg (http://radikal.ru/F/s16.radikal.ru/i191/1109/c8/7d59494f2681.jpg.html)
Это намного удобнее, и пользователь точно не пропустит его.
Желательно, чтобы кнопка "Далее" была недоступна, пока в форму не введен хотя бы один символ (или чтобы при нажатии "Далее" появлялось окно "Введите имя игрока"), и чтобы текст над и под формой ввода выравнивался по ширине.
Это было бы идеально.

А окно выбора языка мне не нужно, т.к. моя аудитория - только русскоговорящие пользователи.

Буду благодарен за помощь.

murlakatamenka
23-09-2011, 00:03
такой вопрос.
DisableAppendDir кануло в лету, чем его заменили ?
как сделать так, чтобы в конец пути установки не добавлялось DefaultDirName ?

nik1967
23-09-2011, 00:44
murlakatamenka, AppendDefaultDirName=false

El Sanchez
23-09-2011, 08:33
Qu@dr0,

[Code]
const
CP_ACP = 0;
CP_UTF8 = 65001;

var
RevEmuPage: TInputQueryWizardPage;
ConvertCheckBox: TCheckBox;

function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: PAnsiChar; cbMultiByte: Integer; lpWideCharStr: PAnsiChar; cchWideChar: Integer): Longint;
external 'MultiByteToWideChar@kernel32.dll stdcall';
function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: PAnsiChar; cchWideChar: Integer; lpMultiByteStr: PAnsiChar; cbMultiByte, lpDefaultChar, lpUsedDefaultChar: Integer): Longint;
external 'WideCharToMultiByte@kernel32.dll stdcall';

function StringToWideString(const aStr: String; codePage: Word): String;
var
len: Integer;
begin
len := MultiByteToWideChar(codePage, 0, aStr, -1, '', 0);
if len > 0 then
begin
SetLength(Result, (len*2)-2);
MultiByteToWideChar(codePage, 0, aStr, -1, Result, Length(Result));
end;
end;

function WideStringToString(const wStr: String; codePage: Word): String;
var
len: Integer;
begin
len := WideCharToMultiByte(codePage, 0, wStr, -1, '', 0, 0, 0);
if len > 0 then
begin
SetLength(Result, len-1);
WideCharToMultiByte(codePage, 0, wStr, -1, Result, Length(Result), 0, 0);
end;
end;

function SetNickname(Nickname: String; IsConvert: Boolean): String;
begin
Result := Nickname;
if IsConvert then Result := WideStringToString(StringToWideString(Result, CP_ACP), CP_UTF8);
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 SetIniString('steamclient', 'PlayerName', SetNickname(RevEmuPage.Values[0], ConvertCheckBox.Checked), ExpandConstant('{app}\rev.ini'));
end;




© OSzone.net 2001-2012