Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
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 там же написано английский а ты туда русский паяешь
Доброго времени суток!
Та же проблема с ethernet adapter, но с новой интерпретацией. Мне надо вытащить список адаптеров, но с использованием winpcap.
Проблема в том, что мне необходим порядок и название, в котором их выводит wpcap.
Сам я не силен в delphi/pascal, а посему мне не хватает мозгов переварить мануалы для написания проги. Не могу догнаться как инициализировать *.h для использования структур библиотеки. Примеры с использованием функций сторонных библиотек нашел, но как юзать структуры, которые есть в библиотеке не могу понять.
Прошу помощи гуру в реализации примерчика.
Ссылка на исходники и доки winpcap:
http://www.winpcap.org/docs/default.htm
Приветствую! Помогите пожалуйста!
Есть игра, запакованная в программу установки. Необходимо, чтобы перед последним окном (в котором есть единственная кнопка - "Завершить", и в которое через секцию [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) область чтобы осталось только закрыть и свернуть?
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
Какая то фигня с исоде не распаковывает архивы хоть они указаны если что скрипт только в ЛС
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 } овечают за понятное, думаю, действие :)
Лександер,
получается такое:
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 ?
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC