Войти

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


Страниц : 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

Неадекватный
11-06-2012, 15:03
Привет всем!
Примеры смотрел, но это не то. Всё очень сложно. Код реализации xml большой и не понятный.

В общем задача такая
Имеется NetworkCfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<AllNetworkConfigs>
<NetworkConfig isNDIS="0" canbeDelete="1" isPreferred="1">
<ConfigFileName></ConfigFileName>
<UserName></UserName>
<Password></Password>
<LoginNumber></LoginNumber>
<AutoGetAPN>0</AutoGetAPN>
<APN></APN>
<AutoGetDNS>1</AutoGetDNS>
<MainDNS>0.0.0.0</MainDNS>
<StandbyDNS>0.0.0.0</StandbyDNS>
<AutoGetPDP>1</AutoGetPDP>
<PDPAddress>0.0.0.0</PDPAddress>
<PDPType>IP</PDPType>
<AuthType>PAP</AuthType>
<AskUserAndPwd>0</AskUserAndPwd>
<SaveUserAndPwd>0</SaveUserAndPwd>
</NetworkConfig>
</AllNetworkConfigs>

Пояснения к xml
<?xml version="1.0" encoding="UTF-8"?> - Создаётся по умолчанию;
<AllNetworkConfigs> - Создаётся по умолчанию;
<NetworkConfig isNDIS="0" canbeDelete="1" isPreferred="1"> - Создаётся по умолчанию;
<ConfigFileName></ConfigFileName> - Создаётся по умолчанию, но между <ConfigFileName></ConfigFileName> должно вводиться Название профиля; Например <ConfigFileName>MTS Internet</ConfigFileName>
<UserName></UserName> - Создаётся по умолчанию, но между <UserName></UserName> должно вводиться Имя пользователя; Например <UserName>MTS</UserName>
<Password></Password> - Создаётся по умолчанию, но между <Password></Password> должен вводиться Пароль; Например <Password>mts</Password>
<LoginNumber></LoginNumber> - Создаётся по умолчанию, но между <LoginNumber></LoginNumber> должен вводиться номер дозвона; Например <LoginNumber>*99***1#</LoginNumber>
<AutoGetAPN>0</AutoGetAPN> - Создаётся по умолчанию;
<APN></APN> - Создаётся по умолчанию, но между <APN></APN> должна вводиться Точка доступа; Например <APN>internet.mts.ru</APN>
<AutoGetDNS>1</AutoGetDNS> - Создаётся по умолчанию;
<MainDNS>0.0.0.0</MainDNS> - Создаётся по умолчанию;
<StandbyDNS>0.0.0.0</StandbyDNS> - Создаётся по умолчанию;
<AutoGetPDP>1</AutoGetPDP> - Создаётся по умолчанию;
<PDPAddress>0.0.0.0</PDPAddress> - Создаётся по умолчанию;
<PDPType>IP</PDPType> - Создаётся по умолчанию;
<AuthType>PAP</AuthType> - Создаётся по умолчанию;
<AskUserAndPwd>0</AskUserAndPwd> - Создаётся по умолчанию;
<SaveUserAndPwd>0</SaveUserAndPwd> - Создаётся по умолчанию;
</NetworkConfig> - Создаётся по умолчанию;
</AllNetworkConfigs> - Создаётся по умолчанию;

Если быть точнее, этот NetworkCfg.xml должен создаваться в папке программы, т.е %ProgramFiles%\Моё Программное Обеспечение.
То что в коде "но между XXX должно вводиться Название XXX; Например XXX" это должно работать в инсталляторе "вводиться в окошках"

Вот код
[Setup]
AppName=Моё Программное Обеспечение
AppVersion=1.5
;AppVerName=Моё Программное Обеспечение 1.5
DefaultDirName={pf}\Моё Программное Обеспечение
DefaultGroupName=Моё Программное Обеспечение
OutputDir=.
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Icons]
Name: "{group}\{cm:UninstallProgram,Моё Программное Обеспечение}"; Filename: "{uninstallexe}"

[CustomMessages]
Russian.Caption=Настройка профиля по умолчанию
Russian.Description=Настройте профиль в соответствии с вашим оператором
Russian.SettingsProfile=Настройка профиля
Russian.Operator=Оператор:
Russian.UserName=Имя пользователя:
Russian.Password=Пароль:
Russian.NumberDial=Номер набора:
Russian.APN=Точка доступа:

[*Code]
var
ISCustomPage1: TWizardPage;
NewGroupBox1: TNewGroupBox;
NewStaticText1: TNewStaticText;
NewEdit1: TNewEdit;
NewStaticText2: TNewStaticText;
NewEdit2: TNewEdit;
NewStaticText3: TNewStaticText;
NewEdit3: TNewEdit;
NewStaticText4: TNewStaticText;
NewEdit4: TNewEdit;
NewStaticText5: TNewStaticText;
NewEdit5: TNewEdit;

procedure RedesignWizardForm;
begin
ISCustomPage1 := CreateCustomPage(wpSelectDir, CustomMessage('Caption'), CustomMessage('Description'));

with ISCustomPage1.Surface do
begin
Name := 'ISCustomPage1';
end;

NewGroupBox1 := TNewGroupBox.Create(WizardForm);
with NewGroupBox1 do
begin
Name := 'NewGroupBox1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(16);
Top := ScaleY(8);
Width := ScaleX(377);
Height := ScaleY(209);
Caption := CustomMessage('SettingsProfile');
end;

NewStaticText1 := TNewStaticText.Create(WizardForm);
with NewStaticText1 do
begin
Name := 'NewStaticText1';
Parent := NewGroupBox1;
Caption := CustomMessage('Operator');
Left := ScaleX(32);
Top := ScaleY(31);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit1 := TNewEdit.Create(WizardForm);
with NewEdit1 do
begin
Name := 'NewEdit1';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(28);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText2 := TNewStaticText.Create(WizardForm);
with NewStaticText2 do
begin
Name := 'NewStaticText2';
Parent := NewGroupBox1;
Caption := CustomMessage('UserName');
Left := ScaleX(32);
Top := ScaleY(57);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit2 := TNewEdit.Create(WizardForm);
with NewEdit2 do
begin
Name := 'NewEdit2';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(53);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText3 := TNewStaticText.Create(WizardForm);
with NewStaticText3 do
begin
Name := 'NewStaticText3';
Parent := NewGroupBox1;
Caption := CustomMessage('Password');
Left := ScaleX(32);
Top := ScaleY(80);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit3 := TNewEdit.Create(WizardForm);
with NewEdit3 do
begin
Name := 'NewEdit3';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(77);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText4 := TNewStaticText.Create(WizardForm);
with NewStaticText4 do
begin
Name := 'NewStaticText4';
Parent := NewGroupBox1;
Caption := CustomMessage('NumberDial');
Left := ScaleX(32);
Top := ScaleY(103);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit4 := TNewEdit.Create(WizardForm);
with NewEdit4 do
begin
Name := 'NewEdit4';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(100);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText5 := TNewStaticText.Create(WizardForm);
with NewStaticText5 do
begin
Name := 'NewStaticText5';
Parent := NewGroupBox1;
Caption := CustomMessage('APN');
Left := ScaleX(32);
Top := ScaleY(127);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit5 := TNewEdit.Create(WizardForm);
with NewEdit5 do
begin
Name := 'NewEdit5';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(124);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText1.TabOrder := 0;
NewEdit1.TabOrder := 1;
NewStaticText2.TabOrder := 2;
NewEdit2.TabOrder := 3;
NewStaticText3.TabOrder := 4;
NewEdit3.TabOrder := 5;
NewStaticText4.TabOrder := 6;
NewEdit4.TabOrder := 7;
NewStaticText5.TabOrder := 8;
NewEdit5.TabOrder := 9;

NewGroupBox1.TabOrder := 0;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

Как это реализовать?

Dark_Delphin
11-06-2012, 15:10
Всем привет)

Кто знает как сделать кнопочку "Язык инсталлятора"?

Скриншот:
http://i37.fastpic.ru/big/2012/0609/2f/5043e11831f51e6748b23bea3747cc2f.png

Johny777
11-06-2012, 16:14
как сделать кнопочку "Язык инсталлятора" »
вот пример
остальное сам допили
так NextButton.Caption := GetIniString('Messages', 'ButtonNext', '', ExpandConstant('{src}\Russian.ini'));
где Russian.ini это переименованный Russian.isl (для теста я его гружу снаружи, рядом с инсталлом, хоя в конечном итоге ему дорога в temp)
Messages это секция ини
ButtonNext это назвние ключа (в файле ButtonNext= )
можно было бы и не из ини брать, а напрямую вписывать названия, но тогда будет много копипаста
можешь смело подредактировать и укоротить ини для своего инсталла


[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[ code]
var
Flag: boolean;


procedure HideShow(Sender: TObject);
begin
If not Flag then
begin

with WizardForm do
begin
NextButton.Caption := GetIniString('Messages', 'ButtonNext', '', ExpandConstant('{src}\Russian.ini'));
case
WizardForm.CurPageID of
wpReady: NextButton.Caption := GetIniString('Messages', 'ButtonInstall', '', ExpandConstant('{src}\Russian.ini'));
wpFinished: NextButton.Caption := GetIniString('Messages', 'ButtonFinish', '', ExpandConstant('{src}\Russian.ini'));
end;
BackButton.Caption := GetIniString('Messages', 'ButtonBack', '', ExpandConstant('{src}\Russian.ini'));
CancelButton.Caption := GetIniString('Messages', 'ButtonCancel', '', ExpandConstant('{src}\Russian.ini'));
WelcomeLabel1.Caption := 'Вас приветствует мастер установки {#SetupSetting("AppName")}';
WelcomeLabel2.Caption := 'Программа установит {#SetupSetting("AppName")} на Ваш компьютер.%n%nРекомендуется закрыть все прочие приложения перед тем, как продолжить.'
end;

TButton(Sender).Caption:='En';
Flag:= True;
end

else

begin

with WizardForm do
begin
NextButton.Caption := GetIniString('Messages', 'ButtonNext', '', ExpandConstant('{src}\English.ini'));
case
WizardForm.CurPageID of
wpReady: NextButton.Caption := GetIniString('Messages', 'ButtonInstall', '', ExpandConstant('{src}\English.ini'));
wpFinished: NextButton.Caption := GetIniString('Messages', 'ButtonFinish', '', ExpandConstant('{src}\English.ini'));
end;
BackButton.Caption := GetIniString('Messages', 'ButtonBack', '', ExpandConstant('{src}\English.ini'));
CancelButton.Caption := GetIniString('Messages', 'ButtonCancel', '', ExpandConstant('{src}\English.ini'));
WelcomeLabel1.Caption := 'Welcome to the {#SetupSetting("AppName")} Setup Wizard';
WelcomeLabel2.Caption := GetIniString('Messages', 'WelcomeLabel2', '', ExpandConstant('{src}\English.ini'));
end;

TButton(Sender).Caption:='Ru';
Flag:= False;
end;

end;


procedure InitializeWizard();
begin

with TButton.Create(WizardForm) do
begin
SetBounds(ScaleX(20), ScaleY(325), ScaleX(25), ScaleY(25));
OnClick:= @HideShow;
Caption:= 'En';
Parent:= WizardForm;
end;
Flag:= True;

end;



(хотя считаю, что эта кнопка чистой воды понт, тк смысл = 0, если ты уже выбрал язык перед запуском инсталла или он выбрался автоматически в зависимости от настроек )

El Sanchez
11-06-2012, 21:27
NetworkCfg.xml должен создаваться в папке программы, т.е %ProgramFiles%\Моё Программное Обеспечение.
То что в коде "но между XXX должно вводиться Название XXX; Например XXX" это должно работать в инсталляторе "вводиться в окошках" »
Неадекватный, способов несколько.
1. Использовать уже готовый шаблон без значений NetworkCfg.xml (как в вашем посте, первый код) и методы объекта XMLDOM:


[Files]
Source: NetworkCfg.xml; Flags: dontcopy

[Code]
procedure CreateNetworkCfg;
var
objXMLDoc: Variant;
begin
objXMLDoc := CreateOleObject('Microsoft.XMLDOM');
objXMLDoc.async := False;
objXMLDoc.load(ExpandConstant('{tmp}\networkcfg.xml'));
if objXMLDoc.parseError.errorCode <> 0 then Exit;
objXMLDoc.selectSingleNode('//AllNetworkConfigs/NetworkConfig/ConfigFileName').Text := NewEdit1.Text;
objXMLDoc.selectSingleNode('//AllNetworkConfigs/NetworkConfig/UserName').Text := NewEdit2.Text;
objXMLDoc.selectSingleNode('//AllNetworkConfigs/NetworkConfig/Password').Text := NewEdit3.Text;
objXMLDoc.selectSingleNode('//AllNetworkConfigs/NetworkConfig/LoginNumber').Text := NewEdit4.Text;
objXMLDoc.selectSingleNode('//AllNetworkConfigs/NetworkConfig/APN').Text := NewEdit5.Text;
objXMLDoc.save(ExpandConstant('{app}\networkcfg.xml'));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssPostInstall: CreateNetworkCfg;
end;
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('networkcfg.xml');
RedesignWizardForm;
end;



2. Использовать SaveStringToFile с длинной строкой.


[Code]
procedure CreateNetworkCfg;
begin
SaveStringToFile(
ExpandConstant('{app}\networkcfg.xml'),
'<?xml version="1.0" encoding="UTF-8"?>'#13#10 +
'<AllNetworkConfigs>'#13#10#9 +
'<NetworkConfig isNDIS="0" canbeDelete="1" isPreferred="1">'#13#10#9#9 +
'<ConfigFileName>' + NewEdit1.Text + '</ConfigFileName>'#13#10#9#9 +
'<UserName>' + NewEdit2.Text + '</UserName>'#13#10#9#9 +
'<Password>' + NewEdit3.Text + '</Password>'#13#10#9#9 +
'<LoginNumber>' + NewEdit4.Text + '</LoginNumber>'#13#10#9#9 +
'<AutoGetAPN>0</AutoGetAPN>'#13#10#9#9 +
'<APN>' + NewEdit5.Text + '</APN>'#13#10#9#9 +
'<AutoGetDNS>1</AutoGetDNS>'#13#10#9#9 +
'<MainDNS>0.0.0.0</MainDNS>'#13#10#9#9 +
'<StandbyDNS>0.0.0.0</StandbyDNS>'#13#10#9#9 +
'<AutoGetPDP>1</AutoGetPDP>'#13#10#9#9 +
'<PDPAddress>0.0.0.0</PDPAddress>'#13#10#9#9 +
'<PDPType>IP</PDPType>'#13#10#9#9 +
'<AuthType>PAP</AuthType>'#13#10#9#9 +
'<AskUserAndPwd>0</AskUserAndPwd>'#13#10#9#9 +
'<SaveUserAndPwd>0</SaveUserAndPwd>'#13#10#9 +
'</NetworkConfig>'#13#10 +
'</AllNetworkConfigs>'
, False
);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssPostInstall: CreateNetworkCfg;
end;
end;

R.i.m.s.k.y.
11-06-2012, 22:02
El Sanchez, что такое objXMLDoc? стандартная функция? или какой-то модуль?

El Sanchez
11-06-2012, 22:06
что такое objXMLDoc? стандартная функция? или какой-то модуль? »
R.i.m.s.k.y., переменная типа Variant, результат функции CreateOleObject, короче, ссылка на объект.

Неадекватный
12-06-2012, 06:16
способов несколько. »
[Setup]
AppName=Моё Программное Обеспечение
AppVersion=1.5
;AppVerName=Моё Программное Обеспечение 1.5
DefaultDirName={pf}\Моё Программное Обеспечение
DefaultGroupName=Моё Программное Обеспечение
OutputDir=.
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Icons]
Name: "{group}\{cm:UninstallProgram,Моё Программное Обеспечение}"; Filename: "{uninstallexe}"

[CustomMessages]
Russian.Caption=Настройка профиля по умолчанию
Russian.Description=Настройте профиль в соответствии с вашим оператором
Russian.SettingsProfile=Настройка профиля
Russian.Operator=Оператор:
Russian.UserName=Имя пользователя:
Russian.Password=Пароль:
Russian.NumberDial=Номер набора:
Russian.APN=Точка доступа:

[*Code]
var
ISCustomPage1: TWizardPage;
NewGroupBox1: TNewGroupBox;
NewStaticText1: TNewStaticText;
NewEdit1: TNewEdit;
NewStaticText2: TNewStaticText;
NewEdit2: TNewEdit;
NewStaticText3: TNewStaticText;
NewEdit3: TNewEdit;
NewStaticText4: TNewStaticText;
NewEdit4: TNewEdit;
NewStaticText5: TNewStaticText;
NewEdit5: TNewEdit;

procedure RedesignWizardForm;
begin
ISCustomPage1 := CreateCustomPage(wpSelectDir, CustomMessage('Caption'), CustomMessage('Description'));

with ISCustomPage1.Surface do
begin
Name := 'ISCustomPage1';
end;

NewGroupBox1 := TNewGroupBox.Create(WizardForm);
with NewGroupBox1 do
begin
Name := 'NewGroupBox1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(16);
Top := ScaleY(8);
Width := ScaleX(377);
Height := ScaleY(209);
Caption := CustomMessage('SettingsProfile');
end;

NewStaticText1 := TNewStaticText.Create(WizardForm);
with NewStaticText1 do
begin
Name := 'NewStaticText1';
Parent := NewGroupBox1;
Caption := CustomMessage('Operator');
Left := ScaleX(32);
Top := ScaleY(31);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit1 := TNewEdit.Create(WizardForm);
with NewEdit1 do
begin
Name := 'NewEdit1';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(28);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText2 := TNewStaticText.Create(WizardForm);
with NewStaticText2 do
begin
Name := 'NewStaticText2';
Parent := NewGroupBox1;
Caption := CustomMessage('UserName');
Left := ScaleX(32);
Top := ScaleY(57);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit2 := TNewEdit.Create(WizardForm);
with NewEdit2 do
begin
Name := 'NewEdit2';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(53);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText3 := TNewStaticText.Create(WizardForm);
with NewStaticText3 do
begin
Name := 'NewStaticText3';
Parent := NewGroupBox1;
Caption := CustomMessage('Password');
Left := ScaleX(32);
Top := ScaleY(80);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit3 := TNewEdit.Create(WizardForm);
with NewEdit3 do
begin
Name := 'NewEdit3';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(77);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText4 := TNewStaticText.Create(WizardForm);
with NewStaticText4 do
begin
Name := 'NewStaticText4';
Parent := NewGroupBox1;
Caption := CustomMessage('NumberDial');
Left := ScaleX(32);
Top := ScaleY(103);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit4 := TNewEdit.Create(WizardForm);
with NewEdit4 do
begin
Name := 'NewEdit4';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(100);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText5 := TNewStaticText.Create(WizardForm);
with NewStaticText5 do
begin
Name := 'NewStaticText5';
Parent := NewGroupBox1;
Caption := CustomMessage('APN');
Left := ScaleX(32);
Top := ScaleY(127);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit5 := TNewEdit.Create(WizardForm);
with NewEdit5 do
begin
Name := 'NewEdit5';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(124);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText1.TabOrder := 0;
NewEdit1.TabOrder := 1;
NewStaticText2.TabOrder := 2;
NewEdit2.TabOrder := 3;
NewStaticText3.TabOrder := 4;
NewEdit3.TabOrder := 5;
NewStaticText4.TabOrder := 6;
NewEdit4.TabOrder := 7;
NewStaticText5.TabOrder := 8;
NewEdit5.TabOrder := 9;

NewGroupBox1.TabOrder := 0;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;Т.е один из способов нужно вписать в код выше так?

Mafia_forever
12-06-2012, 08:29
как сделать чтоб инсталл выводил окошко . идет подготовка к установке и отображения точного прогресса . в прогресс баре или в процентах . плиз хелп .

alert30
12-06-2012, 08:32
Mafia_forever, по моему должен по-умолчанию производится.

Johny777
12-06-2012, 10:22
Неадекватный,
небольшой апдейт к твоему скрипту
блокировка/разблокировка кнопки "далее" в зависимости от того есть ли текст во всех эдитах
припиши всем эдитам OnChange := @EditsOnChange; *(или в дизайнере во вкладке события назначь)


procedure EditsOnChange(Sender: TObject);
begin
WizardForm.NextButton.Enabled := (NewEdit1.Text <> '') and (NewEdit2.Text <> '') and (NewEdit3.Text <> '') and (NewEdit4.Text <> '')and (NewEdit5.Text <> '');
end;

procedure RedesignWizardForm;
begin

....

NewEdit1 := TNewEdit.Create(WizardForm);
with NewEdit1 do
begin

....
OnChange := @EditsOnChange; /// пример
end;

....

end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
ISCustomPage1.ID: WizardForm.NextButton.Enabled := (NewEdit1.Text <> '') and (NewEdit2.Text <> '') and (NewEdit3.Text <> '') and (NewEdit4.Text <> '')and (NewEdit5.Text <> '');
end;
end;


хотя не знаю являются ли твои настройки xml опициональными

полный код:


[Setup]
AppName=Моё Программное Обеспечение
AppVersion=1.5
;AppVerName=Моё Программное Обеспечение 1.5
DefaultDirName={pf}\Моё Программное Обеспечение
DefaultGroupName=Моё Программное Обеспечение
OutputDir=.
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Icons]
Name: "{group}\{cm:UninstallProgram,Моё Программное Обеспечение}"; Filename: "{uninstallexe}"

[CustomMessages]
Russian.Caption=Настройка профиля по умолчанию
Russian.Description=Настройте профиль в соответствии с вашим оператором
Russian.SettingsProfile=Настройка профиля
Russian.Operator=Оператор:
Russian.UserName=Имя пользователя:
Russian.Password=Пароль:
Russian.NumberDial=Номер набора:
Russian.APN=Точка доступа:


[ code]
var
ISCustomPage1: TWizardPage;
NewGroupBox1: TNewGroupBox;
NewStaticText1: TNewStaticText;
NewEdit1: TNewEdit;
NewStaticText2: TNewStaticText;
NewEdit2: TNewEdit;
NewStaticText3: TNewStaticText;
NewEdit3: TNewEdit;
NewStaticText4: TNewStaticText;
NewEdit4: TNewEdit;
NewStaticText5: TNewStaticText;
NewEdit5: TNewEdit;



procedure EditsOnChange(Sender: TObject);
begin
WizardForm.NextButton.Enabled := (NewEdit1.Text <> '') and (NewEdit2.Text <> '') and (NewEdit3.Text <> '') and (NewEdit4.Text <> '')and (NewEdit5.Text <> '');
end;


procedure RedesignWizardForm;
begin
ISCustomPage1 := CreateCustomPage(wpSelectDir, CustomMessage('Caption'), CustomMessage('Description'));

with ISCustomPage1.Surface do
begin
Name := 'ISCustomPage1';
end;

NewGroupBox1 := TNewGroupBox.Create(WizardForm);
with NewGroupBox1 do
begin
Name := 'NewGroupBox1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(16);
Top := ScaleY(8);
Width := ScaleX(377);
Height := ScaleY(209);
Caption := CustomMessage('SettingsProfile');

end;

NewStaticText1 := TNewStaticText.Create(WizardForm);
with NewStaticText1 do
begin
Name := 'NewStaticText1';
Parent := NewGroupBox1;
Caption := CustomMessage('Operator');
Left := ScaleX(32);
Top := ScaleY(31);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit1 := TNewEdit.Create(WizardForm);
with NewEdit1 do
begin
Name := 'NewEdit1';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(28);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
OnChange := @EditsOnChange;
end;

NewStaticText2 := TNewStaticText.Create(WizardForm);
with NewStaticText2 do
begin
Name := 'NewStaticText2';
Parent := NewGroupBox1;
Caption := CustomMessage('UserName');
Left := ScaleX(32);
Top := ScaleY(57);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit2 := TNewEdit.Create(WizardForm);
with NewEdit2 do
begin
Name := 'NewEdit2';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(53);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
OnChange := @EditsOnChange;
end;

NewStaticText3 := TNewStaticText.Create(WizardForm);
with NewStaticText3 do
begin
Name := 'NewStaticText3';
Parent := NewGroupBox1;
Caption := CustomMessage('Password');
Left := ScaleX(32);
Top := ScaleY(80);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit3 := TNewEdit.Create(WizardForm);
with NewEdit3 do
begin
Name := 'NewEdit3';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(77);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
OnChange := @EditsOnChange;
end;

NewStaticText4 := TNewStaticText.Create(WizardForm);
with NewStaticText4 do
begin
Name := 'NewStaticText4';
Parent := NewGroupBox1;
Caption := CustomMessage('NumberDial');
Left := ScaleX(32);
Top := ScaleY(103);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit4 := TNewEdit.Create(WizardForm);
with NewEdit4 do
begin
Name := 'NewEdit4';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(100);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
OnChange := @EditsOnChange;
end;

NewStaticText5 := TNewStaticText.Create(WizardForm);
with NewStaticText5 do
begin
Name := 'NewStaticText5';
Parent := NewGroupBox1;
Caption := CustomMessage('APN');
Left := ScaleX(32);
Top := ScaleY(127);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit5 := TNewEdit.Create(WizardForm);
with NewEdit5 do
begin
Name := 'NewEdit5';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(124);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
OnChange := @EditsOnChange;
end;

NewStaticText1.TabOrder := 0;
NewEdit1.TabOrder := 1;
NewStaticText2.TabOrder := 2;
NewEdit2.TabOrder := 3;
NewStaticText3.TabOrder := 4;
NewEdit3.TabOrder := 5;
NewStaticText4.TabOrder := 6;
NewEdit4.TabOrder := 7;
NewStaticText5.TabOrder := 8;
NewEdit5.TabOrder := 9;

NewGroupBox1.TabOrder := 0;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
ISCustomPage1.ID: WizardForm.NextButton.Enabled := (NewEdit1.Text <> '') and (NewEdit2.Text <> '') and (NewEdit3.Text <> '') and (NewEdit4.Text <> '')and (NewEdit5.Text <> '');
end;
end;

R.i.m.s.k.y.
12-06-2012, 13:01
R.i.m.s.k.y., переменная типа Variant, результат функции CreateOleObject, короче, ссылка на объект. »
пример выше достаточен или надо что-то еще?

El Sanchez
12-06-2012, 15:20
Т.е один из способов нужно вписать в код выше так? »
пример выше достаточен или надо что-то еще? »

Неадекватный, да, вставьте один из вариантов в ваш код.

Dark_Delphin
12-06-2012, 16:16
Всем привет!

Подскажите код, чтобы картинка (PNG) вылазила за пределы инсталлятора и не было фона?

Пример
http://s012.radikal.ru/i319/1011/64/54aa2b155663.jpg

Johny777
12-06-2012, 18:35
Dark_Delphin,
думаю через ботву
могу предложить такой вариант :) на основе ...\Inno Setup 5\Scripts\WindowEffects\Transperent Color.iss


[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Files]
Source: "S17Logo.bmp"; Flags: dontcopy solidbreak

[ Code]
const
TransparentPercent = 80; // процент прозрачности
TransparentColor = $506a5a; // прозрачный цвет
WS_EX_LAYERED = $80000;
WS_EX_TRANSPARENT = $20;
LWA_COLORKEY = 1;
LWA_ALPHA = 2;
GWL_EXSTYLE = (-20);

function SetLayeredWindowAttributes(hwnd: hWnd; crKey: TColor; bAlpha: byte; dwFlags: DWORD): Boolean; external 'SetLayeredWindowAttributes@user32.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
//
type
TANewStatic = record
Static : TNewStaticText;
end;

var
ANewStatic : array of TANewStatic;

function ReleaseCapture(): Longint; external 'ReleaseCapture@user32.dll stdcall';

procedure MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(WizardForm.Handle,$0112,$F012,0)
end;

procedure AddStaticToArray(st:TNewStaticText);
var
i:integer;
begin
i:=GetArrayLength(ANewStatic);
SetArrayLength(ANewStatic,i+1);
ANewStatic[i].Static:=st;
ANewStatic[i].Static.OnMouseDown:=@MouseDown;
end;

procedure StaticChange(c:TWinControl);
var
i:integer;
begin
for i:=0 to c.ControlCount-1 do
if c.Controls[i] is TWinControl then begin
if c.Controls[i] is TNewStaticText then AddStaticToArray(TNewStaticText(c.Controls[i]));
if TWinControl(c.Controls[i]).ControlCount>0 then StaticChange(TWinControl(c.Controls[i]));
end;
end;
//
procedure InitializeWizard();
begin
with WizardForm do
begin
OuterNotebook.Hide;
WizardForm.Width := ScaleX(470);
WizardForm.Height := ScaleY(525);
BorderStyle := bsNone;
CancelButton.Left := ScaleX(200);
CancelButton.Top := ScaleY(230);
end;

with TBitmapImage.Create(WizardForm) do
begin
Parent := WizardForm;
Align := alClient;
Left := ScaleX(0);
Top := ScaleY(0);
ExtractTemporaryFile('S17Logo.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\S17Logo.bmp'));
OnMouseDown := @MouseDown;
end;

SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED)
SetLayeredWindowAttributes(WizardForm.Handle, TransparentColor, (255 * TransparentPercent) / 100, LWA_COLORKEY)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.NextButton.Hide;
end;

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


наглядный пример в архиве
прозрачный цвет здесь
$5а6a50 (фотошоп)
$506a5a (инно)

Dark_Delphin
12-06-2012, 20:40
Johny777, Спасибо. Щас буду пробовать)

Неадекватный
13-06-2012, 14:28
да, вставьте один из вариантов в ваш код. »
При первой инсталляции не работает не создаёт XML, если установить поверх ещё раз то XML создаётся. В чём может быть ошибка?

[Setup]
AppName=Моё Программное Обеспечение
AppVersion=1.5
;AppVerName=Моё Программное Обеспечение 1.5
DefaultDirName={pf}\Моё Программное Обеспечение
DefaultGroupName=Моё Программное Обеспечение
OutputDir=.
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Icons]
Name: "{group}\{cm:UninstallProgram,Моё Программное Обеспечение}"; Filename: "{uninstallexe}"

[CustomMessages]
Russian.Caption=Настройка профиля по умолчанию
Russian.Description=Настройте профиль в соответствии с вашим оператором
Russian.SettingsProfile=Настройка профиля
Russian.Operator=Оператор:
Russian.UserName=Имя пользователя:
Russian.Password=Пароль:
Russian.NumberDial=Номер набора:
Russian.APN=Точка доступа:

[*Code]
var
ISCustomPage1: TWizardPage;
NewGroupBox1: TNewGroupBox;
NewStaticText1: TNewStaticText;
NewEdit1: TNewEdit;
NewStaticText2: TNewStaticText;
NewEdit2: TNewEdit;
NewStaticText3: TNewStaticText;
NewEdit3: TNewEdit;
NewStaticText4: TNewStaticText;
NewEdit4: TNewEdit;
NewStaticText5: TNewStaticText;
NewEdit5: TNewEdit;

procedure RedesignWizardForm;
begin
ISCustomPage1 := CreateCustomPage(wpSelectDir, CustomMessage('Caption'), CustomMessage('Description'));

with ISCustomPage1.Surface do
begin
Name := 'ISCustomPage1';
end;

NewGroupBox1 := TNewGroupBox.Create(WizardForm);
with NewGroupBox1 do
begin
Name := 'NewGroupBox1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(16);
Top := ScaleY(8);
Width := ScaleX(377);
Height := ScaleY(209);
Caption := CustomMessage('SettingsProfile');
end;

NewStaticText1 := TNewStaticText.Create(WizardForm);
with NewStaticText1 do
begin
Name := 'NewStaticText1';
Parent := NewGroupBox1;
Caption := CustomMessage('Operator');
Left := ScaleX(32);
Top := ScaleY(31);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit1 := TNewEdit.Create(WizardForm);
with NewEdit1 do
begin
Name := 'NewEdit1';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(28);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText2 := TNewStaticText.Create(WizardForm);
with NewStaticText2 do
begin
Name := 'NewStaticText2';
Parent := NewGroupBox1;
Caption := CustomMessage('UserName');
Left := ScaleX(32);
Top := ScaleY(57);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit2 := TNewEdit.Create(WizardForm);
with NewEdit2 do
begin
Name := 'NewEdit2';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(53);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText3 := TNewStaticText.Create(WizardForm);
with NewStaticText3 do
begin
Name := 'NewStaticText3';
Parent := NewGroupBox1;
Caption := CustomMessage('Password');
Left := ScaleX(32);
Top := ScaleY(80);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit3 := TNewEdit.Create(WizardForm);
with NewEdit3 do
begin
Name := 'NewEdit3';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(77);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText4 := TNewStaticText.Create(WizardForm);
with NewStaticText4 do
begin
Name := 'NewStaticText4';
Parent := NewGroupBox1;
Caption := CustomMessage('NumberDial');
Left := ScaleX(32);
Top := ScaleY(103);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit4 := TNewEdit.Create(WizardForm);
with NewEdit4 do
begin
Name := 'NewEdit4';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(100);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText5 := TNewStaticText.Create(WizardForm);
with NewStaticText5 do
begin
Name := 'NewStaticText5';
Parent := NewGroupBox1;
Caption := CustomMessage('APN');
Left := ScaleX(32);
Top := ScaleY(127);
Width := ScaleX(100);
Height := ScaleY(14);
end;

NewEdit5 := TNewEdit.Create(WizardForm);
with NewEdit5 do
begin
Name := 'NewEdit5';
Parent := NewGroupBox1;
Left := ScaleX(136);
Top := ScaleY(124);
Width := ScaleX(121);
Height := ScaleY(21);
Text := '';
end;

NewStaticText1.TabOrder := 0;
NewEdit1.TabOrder := 1;
NewStaticText2.TabOrder := 2;
NewEdit2.TabOrder := 3;
NewStaticText3.TabOrder := 4;
NewEdit3.TabOrder := 5;
NewStaticText4.TabOrder := 6;
NewEdit4.TabOrder := 7;
NewStaticText5.TabOrder := 8;
NewEdit5.TabOrder := 9;

NewGroupBox1.TabOrder := 0;
end;

procedure CreateNetworkCfg;
begin
SaveStringToFile(
ExpandConstant('{app}\NetworkCfg.xml'),
'<?xml version="1.0" encoding="UTF-8"?>'#13#10 +
'<AllNetworkConfigs>'#13#10#9 +
'<NetworkConfig isNDIS="0" canbeDelete="1" isPreferred="1">'#13#10#9#9 +
'<ConfigFileName>' + NewEdit1.Text + '</ConfigFileName>'#13#10#9#9 +
'<UserName>' + NewEdit2.Text + '</UserName>'#13#10#9#9 +
'<Password>' + NewEdit3.Text + '</Password>'#13#10#9#9 +
'<LoginNumber>' + NewEdit4.Text + '</LoginNumber>'#13#10#9#9 +
'<AutoGetAPN>0</AutoGetAPN>'#13#10#9#9 +
'<APN>' + NewEdit5.Text + '</APN>'#13#10#9#9 +
'<AutoGetDNS>1</AutoGetDNS>'#13#10#9#9 +
'<MainDNS>0.0.0.0</MainDNS>'#13#10#9#9 +
'<StandbyDNS>0.0.0.0</StandbyDNS>'#13#10#9#9 +
'<AutoGetPDP>1</AutoGetPDP>'#13#10#9#9 +
'<PDPAddress>0.0.0.0</PDPAddress>'#13#10#9#9 +
'<PDPType>IP</PDPType>'#13#10#9#9 +
'<AuthType>PAP</AuthType>'#13#10#9#9 +
'<AskUserAndPwd>0</AskUserAndPwd>'#13#10#9#9 +
'<SaveUserAndPwd>0</SaveUserAndPwd>'#13#10#9 +
'</NetworkConfig>'#13#10 +
'</AllNetworkConfigs>'
, False
);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
ISCustomPage1.ID: CreateNetworkCfg;
end;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

Johny777
13-06-2012, 14:55
Открыл для себя классное решение при использовании скина!
при закрытии окна на секунду появляется виндовсовские границы окна, что не есть красиво:

http://img543.imageshack.us/img543/246/18817170.png (http://imageshack.us/photo/my-images/543/18817170.png/)
поэтому в процедуре деинициализации использую Sleep и Hide
код:


procedure DeinitializeSetup;
begin
if Initialize then
begin
WizardForm.Hide; /// или с формой Autorun.Hide;
Sleep(200);
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
end;
end;

при сокрытии формы (Hide) вин-границы окна не появляется, а окно плавно исчезает
но если сразу после сокрытия выгружать библиотеку, то вин-границы всё же видно
поэтому у нас есть ещё и Sleep (у меня настройка на 200 миллисекунд)
в итоге библиотека выгружается так же некрасиво, но мы этого уже не видим ! :grin:

Мелочь, но классная

два наглядных примера на основе Авторана в архиве http://sendfile.su/613062

El Sanchez
13-06-2012, 17:18
При первой инсталляции не работает не создаёт XML, если установить поверх ещё раз то XML создаётся. В чём может быть ошибка? »
Неадекватный, пардон, я тестировал сохранение не в {app}. Конечно же, при первой установке папки {app} еще не существует, сохранять нужно позже, поэтому вместо блока функции NextButtonClick напишите:

procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssPostInstall: CreateNetworkCfg;
end;
end;

91892823
13-06-2012, 18:49
Здравствуйте!
Мне интересен вопрос более высокой скорости распаковки.. Что-то читал за Фриарк, но не совсем понял. Как же ускорить процесс распаковки? Возможно ли использовать какие-либо библиотеки для ускорения процесса распаковки? Или какими методами достичь этого? Прошу расписать в деталях! Заранее благодарю всех, кто поможет.

Ivan_009
13-06-2012, 20:08
91892823, Используй IsDone там все подробно расписано... :)




© OSzone.net 2001-2012