Скрипты Inno Setup. Помощь и советы [часть 6]

Ответить
 • Просмотры: 61
Аватара пользователя
El Sanchez

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение El Sanchez »

Цитата GolD18:



#define Font "Agent Orange 2.ttf"

#define FontName "Agent Orange 2"



GolD18, имя файла шрифта может быть любым, тут ошибки нет, но само имя шрифта не должно меняться. Откройте шрифт (по умолчанию у шрифтов ассоциация со стандартным виндовым fontview) и в поле Имя шрифта увидите то, что нужно писать при объявлении константы FontName. У шрифта Agent Orange версии 2 имя без двойки.
Аватара пользователя
saurn

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение saurn »

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]

Сообщение neorom »

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]

Сообщение neorom »

Цитата saurn:



опять таки же, не проверял
Скрипты 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]

Сообщение saurn »

neorom, в этом примере нет ни строчки про изменение цвета и подчеркивание при наведении, потому и не работает. Обновил пример в предыдущем посте.
Аватара пользователя
neorom

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение neorom »

Mailchik, Благодарю!

А как сделать, чтоб когда набираешь код, то автоматически переходило в следующее окошко, а не так чтоб мышью выбирать? Возможно так сделать?
Аватара пользователя
saurn

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение saurn »

Цитата 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]

Сообщение neorom »

Извините меня за назойливасть , тот скрипр длинний мне не надо не чего менять, я лиш прашу довести до пуття тот кароткий.
Аватара пользователя
saurn

Re: Скрипты Inno Setup. Помощь и советы [часть 6]

Сообщение saurn »

Цитата 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;
Ответить

Вернуться в «Автоматическая установка приложений»