Inno Setup (создание инсталяционных пакетов). Часть 1

Статус
В этой теме нельзя размещать новые ответы.

Yksus01

Мимокрокодил
Я то думал тебе надо изменить надписи в "Программы и компоненты", а всё что в окне инсталла, с этим можно делать что хочешь, ну или на что фантазии хватит.
ага - это я уже благодаря вам понял, когда про титул сказали =)

не сочтите за рекламу, но кому будет нужно - тут можно посмотреть все message
- и уже их делать под каждый язык, что очень удобно.
 

saha

Мимокрокодил
Как мне вот тут над двумя строчками key и user расположить текст?
Код:
var
ISCustomPage1: TWizardPage;
key1: TNewEdit;
key2: TNewEdit;
key3: TNewEdit;
key4: TNewEdit;
user: TNewEdit;

procedure InitializeWizard();
begin
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpWelcome, 
{ key1 }
key1 := TNewEdit.Create(WizardForm);
with key1 do
begin
Name := 'key1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(48);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4; // 
end;
{ key2 }
key2 := TNewEdit.Create(WizardForm);
with key2 do
begin
Name := 'key2';
Parent := ISCustomPage1.Surface;
Left := ScaleX(136);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;

{ key3 }
key3 := TNewEdit.Create(WizardForm);
with key3 do
begin
Name := 'key3';
Parent := ISCustomPage1.Surface;
Left := ScaleX(224);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;

{ key4 }
key4 := TNewEdit.Create(WizardForm);
with key4 do
begin
Name := 'key4';
Parent := ISCustomPage1.Surface;
Left := ScaleX(312);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;

{ user }
user := TNewEdit.Create(WizardForm);
with user do
begin
Name := 'user';
Parent := ISCustomPage1.Surface;
Left := ScaleX(48);
Top := ScaleY(56);
Width := ScaleX(329);
Height := ScaleY(21);
Text := '';
end;
end;




[/SPOILER]
 
Последнее редактирование:

Yksus01

Мимокрокодил
Snoopak96,

вот такой еще вопрос, может в курсе - помоги пожалуйста.


Код:
procedure DirOnClick(Sender: TObject);
var
  res: Boolean;
  UserSelectDir: String;
begin
  UserSelectDir:= WizardForm.DirEdit.Text;
  res:= BrowseForFolder('Выберите папку для установки', UserSelectDir, True);
  if res then
    begin
      WizardForm.DirEdit.Text:= UserSelectDir;
    end;
end;
как сделать чтобы "Выберите папку для установки" - при выборе разных языков, выбирался и перевод данного текста?
 
Последнее редактирование:

Yksus01

Мимокрокодил
Yksus01,
Код:
res:= BrowseForFolder(SetupMessage(msgWizardSelectDir), UserSelectDir, True);
ага спасибо, помогло.


а еще как добавить не уже существующий а свой CustomMessage ?

Код:
URLLabel.Caption := '[Офиц. сайт]: Domain.ru';
а как чтобы Офиц сайт при выборе языка, переводилось на нужный.
 

saha

Мимокрокодил
Snoopak96,

Вот сам код
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{D63874E1-331B-4DFD-BB9B-4CBDAE740E81}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
CreateAppDir=no
OutputBaseFilename=setup
SetupIconFile=C:\Program Files\Inno Setup 5\IS_Skin\Styles\IViewer.ico
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"
Код:
var
ISCustomPage1: TWizardPage;
key1: TNewEdit;
key2: TNewEdit;
key3: TNewEdit;
key4: TNewEdit;
user: TNewEdit;

procedure InitializeWizard();
begin
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpWelcome, 'Информация о пользователе', 'Пожалуйста, введите желаемо имя и любой пароль.');

{ key1 }
key1 := TNewEdit.Create(WizardForm);
with key1 do
begin
Name := 'key1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(48);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4; // количество знаков
end;
{ key2 }
key2 := TNewEdit.Create(WizardForm);
with key2 do
begin
Name := 'key2';
Parent := ISCustomPage1.Surface;
Left := ScaleX(136);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;

{ key3 }
key3 := TNewEdit.Create(WizardForm);
with key3 do
begin
Name := 'key3';
Parent := ISCustomPage1.Surface;
Left := ScaleX(224);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;

{ key4 }
key4 := TNewEdit.Create(WizardForm);
with key4 do
begin
Name := 'key4';
Parent := ISCustomPage1.Surface;
Left := ScaleX(312);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;

{ user }
user := TNewEdit.Create(WizardForm);
with user do
begin
Name := 'user';
Parent := ISCustomPage1.Surface;
Left := ScaleX(48);
Top := ScaleY(56);
Width := ScaleX(329);
Height := ScaleY(21);
Text := '';   
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
Var
S1, S2: String;
begin
result:=true;
if CurPageID = wpReady then begin//запись после страницы готовности.
S1 := ExpandConstant(key1.Text+'-'+key2.Text+'-'+key3.Text+'-'+key4.Text);
RegWriteStringValue(HKLM, 'Software\GSC Game World\STALKER-COP', 'InstallCDKEY', S1);
RegWriteStringValue(HKLM, 'Software\Wow6432Node\GSC Game World\STALKER-COP', 'InstallCDKEY', S1);
S2 := user.Text;
RegWriteStringValue(HKLM, 'Software\GSC Game World\STALKER-COP', 'InstallUserName',S2);
RegWriteStringValue(HKLM, 'Software\Wow6432Node\GSC Game World\STALKER-COP', 'InstallUserName',S2);
end;
end;
[/SPOILER]
А вот что то что помечено каркасным хотелось бы получить в  итоге
[SPOILER][IMG]http://s51.radikal.ru/i134/1108/91/857687cbdc30.jpg[/IMG][/SPOILER]
 

Snoopak96

Старожил
saha,
Создавай лейбл и пиши свой текст:
Код:
var
Text: TLabel;

procedure InitializeWizard;
begin
Text := TLabel.Create(WizardForm);
with Text do begin
  Left:= ScaleX(55);
  Top:= ScaleY(125);
  Width:= ScaleX(305);
  Height:= ScaleY(20);
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  Font.Color:=$000000;
  Font.Style := [fsBold]
  Font.Name:='Times New Roman';
  Font.Size:=10;
  Caption := 'Введите код для запуска межконтинентальных баллистических ракет';
  Parent := WizardForm.WelcomePage;
end;
end;[/QUOTE]
 

shidow

Новичок
Можно как-нибудь сделать чтобы после установки в .ini файл добавлялась строка?
 

GVS276

Старожил
Проверенный
shidow,
Можно как-нибудь сделать чтобы после установки в .ini файл добавлялась строка?
[hide=Пример][Setup]
AppName=1
AppVerName=1
DefaultDirName={pf}\1
DefaultGroupName=1
OutputDir=.

Код:
var  
  NikPage  : TWizardPage;
  NikEdit  : TEdit;
  NikLabel : TLabel;

procedure NikEditOnChange(Sender: TObject);
begin
if NikEdit.Text = '' then
  WizardForm.NextButton.Enabled := False
else
  WizardForm.NextButton.Enabled := True;
end;

procedure InitializeWizard(); 
begin 
  NikPage:= CreateCustomPage(wpWelcome, ExpandConstant('Создание учетной записи'), ExpandConstant(''));

  NikLabel:= TLabel.Create(NikPage)
  NikLabel.Parent:= NikPage.Surface;
  NikLabel.Left:=0;
  NikLabel.Top:=0;
  NikLabel.Width:=415;
  NikLabel.AutoSize:=False;
  NikLabel.Font.Name:='Georgia';
  NikLabel.Caption:='Введите свой игровой ник';

  NikEdit:= TEdit.Create(NikPage)
  NikEdit.Parent:= NikPage.Surface;
  NikEdit.Left:=0;
  NikEdit.Top:=25;
  NikEdit.Width:=415;
  NikEdit.AutoSize:=False;
  NikEdit.Font.Name:='Georgia';
  NikEdit.OnChange := @NikEditOnChange;
end; 

Procedure CurPageChanged(CurPageID: Integer);
Begin 
if (CurPageID = NikPage.ID) and (NikEdit.Text = '') then begin
  WizardForm.NextButton.Enabled := False;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep); 
begin if CurStep = ssPostInstall then 
  SaveStringToFile(ExpandConstant('{app}\Skidrow.ini'), 

  '[Game]' + #13#10#13#10 +

  '# Environment Application Id.' + #13#10 +
  'AppId = 21100' + #13#10#13#10 +

  '# Change the language only if the game uses steam_api/steamclient to decide it.' + #13#10 +
  '# Language = "russian"' + #13#10 +
  'Language=russian' + #13#10#13#10 + 

  '[Settings]' + #13#10#13#10 + 

  '# You might want change this.' + #13#10 +
  'PlayerName =' + NikEdit.Text + #13#10, True); 
end;[/hide]
писал для себя думаю разберёшься :)
P.S. Тут есть строчки, то что ты хотел
 

vint56

Ветеран
Проверенный
shidow, вот пример
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then begin
SetIniString('Prefs', 'InnoFolder', ExpandConstant('{app}'), ExpandConstant('{userappdata}\ISTool\ISTool.ini'));
end;
end;
 

Rikill

Новичок
Здравствуйте, вопрос таков: Как сделать эквалайзер на заднем фоне инсталлятора? Я погуглил, на oszone мне Shegorat дал пример, но он не работает, вобще ничего не появляется :(
Код:
[Setup]
AppName=MyApp
AppVername=MyApp
DefaultDirname={pf}\MyApp

[ code]
type
  HSTREAM = DWORD;
  HFX = DWORD;
  BASS_DX8_PARAMEQ = record
    fCenter: single;
    fBandwidth: single;
    fGain: single;
  end;

const
  BASS_FX_DX8_PARAMEQ     = 7;
  
function BASS_ChannelSetFX(handle, type_: DWORD; priority: LongInt): HFX; external 'BASS_ChannelSetFX@files:bassdll.dll stdcall';
function BASS_ChannelRemoveFX(handle: DWORD; fx: HFX): BOOL; external 'BASS_ChannelRemoveFX@files:bassdll.dll stdcall';
function BASS_FXSetParameters(handle: HFX; par: BASS_DX8_PARAMEQ): BOOL; external 'BASS_FXSetParameters@files:bassdll.dll stdcall';
function BASS_FXGetParameters(handle: HFX; var par: BASS_DX8_PARAMEQ): BOOL; external 'BASS_FXGetParameters@files:bassdll.dll stdcall';
function BASS_FXReset(handle: HFX): BOOL; external 'BASS_FXReset@files:bassdll.dll stdcall';

var
 FileStream: HSTREAM; // handle воспроизводящегося потока
 FX: HFX; // handle добавляемого эффекта
 TrackBar1: TTrackBar;
 
procedure TrackBar1Change(Sender: TObject);
var
 PE: BASS_DX8_PARAMEQ;
begin
 BASS_ChannelRemoveFX(FileStream, FX); // чтобы убрать предыдущую настройку
 FX := BASS_ChannelSetFX(FileStream, BASS_FX_DX8_PARAMEQ, 1);
 PE.fCenter := 80; // частота регулируемой полосы (в герцах, от 80 до 16000)
 PE.fGain := TrackBar1.Position; // задаваемое значение (от -15 до 15)
 BASS_FXSetParameters(FX, PE);
end;
 
Последнее редактирование:

Shegorat

Lord of Madness
Администратор
Здравствуйте, вопрос таков: Как сделать эквалайзер на заднем фоне инсталлятора? Я погуглил, на oszone мне Shegorat дал пример, но он не работает, вобще ничего не появляется
А что ты хотел увидеть? Я просто немного переписал тот код, что ты мне дал, для его работы на инно. Но я не создавал в нем тракбар. Вот пробуй, поиграйся с параметрами PE.fCenter и PE.fBandwidth
Код:
[Setup]
AppName=MyApp
AppVername=MyApp
DefaultDirname={pf}\MyApp

[files]
Source: compiler:bass.dll; DestDir: {tmp}; Flags: dontcopy;
Source: #1_01_Eagles_Otel California.mp3; DestDir: {app}; Flags: dontcopy nocompression

[ code]
type
  HSTREAM = DWORD;
  HFX = DWORD;
  BASS_DX8_PARAMEQ = record
    fCenter: single;
    fBandwidth: single;
    fGain: single;
  end;

const
  BASS_FX_DX8_PARAMEQ     = 7;

function BASS_Init(device: LongInt; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@{tmp}\BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset1, offset2, length1, length2: DWORD; flags: DWORD): HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall delayload';
function BASS_Stop(): Boolean; external 'BASS_Stop@files:bass.dll stdcall delayload';
function BASS_Free(): Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function BASS_Start(): Boolean; external 'BASS_Start@files:bass.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall delayload';

function BASS_ChannelSetFX(handle, type_: DWORD; priority: LongInt): HFX; external 'BASS_ChannelSetFX@files:bass.dll stdcall';
function BASS_ChannelRemoveFX(handle: DWORD; fx: HFX): BOOL; external 'BASS_ChannelRemoveFX@files:bass.dll stdcall';
function BASS_FXSetParameters(handle: HFX; par: BASS_DX8_PARAMEQ): BOOL; external 'BASS_FXSetParameters@files:bass.dll stdcall';
function BASS_FXGetParameters(handle: HFX; var par: BASS_DX8_PARAMEQ): BOOL; external 'BASS_FXGetParameters@files:bass.dll stdcall';
function BASS_FXReset(handle: HFX): BOOL; external 'BASS_FXReset@files:bass.dll stdcall';

var
 FileStream: HSTREAM; // handle воспроизводящегося потока
 FX: HFX; // handle добавляемого эффекта
 TrackBar1: TTrackBar;

procedure TrackBar1Change(Sender: TObject);
var
 PE: BASS_DX8_PARAMEQ;
begin
 BASS_ChannelRemoveFX(FileStream, FX); // чтобы убрать предыдущую настройку
 FX := BASS_ChannelSetFX(FileStream, BASS_FX_DX8_PARAMEQ, 1);
 PE.fCenter := 80; // частота регулируемой полосы (в герцах, от 80 до 16000)
 PE.fBandwidth:= 4;
 PE.fGain := TrackBar1.Position-15; // задаваемое значение (от -15 до 15)
 BASS_FXSetParameters(FX, PE);
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('#1_01_Eagles_Otel California.mp3')
  BASS_Init(-1, 44100, 0, 0, 0)
  BASS_Start();
  FileStream:= BASS_StreamCreateFile(FALSE, PAnsiChar(ExpandConstant('{tmp}\#1_01_Eagles_Otel California.mp3')), 0, 0, 0, 0, $40000);
  BASS_ChannelPlay(FileStream, False);
  
  TrackBar1:= TTrackBar.Create(WizardForm);
  TrackBar1.Left:= 20;
  TrackBar1.Top:= 330;
  TrackBar1.Max:=30;
  TrackBar1.Min:=0;
  TrackBar1.Position:=15;
  TrackBar1.OnChange:= @TrackBar1Change;
  Trackbar1.Parent:= WizardForm;
end;

procedure DeinitializeSetup();
begin
  BASS_Stop;
  BASS_Free;
end;
 

Rikill

Новичок
Shegorat
[hr]
Используй последнюю версию библиотеки 2.4.7.1 Shegorat
 

vint56

Ветеран
Проверенный
Rikill, используй библиотеку bass.dll из BASS_v.1.2-pre от Shegorat
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху