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

  • Автор темы Автор темы Shegorat
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.
Yalsrof
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

Код:
var
AutoRun: TSetupForm;
ContinueInstall: boolean;
Ok: TLabel;
TextA: TLabel;
TextB: TLabel;
Logo: TLabel;

procedure LogoClick(Sender: TObject);
var
 ErrorCode: Integer;
begin
 ShellExec('', 'http://krinkels.org/showthread.php?p=18597#post18597', '', '', SW_SHOW, ewNoWait, ErrorCode);
end;

procedure OkClick(Sender: TObject);
begin
ContinueInstall:=True;
AutoRun.Close;
end;

function AutoRunExec: boolean;
begin
ContinueInstall:=False;
AutoRun := CreateCustomForm;
with AutoRun do begin
ClientWidth:=ScaleX(365);
ClientHeight:=ScaleY(220);
Position := poScreenCenter;
end;

Logo := TLabel.Create(CreateCustomForm);
with Logo do
begin
SetBounds(ScaleX(30), ScaleY(190), ScaleX(75), ScaleY(25));
Parent := AutoRun;
Caption := 'krinkels.org';
OnClick:=@LogoClick
Font.Color := $d77a02;
Font.Height := -16;
Font.Name := 'Tahoma';
Font.Style := [fsBold];
Cursor := crHand;
end;

Ok := TLabel.Create(CreateCustomForm);
with Ok do
begin
SetBounds(ScaleX(300), ScaleY(190), ScaleX(75), ScaleY(25));
Parent := AutoRun;
Caption := 'ok';
OnClick:=@OkClick
Font.Color := $d77a02;
Font.Height := -16;
Font.Name := 'Tahoma';
Font.Style := [fsBold];
Cursor := crHand;
end;

TextA := TLabel.Create(CreateCustomForm);
with TextA do
begin
Parent := AutoRun;
Caption := 'Свой текст!';
Font.Color := $d77a02;
Font.Height := -16;
Font.Name := 'Tahoma';
Font.Style := [fsBold];
ParentFont := False;
Left := ScaleX(135);
Top := ScaleY(0);
Width := ScaleX(100);
Height := ScaleY(20);
end;

TextB := TLabel.Create(CreateCustomForm);
with TextB do
begin
Parent := AutoRun;
Alignment := taCenter;
Caption := 'Свой текст!';
Font.Color := $d77a02;
Font.Height := -16;
Font.Name := 'Tahoma';
Font.Style := [fsBold];
ParentFont := False;
Left := ScaleX(0);
Top := ScaleY(20);
Width := ScaleX(370);
Height := ScaleY(170);
end;

AutoRun.ShowModal;
AutoRun.Free;
Result:=ContinueInstall;
end;

function InitializeSetup: Boolean;
begin
Result:=AutoRunExec;
end;

procedure DeinitializeSetup;
begin
if ContinueInstall then begin
end;
end;[/SPOILER]
 
Привет всем. Снова хочу попросить вашей помощи. Нужно реализовать показ доступного (свободного) места на диске, например как тут:
cfc6b9975e9a6cbd44900cc808ea87a6.png
 
Shegorat, Спасибо. Забыл о FAQ.

Еще кое-что. Как вставить Custom Message в выделенное место:
procedure DirEditOnChange(Sender: TObject);
var Drive: String;
begin
Drive:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Drive, True, FreeMB, TotalMB);
// TotalSpaceLabel.Caption:= 'Всего места на диске: '+MbOrTb(TotalMB);
FreeSpaceLabel.Caption:= 'Available of disk space: '+MbOrTb(FreeMB)+'.';
// InstallSpacelabel.Caption:= 'Требуется места для установки: '+MbOrTb({#NeedInstallSize});
// NeedSpaceLabel.Caption:= 'Требуется места на диске: '+MbOrTb({#NeedSize});
WizardForm.NextButton.Enabled:= (FreeMB>{#NeedSize})and(FreeMB>{#NeedSize}) ;
end;
Я уже вставлял Custom Message туда, но старый скрипт был утерян, поэтому сам уже не могу сделать.
---
И как убрать выделенную надпись на странице готовности:
1e794a333cbd0bdec07a6772a0456e57.png
 
Tolyak26
#define NeedSize 4380
#define NeedInstallSize 7890
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
DefaultGroupName=MyApp

[CustomMessages]
TotalSpace=Всего места на диске:
FreeSpace=Доступно места на диске:
InstallSpace=Требуется места для установки:
NeedSpace=Требуется места на диске:

Код:
var
  TotalSpaceLabel, FreeSpaceLabel, NeedSpacelabel, InstallSpaceLabel: TLabel;
  FreeMB, TotalMB: Cardinal;

function NumToStr(Float: Extended): String;
begin
  Result:= format('%.2n', [Float]); StringChange(Result, ',', '.');
  while (Result[Length(Result)] = '0')or((Result[Length(Result)] = '.')and(Pos('.', Result) > 0)) do
    SetLength(Result, Length(Result)-1);
end;

function MbOrTb(Float: Extended): String;
begin
  if Float < 1024 then Result:= NumToStr(Float)+' Мб' else
    if Float/1024 < 1024 then Result:= NumToStr(Float/1024)+' Гб' else
      Result:= NumToStr(Float/(1024*1024))+' Тб';
end;

procedure DirEditOnChange(Sender: TObject);
var Drive: String;
begin
  Drive:= ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Drive, True, FreeMB, TotalMB);
  TotalSpaceLabel.Caption:= ExpandConstant('{cm:TotalSpace} ')+MbOrTb(TotalMB);
  FreeSpaceLabel.Caption:= ExpandConstant('{cm:FreeSpace} ')+MbOrTb(FreeMB)+' ('+IntToStr(round(FreeMB*100/TotalMB))+'%)';
  InstallSpacelabel.Caption:= ExpandConstant('{cm:InstallSpace} ')+MbOrTb({#NeedInstallSize});
  NeedSpaceLabel.Caption:= ExpandConstant('{cm:NeedSpace} ')+MbOrTb({#NeedSize});
  WizardForm.NextButton.Enabled:= (FreeMB>{#NeedInstallSize})and(FreeMB>{#NeedSize})  ;
end;

procedure InitializeWizard();
begin
  TotalSpaceLabel:= TLabel.Create(WizardForm);
  TotalSpaceLabel.AutoSize:= False;
  TotalSpaceLabel.SetBounds(0, 120, 300, 20);
  TotalSpaceLabel.Parent:= WizardForm.SelectDirpage;

  FreeSpaceLabel:= TLabel.Create(WizardForm);
  FreeSpaceLabel.AutoSize:= False;
  FreeSpaceLabel.SetBounds(0, 140, 300, 20);
  FreeSpaceLabel.Parent:= WizardForm.SelectDirpage;

  InstallSpacelabel:= TLabel.Create(WizardForm);
  InstallSpacelabel.AutoSize:= False;
  InstallSpacelabel.SetBounds(0, 160, 300, 20);
  InstallSpacelabel.Parent:= WizardForm.SelectDirpage;

  NeedSpaceLabel:= TLabel.Create(WizardForm);
  NeedSpaceLabel.AutoSize:= False;
  NeedSpaceLabel.SetBounds(0, 180, 300, 20);
  NeedSpaceLabel.Parent:= WizardForm.SelectDirpage;

  WizardForm.DirEdit.OnChange:=@DirEditOnChange;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectDir then begin
    DirEditOnChange(nil)
  end;
end;[/SPOILER]

[SPOILER="как убрать выделенную надпись на странице готовности:"]procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectDir then begin
    DirEditOnChange(nil)
  end;
  if CurPageID=wpReady then begin
  WizardForm.ReadyMemo.Lines.Delete(3); вот удалает надпись на 3 строчке
  WizardForm.ReadyMemo.Lines.Delete(3);
  WizardForm.ReadyMemo.Lines.Delete(3);
end;
end;[/SPOILER]
 
Последнее редактирование:
vint56, Большое спасибо. Выручили. Теперь последнее, что меня беспокоит. Вот вы дали код для вставки Custom Message. Там еще нужно мне заменить Мб и Гб. Я попытался сделать по аналогии, но ругается на неправильный синтаксис.
 
Tolyak26
#define NeedSize 438
#define NeedInstallSize 789

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
DefaultGroupName=MyApp


[Components]
Name: "Backup"; Description: "Сохранить резервные копии файлов"

[Types]
Name: "Backup"; Description: "Выборочная установка"; Flags: iscustom


[CustomMessages]
TotalSpace=Всего места на диске:
FreeSpace=Доступно места на диске:
InstallSpace=Требуется места для установки:
NeedSpace=Требуется места на диске:
Mb=Мб
Gb=Гб

Код:
var
  TotalSpaceLabel, FreeSpaceLabel, NeedSpacelabel, InstallSpaceLabel: TLabel;
  FreeMB, TotalMB: Cardinal;

function NumToStr(Float: Extended): String;
begin
  Result:= format('%.2n', [Float]); StringChange(Result, ',', '.');
  while (Result[Length(Result)] = '0')or((Result[Length(Result)] = '.')and(Pos('.', Result) > 0)) do
    SetLength(Result, Length(Result)-1);
end;

function MbOrTb(Float: Extended): String;
begin
  if Float < 1024 then Result:= NumToStr(Float)+ ExpandConstant(' {cm:Mb}') else
    if Float/1024 < 1024 then Result:= NumToStr(Float/1024)+ ExpandConstant(' {cm:Gb}') else
      Result:= NumToStr(Float/(1024*1024))+' Тб';
end;

procedure DirEditOnChange(Sender: TObject);
var Drive: String;
begin
  Drive:= ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Drive, True, FreeMB, TotalMB);
  TotalSpaceLabel.Caption:= ExpandConstant('{cm:TotalSpace} ')+MbOrTb(TotalMB);
  FreeSpaceLabel.Caption:= ExpandConstant('{cm:FreeSpace} ')+MbOrTb(FreeMB)+' ('+IntToStr(round(FreeMB*100/TotalMB))+'%)';
  InstallSpacelabel.Caption:= ExpandConstant('{cm:InstallSpace} ')+MbOrTb({#NeedInstallSize});
  NeedSpaceLabel.Caption:= ExpandConstant('{cm:NeedSpace} ')+MbOrTb({#NeedSize});
  WizardForm.NextButton.Enabled:= (FreeMB>{#NeedInstallSize})and(FreeMB>{#NeedSize})  ;
end;

procedure InitializeWizard();
begin
  TotalSpaceLabel:= TLabel.Create(WizardForm);
  TotalSpaceLabel.AutoSize:= False;
  TotalSpaceLabel.SetBounds(0, 120, 300, 20);
  TotalSpaceLabel.Parent:= WizardForm.SelectDirpage;

  FreeSpaceLabel:= TLabel.Create(WizardForm);
  FreeSpaceLabel.AutoSize:= False;
  FreeSpaceLabel.SetBounds(0, 140, 300, 20);
  FreeSpaceLabel.Parent:= WizardForm.SelectDirpage;

  InstallSpacelabel:= TLabel.Create(WizardForm);
  InstallSpacelabel.AutoSize:= False;
  InstallSpacelabel.SetBounds(0, 160, 300, 20);
  InstallSpacelabel.Parent:= WizardForm.SelectDirpage;

  NeedSpaceLabel:= TLabel.Create(WizardForm);
  NeedSpaceLabel.AutoSize:= False;
  NeedSpaceLabel.SetBounds(0, 180, 300, 20);
  NeedSpaceLabel.Parent:= WizardForm.SelectDirpage;

  WizardForm.DirEdit.OnChange:=@DirEditOnChange;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectDir then begin
    DirEditOnChange(nil)
  end;
  if CurPageID=wpReady then begin
  WizardForm.ReadyMemo.Lines.Delete(3);
  WizardForm.ReadyMemo.Lines.Delete(3);
  WizardForm.ReadyMemo.Lines.Delete(3);
end;
end;[/SPOILER]
 
DICI BF, с библиотекой есть примеры. А лучше прочитай что на рубоарде ответил. Поверь,ботва лучше. Т.к. фейри предназначена для анимации .gif и там ёще че-то. Но не как под это она не заточена,хоть и поддерживает .png .
 
Я знаю что ботва гораздо лучше, Пока на неё не перехожу из за отсутствия опыта
Есть ещё вопрос можно ли заменить сообщение после деинсталляции
 
DICI BF, какого опыта? Он не нужен. Примеры и сам модуль хороший фак. Сообщение можно конечно сделать. Только это геморройно.
_____
nik1967, точно. Не подумал.
 
Последнее редактирование:
Есть ещё вопрос можно ли заменить сообщение после деинсталляции
Сообщение можно конечно сделать. Только это геморройно.
Если сделать самому - то да, гемморно.
[SOURCE="inno"][Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

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

[Messages]
UninstalledAll=Ну и нахрена удалил?[/SOURCE]
 
Выбор языков в инсталляторе

Привет всем. Попрошу Вас написать сюда несколько способов добавления в инсталлятор выбора языков с подробным описанием как их использовать. Заранее спасибо:)
 
LMFAO лишние языки убереш
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"
Name: "basque"; MessagesFile: "compiler:Languages\Basque.isl"
Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"
Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl"
Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl"
Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl"
Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl"
Name: "french"; MessagesFile: "compiler:Languages\French.isl"
Name: "german"; MessagesFile: "compiler:Languages\German.isl"
Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl"
Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl"
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl"
Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "serbiancyrillic"; MessagesFile: "compiler:Languages\SerbianCyrillic.isl"
Name: "serbianlatin"; MessagesFile: "compiler:Languages\SerbianLatin.isl"
Name: "slovak"; MessagesFile: "compiler:Languages\Slovak.isl"
Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl"
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl"
 
LMFAO лишние языки убереш
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"
Name: "basque"; MessagesFile: "compiler:Languages\Basque.isl"
Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"
Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl"
Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl"
Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl"
Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl"
Name: "french"; MessagesFile: "compiler:Languages\French.isl"
Name: "german"; MessagesFile: "compiler:Languages\German.isl"
Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl"
Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl"
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl"
Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "serbiancyrillic"; MessagesFile: "compiler:Languages\SerbianCyrillic.isl"
Name: "serbianlatin"; MessagesFile: "compiler:Languages\SerbianLatin.isl"
Name: "slovak"; MessagesFile: "compiler:Languages\Slovak.isl"
Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl"
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl"

Можешь мне дать свой скрипт, я просто не знаю что и где прописать, чтобы оно распаковывало тот язык, который выбрал
 
LMFAO если честно я не понял тебя ты просил добавить свой языки я дал тебе пример но это все делает в inno setup там есть мастер установки там можеш дайти до языков и выберещ какие тебе нужны
 
LMFAO если честно я не понял тебя ты просил добавить свой языки я дал тебе пример но это все делает в inno setup там есть мастер установки там можеш дайти до языков и выберещ какие тебе нужны
Ты меня не понял. Мне нужно вот что
b92a599fe46a2bd9a17182d9c6f59e0d.jpg
 
LMFAO
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive;
Name: text\eng; Description: Английский; Flags: exclusive;
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive;
Name: voice\eng; Description: Английский; Flags: exclusive;
 
LMFAO
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive;
Name: text\eng; Description: Английский; Flags: exclusive;
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive;
Name: voice\eng; Description: Английский; Flags: exclusive;

Это знаю, но есть несколько способов распаковки, я хочу знать какие, и подробное описание использования
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху