Скрипты Inno Setup. Помощь и советы [часть 6]
-
El Sanchez
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Цитата GolD18:
#define Font "Agent Orange 2.ttf"
#define FontName "Agent Orange 2"
GolD18, имя файла шрифта может быть любым, тут ошибки нет, но само имя шрифта не должно меняться. Откройте шрифт (по умолчанию у шрифтов ассоциация со стандартным виндовым fontview) и в поле Имя шрифта увидите то, что нужно писать при объявлении константы FontName. У шрифта Agent Orange версии 2 имя без двойки.
#define Font "Agent Orange 2.ttf"
#define FontName "Agent Orange 2"
GolD18, имя файла шрифта может быть любым, тут ошибки нет, но само имя шрифта не должно меняться. Откройте шрифт (по умолчанию у шрифтов ассоциация со стандартным виндовым fontview) и в поле Имя шрифта увидите то, что нужно писать при объявлении константы FontName. У шрифта Agent Orange версии 2 имя без двойки.
-
saurn
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
neorom
Код:
читать дальше »
Код:
Код: Выделить всё
[Code]
var
ISCustomPage1: TWizardPage;
BitmapImage1: TBitmapImage;
NewGroupBox1: TNewGroupBox;
NewRadioButton1: TNewRadioButton;
NewRadioButton2: TNewRadioButton;
NewGroupBox2: TNewGroupBox;
NewCheckBox1: TNewCheckBox;
NewCheckBox2: TNewCheckBox;
NewCheckBox3: TNewCheckBox;
NewCheckBox4: TNewCheckBox;
ErrorCode: Integer;
function InitializeSetup(): Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\01.bmp')) then ExtractTemporaryFile('01.bmp');
if not FileExists(ExpandConstant('{tmp}\02.bmp')) then ExtractTemporaryFile('02.bmp');
Result := True;
end;
function installer: Boolean;
begin
Result := NewRadioButton1.Checked;
end;
function portable: Boolean;
begin
Result := NewRadioButton2.Checked;
end;
function Icons1: Boolean;
begin
Result:= NewCheckBox1.Checked;
end;
function Icons2: Boolean;
begin
Result:= NewCheckBox2.Checked;
end;
function Icons3: Boolean;
begin
Result:= NewCheckBox3.Checked;
end;
function Icons4: Boolean;
begin
Result:= NewCheckBox4.Checked;
end;
procedure BevelLabelClick(Sender: TObject);
begin
ShellExec('open','http://toloka.hurtom.com','', '', SW_SHOW, ewNoWait, ErrorCode)
end;
procedure NewRadioButtonClick(Sender: TObject);
begin
case TNewRadioButton(Sender) of
NewRadioButton1:
begin
NewCheckBox1.Checked:= NewRadioButton1.Checked;
NewCheckBox2.Checked:= NewRadioButton1.Checked;
NewCheckBox3.Checked:= NewRadioButton1.Checked;
NewCheckBox4.Checked:= NewRadioButton1.Checked;
NewCheckBox1.Enabled:= NewRadioButton1.Checked;
NewCheckBox2.Enabled:= NewRadioButton1.Checked;
NewCheckBox3.Enabled:= NewRadioButton1.Checked;
NewCheckBox4.Enabled:= NewRadioButton1.Checked;
BitmapImage1.Bitmap.LoadFromFile(ExpandConstant('{tmp}\01.bmp'));
end;
NewRadioButton2:
begin
NewCheckBox1.Enabled:= NewRadioButton1.Checked;
NewCheckBox2.Enabled:= NewRadioButton1.Checked;
NewCheckBox3.Enabled:= NewRadioButton1.Checked;
NewCheckBox4.Enabled:= NewRadioButton1.Checked;
NewCheckBox1.Checked:= NewRadioButton1.Checked;
NewCheckBox2.Checked:= NewRadioButton1.Checked;
NewCheckBox3.Checked:= NewRadioButton1.Checked;
NewCheckBox4.Checked:= NewRadioButton1.Checked;
BitmapImage1.Bitmap.LoadFromFile(ExpandConstant('{tmp}\02.bmp'));
end;
end;
end;
procedure NewCheckBox1Click(Sender: TObject); forward;
procedure NewCheckBox2Click(Sender: TObject); forward;
procedure NewCheckBox3Click(Sender: TObject); forward;
procedure NewCheckBox4Click(Sender: TObject); forward;
procedure PageNameLabelClick(Sender: TObject); forward;
procedure RedesignWizardForm;
begin
ISCustomPage1 := CreateCustomPage(wpSelectComponents, 'Вибір типа компонентів встановлення', ' ...');
with ISCustomPage1.Surface do
begin
Name := 'ISCustomPage1';
end;
BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Name := 'BitmapImage1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(232);
Top := ScaleY(32);
Width := ScaleX(180);
Height := ScaleY(180);
end;
NewGroupBox1 := TNewGroupBox.Create(WizardForm);
with NewGroupBox1 do
begin
Name := 'NewGroupBox1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(8);
Top := ScaleY(8);
Width := ScaleX(209);
Height := ScaleY(65);
Caption := 'Мова інтерфейсу за умовчанням';
end;
NewRadioButton1 := TNewRadioButton.Create(WizardForm);
with NewRadioButton1 do
begin
Name := 'NewRadioButton1';
Parent := NewGroupBox1;
Left := ScaleX(8);
Top := ScaleY(16);
Width := ScaleX(196);
Height := ScaleY(17);
Checked := True;
Caption := 'Встановлення звичайної версії';
OnClick := @NewRadioButtonClick;
end;
NewRadioButton2 := TNewRadioButton.Create(WizardForm);
with NewRadioButton2 do
begin
Name := 'NewRadioButton2';
Parent := NewGroupBox1;
Left := ScaleX(8);
Top := ScaleY(40);
Width := ScaleX(196);
Height := ScaleY(17);
Caption := 'Розпакування портативної версії';
OnClick := @NewRadioButtonClick;
end;
NewGroupBox2 := TNewGroupBox.Create(WizardForm);
with NewGroupBox2 do
begin
Name := 'NewGroupBox2';
Parent := ISCustomPage1.Surface;
Left := ScaleX(8);
Top := ScaleY(112);
Width := ScaleX(209);
Height := ScaleY(113);
Caption := 'Додатково';
end;
NewCheckBox1 := TNewCheckBox.Create(WizardForm);
with NewCheckBox1 do
begin
Name := 'NewCheckBox1';
Parent := NewGroupBox2;
Left := ScaleX(8);
Top := ScaleY(16);
Width := ScaleX(196);
Height := ScaleY(17);
Checked := True
Caption := 'Закріпити в панелі задач';
OnClick := @NewCheckBox1Click;
end;
NewCheckBox2 := TNewCheckBox.Create(WizardForm);
with NewCheckBox2 do
begin
Name := 'NewCheckBox2';
Parent := NewGroupBox2;
Left := ScaleX(8);
Top := ScaleY(40);
Width := ScaleX(196);
Height := ScaleY(17);
Checked := True
Caption := 'Закріпити в меню ПУСК';
OnClick := @NewCheckBox2Click;
end;
NewCheckBox3 := TNewCheckBox.Create(WizardForm);
with NewCheckBox3 do
begin
Name := 'NewCheckBox3';
Parent := NewGroupBox2;
Left := ScaleX(8);
Top := ScaleY(64);
Width := ScaleX(196);
Height := ScaleY(17);
Checked := True
Caption := 'Ярлик(и) на робочому столі';
OnClick := @NewCheckBox3Click;
end;
NewCheckBox4 := TNewCheckBox.Create(WizardForm);
with NewCheckBox4 do
begin
Name := 'NewCheckBox4';
Parent := NewGroupBox2;
Left := ScaleX(8);
Top := ScaleY(88);
Width := ScaleX(196);
Height := ScaleY(17);
Checked := True
Caption := 'Ярлики в меню ПУСК';
OnClick := @NewCheckBox4Click;
end;
with WizardForm.WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Width := ScaleX(150);
end;
with WizardForm.PageDescriptionLabel do
begin
Left := ScaleX(200);
Top := ScaleY(27);
Width := ScaleX(293);
end;
with WizardForm.PageNameLabel do
begin
OnClick := @PageNameLabelClick;
Left := ScaleX(200);
Width := ScaleX(269);
end;
end;
procedure PageNameLabelClick(Sender: TObject);
begin
end;
procedure NewCheckBox1Click(Sender: TObject);
begin
end;
procedure NewCheckBox2Click(Sender: TObject);
begin
end;
procedure NewCheckBox3Click(Sender: TObject);
begin
end;
procedure NewCheckBox4Click(Sender: TObject);
begin
end;
procedure InitializeWizard();
begin
RedesignWizardForm;
with WizardForm do
begin
with BeveledLabel do
begin
OnClick:=@BevelLabelClick;
Font.Color:=clBlue;
Enabled:=True;
Cursor:=crHand;
Font.Style:= [fsBold]
end;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
ISCustomPage1.ID: if NewRadioButton1.Checked then BitmapImage1.Bitmap.LoadFromFile(ExpandConstant('{tmp}\01.bmp'));
end;
end;
-
neorom
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Aquila,
Код:
Как в исходном коде приведённый в
Код:
Пример для компонентов
Код:
читать дальше »
Код:
Код: Выделить всё
[Setup]
AppName=My Program
AppVersion=1.5
;AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[Components]
Name: ag; Description: Aquila; Check: AquilaComp
[Icons]
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}; Check: GroupIcon
Name: {commondesktop}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}; Check: DesktopIcon
Name: {commondesktop}\Aquila\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}; Check: AquilaIcon
[Code]
function CheckParam(s: string): boolean;
var
i: integer;
begin
for i := 0 to ParamCount do begin
Result := ParamStr(i) = s;
if Result then Break;
end;
end;
function GroupIcon: boolean;
begin
Result := CheckParam('iGroup');
end;
function DesktopIcon: boolean;
begin
Result := CheckParam('iDesktop');
end;
function AquilaIcon: boolean;
begin
Result := CheckParam('iAquila');
end;
// Можно и к компонентам прикрутить
function AquilaComp: boolean;
begin
Result := CheckParam('iAquilaComponents');
end;Как в исходном коде приведённый в
Скрипты Inno Setup. Помощь и советы [часть 6]
от Mailchik
Код:
Код: Выделить всё
setup.exe iAquilaПример для компонентов
Код:
Код: Выделить всё
setup.exe iAquilaComponents-
neorom
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Цитата saurn:
опять таки же, не проверял
Благодарю! Проверил, работает.
Сейчас зациклился на MsgBox. Где-то что-то не правильно делаю, либо вообще не туда полез.
Т.к ключ должен быть в любом случае, то значит должна быть проверка на то введён ключ в инсталляторе или нет
т.е если в инсталляторе окошки пусты, либо не хватает буквы или цифры то при нажатии на далее выводил сообщение MsgBox('Вы должны ввести ключ.', mbError, MB_OK);, либо же кнопка далее была бы не активна до тех пор пока весь ключ не будет введён, вот что-то одно.
Код:
опять таки же, не проверял
Скрипты Inno Setup. Помощь и советы [часть 6]
Благодарю! Проверил, работает.
Сейчас зациклился на MsgBox. Где-то что-то не правильно делаю, либо вообще не туда полез.
Т.к ключ должен быть в любом случае, то значит должна быть проверка на то введён ключ в инсталляторе или нет
т.е если в инсталляторе окошки пусты, либо не хватает буквы или цифры то при нажатии на далее выводил сообщение MsgBox('Вы должны ввести ключ.', mbError, MB_OK);, либо же кнопка далее была бы не активна до тех пор пока весь ключ не будет введён, вот что-то одно.
читать дальше »
Код:
Код: Выделить всё
function NextButtonClick(CurPageID:integer): Boolean;
begin
case CurPageID of
SerialPage.ID:
begin
CreateDir(ExpandConstant('{userdocs}\GameEX'));
SaveStringToFile(ExpandConstant('{userdocs}\GameEX\keysgame.ini'), EditsNumber, False);
MsgBox('Вы должны ввести ключ.', mbError, MB_OK);
end;
end;
Result := True;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
SerialPage.ID: Result := FileExists(ExpandConstant('{userdocs}\GameEX\keysgame.ini'));
end;
end;-
saurn
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
neorom, в этом примере нет ни строчки про изменение цвета и подчеркивание при наведении, потому и не работает. Обновил пример в предыдущем посте.
-
neorom
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Mailchik, Благодарю!
А как сделать, чтоб когда набираешь код, то автоматически переходило в следующее окошко, а не так чтоб мышью выбирать? Возможно так сделать?
А как сделать, чтоб когда набираешь код, то автоматически переходило в следующее окошко, а не так чтоб мышью выбирать? Возможно так сделать?
-
saurn
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Цитата Crazy Noise:
А как сделать, чтоб когда набираешь код, то автоматически переходило в следующее окошко, а не так чтоб мышью выбирать? Возможно так сделать?
В двух вариантах:
Цитата Crazy Noise:
если в инсталляторе окошки пусты, либо не хватает буквы или цифры то при нажатии на далее выводил сообщение
Код:
-------------------------------------------------------------------------------------
Цитата Crazy Noise:
либо же кнопка далее была бы не активна до тех пор пока весь ключ не будет введён
Код:
А как сделать, чтоб когда набираешь код, то автоматически переходило в следующее окошко, а не так чтоб мышью выбирать? Возможно так сделать?
Скрипты Inno Setup. Помощь и советы [часть 6]
В двух вариантах:
Цитата Crazy Noise:
если в инсталляторе окошки пусты, либо не хватает буквы или цифры то при нажатии на далее выводил сообщение
Скрипты Inno Setup. Помощь и советы [часть 6]
читать дальше »
Код:
Код: Выделить всё
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[CustomMessages]
MESSAGES_1=Ввод серийного номера
MESSAGES_2=Серийный номер нужен для активации программного обеспечения.
MESSAGES_3=Для активации необходимо ввести серийный номер поставляемый в комплекте с программным обеспечением.
[code]
var
SerialPage: TWizardPage;
Edits: array [1..4] of TEdit;
I, E: Integer;
SerialPage_Label: TNewStaticText;
sNumber: String;
procedure EditsChange(Sender: TObject);
var
i: integer;
begin
for i := 1 to 4 do begin
Edits[i].AutoSelect := False;
if i < 4 then
if Length(Edits[i].Text) = 4 then
Edits[i+1].SetFocus;
end;
end;
function EditsNumber(): string;
begin
for I := 1 to 4 do
begin
sNumber := sNumber + Edits[i].Text + '-';
end;
sNumber := Copy(sNumber, 1, Length(sNumber) - 1);
Result := sNumber;
end;
procedure InitializeWizard();
begin
SerialPage := CreateCustomPage(wpSelectTasks, CustomMessage('MESSAGES_1'), CustomMessage('MESSAGES_2'));
SerialPage_Label := TNewStaticText.Create(nil);
with SerialPage_Label do
begin
Parent := SerialPage.Surface;
SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(28));
WordWrap := True;
Caption := CustomMessage('MESSAGES_3');
end;
E := ScaleX(73);
for I := 1 to 4 do
begin
Edits[i]:= TEdit.Create(nil);
with Edits[i] do
begin
Parent:= SerialPage.Surface;
SetBounds(0 + (E*I), ScaleY(47), ScaleX(47), ScaleY(21));
MaxLength:= 4;
OnChange := @EditsChange;
end;
end;
end;
function NextButtonClick(CurPageID:integer): Boolean;
var
i: integer;
begin
Result := True;
case CurPageID of
SerialPage.ID:
begin
CreateDir(ExpandConstant('{userdocs}\GameEX'));
SaveStringToFile(ExpandConstant('{userdocs}\GameEX\keysgame.ini'), EditsNumber, False);
for i := 1 to 4 do begin
Result := Edits[i].GetTextLen = 4;
if not Result then begin
MsgBox('Вы должны ввести ключ.', mbError, MB_OK);
Break;
end;
end;
end;
end;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
SerialPage.ID: Result := FileExists(ExpandConstant('{userdocs}\GameEX\keysgame.ini'));
end;
end;-------------------------------------------------------------------------------------
Цитата Crazy Noise:
либо же кнопка далее была бы не активна до тех пор пока весь ключ не будет введён
Скрипты Inno Setup. Помощь и советы [часть 6]
читать дальше »
Код:
Код: Выделить всё
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[CustomMessages]
MESSAGES_1=Ввод серийного номера
MESSAGES_2=Серийный номер нужен для активации программного обеспечения.
MESSAGES_3=Для активации необходимо ввести серийный номер поставляемый в комплекте с программным обеспечением.
[code]
var
SerialPage: TWizardPage;
Edits: array [1..4] of TEdit;
I, E: Integer;
SerialPage_Label: TNewStaticText;
sNumber: String;
procedure EditsChange(Sender: TObject);
var
i, eLength: integer;
begin
eLength := 0;
for i := 1 to 4 do begin
Edits[i].AutoSelect := False;
if i < 4 then
if Length(Edits[i].Text) = 4 then
Edits[i+1].SetFocus;
eLength := eLength + Length(Edits[i].Text);
end;
WizardForm.NextButton.Enabled := eLength = 4 * 4;
end;
function EditsNumber(): string;
begin
for I := 1 to 4 do
begin
sNumber := sNumber + Edits[i].Text + '-';
end;
sNumber := Copy(sNumber, 1, Length(sNumber) - 1);
Result := sNumber;
end;
procedure InitializeWizard();
begin
SerialPage := CreateCustomPage(wpSelectTasks, CustomMessage('MESSAGES_1'), CustomMessage('MESSAGES_2'));
SerialPage_Label := TNewStaticText.Create(nil);
with SerialPage_Label do
begin
Parent := SerialPage.Surface;
SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(28));
WordWrap := True;
Caption := CustomMessage('MESSAGES_3');
end;
E := ScaleX(73);
for I := 1 to 4 do
begin
Edits[i]:= TEdit.Create(nil);
with Edits[i] do
begin
Parent:= SerialPage.Surface;
SetBounds(0 + (E*I), ScaleY(47), ScaleX(47), ScaleY(21));
MaxLength:= 4;
OnChange := @EditsChange;
end;
end;
end;
function NextButtonClick(CurPageID:integer): Boolean;
var
i: integer;
begin
Result := True;
case CurPageID of
SerialPage.ID:
begin
CreateDir(ExpandConstant('{userdocs}\GameEX'));
SaveStringToFile(ExpandConstant('{userdocs}\GameEX\keysgame.ini'), EditsNumber, False);
end;
end;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
SerialPage.ID: Result := FileExists(ExpandConstant('{userdocs}\GameEX\keysgame.ini'));
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = SerialPage.ID then
EditsChange(nil);
end;-
neorom
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Извините меня за назойливасть , тот скрипр длинний мне не надо не чего менять, я лиш прашу довести до пуття тот кароткий.
-
saurn
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Цитата habib2302:
как добавить чекбокс на создание резервной копии файлов?
Код:
как добавить чекбокс на создание резервной копии файлов?
Скрипты Inno Setup. Помощь и советы [часть 6]
Например, так
Код:
Код: Выделить всё
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp
OutputDir=...
Compression=none
[Files]
Source: C:\Windows\Fonts\*; DestDir: {app}; BeforeInstall: CreateBackup(); Flags: recursesubdirs overwritereadonly createallsubdirs ignoreversion;
[Code]
#ifdef UNICODE
type
PChar = PAnsiChar;
#endif
function MoveFile(const TargetFile, BackupFile: PChar):Integer; external 'MoveFileA@kernel32.dll stdcall';
var
CreateBackup_On_Off: TNewCheckBox;
function CheckedBoxes(const iParams: Integer): Boolean;
begin
case iParams of
1: Result := CreateBackup_On_Off.Checked;
end;
end;
procedure CreateBackup();
var
FinalDir, TargetFile, BackupFile, TargetPath, ShortPath: String;
begin
if CheckedBoxes(1) then
begin
TargetPath:= ExpandConstant('{app}');
TargetFile:= ExpandConstant(CurrentFileName);
FinalDir := AddBackslash(ExpandConstant('{app}\Original.old')) + GetDateTimeString('YYYY/MM/DD', '-', '-');
ShortPath:= TargetFile;
StringChangeEx(ShortPath, TargetPath, '', True);
BackupFile:= FinalDir + ShortPath;
ForceDirectories(ExtractFilePath(BackupFile));
MoveFile(PChar(TargetFile), PChar(BackupFile));
end;
end;
procedure InitializeWizard();
begin
CreateBackup_On_Off := TNewCheckBox.Create(nil);
with CreateBackup_On_Off do
begin
Parent := WizardForm.SelectDirPage;
SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + 30, WizardForm.DirEdit.Width, WizardForm.DirEdit.Height);
Caption := 'Сохранить резервную копию перезаписываемых файлов';
end;
end;