Вопрос компоненты

artemabu

Новичок
как убрать количество мегабайт


и заодно вопрос как сделать так чтобы допустим у меня две игры я хочу чтобы при выборе компонента распаковывалась определеный .arc Архив допустим the sims 2 the sims 3 the sims 4
Скачать файлы можно по ссылке: https://cloud.mail.ru/public/E9dy/bwAhVkgfN
 

Nemko

Дилетант
Модератор
artemabu, почитайте справку к IS Done, подробная и достоверная информации там, на все вопросы есть ответы. А так этот пост вкратце разъясняет принцип.
 

Nemko

Дилетант
Модератор
помогите плис как убрать мегабайты
artemabu, как понимать убрать мегабайты?
Если скрыть TLabel с именем ComponentsDiskSpaceLabel:
Код:
WizardForm.ComponentsDiskSpaceLabel.Hide;
А если нужно изменить единицу измерения (например только Гб), то:
Код:
// 1048576 = 1 mb (если число больше 2047 то MbSize не работает. ограничение integer)
// тогда прописывать вручную
#define MbSize(x) x*1048576

//===== [Место для установки] =====\\:
#define NeedSize "512"

[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}
//ShowComponentSizes=no
//DirExistsWarning=no
OutputDir=.

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

[Components]
Name: Mode; Description: mode; Types: custom; flags: fixed
Name: Mode/SPOnly; Description: SPOnly; ExtraDiskSpaceRequired: {#MbSize(100)};  Types: full; Flags: disablenouninstallwarning
Name: Mode2; Description: mode2; Types: custom; flags: fixed
Name: Mode2/SPOnly2; Description: SPOnly2; ExtraDiskSpaceRequired: {#MbSize(101)}; Flags: disablenouninstallwarning
Name: Mode2/MPOnly2; Description: MPOnly2; ExtraDiskSpaceRequired: {#MbSize(524)}; Flags: disablenouninstallwarning

[Files]
//Source: Arc.exe; DestDir: {tmp}; Flags: dontcopy

[Code]
var
  Label1: TLabel;
  OldEvent_ComponentsListClickCheck: TNotifyEvent;
  DsE,SSize: Extended;

function GetFloatFormText(const UndefText: String): Extended;
var
  i: Integer;
  ss: string;
begin
  for i := 1 to Length(UndefText) do
  case UndefText[i] of
    '0','1','2','3','4','5','6','7','8','9': ss := ss + UndefText[i];
    ',': ss := ss + '.';
  end;
  Result:= StrToFloat(ss);
end;

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 < 1024 then Result:= NumToStr(Float/1024)+' Гб';
end;

procedure DiskSpaceLabel(Sender: TObject);
begin
  OldEvent_ComponentsListClickCheck(Sender);
  DsE:= GetFloatFormText(WizardForm.ComponentsDiskSpaceLabel.Caption)+{#NeedSize}+SSize;
  Label1.Caption:= 'Текущий выбор требует не менее '+MbOrTb(DsE)+' на диске.';
end;

procedure InitializeWizard;
var
  i: Integer;
  k: Array [0..99] of Boolean; // массив на 100 эл-ов
begin
  OldEvent_ComponentsListClickCheck := WizardForm.ComponentsList.OnClickCheck;
for i:=0 to WizardForm.ComponentsList.ItemCount-1 do
if WizardForm.ComponentsList.Checked[i] then
  k[i]:= True;
for i:=0 to WizardForm.ComponentsList.ItemCount-1 do
  WizardForm.ComponentsList.Checked[i]:= False;
  WizardForm.ComponentsList.OnClickCheck(nil);
  SSize:= GetFloatFormText(WizardForm.DiskSpaceLabel.Caption)-GetFloatFormText(WizardForm.ComponentsDiskSpaceLabel.Caption);
for i:=0 to WizardForm.ComponentsList.ItemCount-1 do
  WizardForm.ComponentsList.Checked[i]:= k[i];
  OldEvent_ComponentsListClickCheck(nil);
  DsE:= GetFloatFormText(WizardForm.ComponentsDiskSpaceLabel.Caption)+{#NeedSize}+SSize;
//
Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Parent := WizardForm.ComponentsDiskSpaceLabel.Parent;
    Caption:= 'Текущий выбор требует не менее '+MbOrTb(DsE)+' на диске.';
    SetBounds(WizardForm.ComponentsDiskSpaceLabel.Left, WizardForm.ComponentsDiskSpaceLabel.Top, WizardForm.ComponentsDiskSpaceLabel.Width, WizardForm.ComponentsDiskSpaceLabel.Height);
    Font.Color:= clBlue;
    Transparent:= True;
  end;
  WizardForm.ComponentsList.OnClickCheck:= @DiskSpaceLabel;
  WizardForm.ComponentsDiskSpaceLabel.Hide;
  WizardForm.DiskSpaceLabel.Hide;
end;
 

artemabu

Новичок
artemabu, как понимать убрать мегабайты?
Если скрыть TLabel с именем ComponentsDiskSpaceLabel:
Код:
WizardForm.ComponentsDiskSpaceLabel.Hide;
А если нужно изменить единицу измерения (например только Гб), то:
Код:
// 1048576 = 1 mb (если число больше 2047 то MbSize не работает. ограничение integer)
// тогда прописывать вручную
#define MbSize(x) x*1048576

//===== [Место для установки] =====\\:
#define NeedSize "512"

[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}
//ShowComponentSizes=no
//DirExistsWarning=no
OutputDir=.

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

[Components]
Name: Mode; Description: mode; Types: custom; flags: fixed
Name: Mode/SPOnly; Description: SPOnly; ExtraDiskSpaceRequired: {#MbSize(100)};  Types: full; Flags: disablenouninstallwarning
Name: Mode2; Description: mode2; Types: custom; flags: fixed
Name: Mode2/SPOnly2; Description: SPOnly2; ExtraDiskSpaceRequired: {#MbSize(101)}; Flags: disablenouninstallwarning
Name: Mode2/MPOnly2; Description: MPOnly2; ExtraDiskSpaceRequired: {#MbSize(524)}; Flags: disablenouninstallwarning

[Files]
//Source: Arc.exe; DestDir: {tmp}; Flags: dontcopy

[Code]
var
  Label1: TLabel;
  OldEvent_ComponentsListClickCheck: TNotifyEvent;
  DsE,SSize: Extended;

function GetFloatFormText(const UndefText: String): Extended;
var
  i: Integer;
  ss: string;
begin
  for i := 1 to Length(UndefText) do
  case UndefText[i] of
    '0','1','2','3','4','5','6','7','8','9': ss := ss + UndefText[i];
    ',': ss := ss + '.';
  end;
  Result:= StrToFloat(ss);
end;

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 < 1024 then Result:= NumToStr(Float/1024)+' Гб';
end;

procedure DiskSpaceLabel(Sender: TObject);
begin
  OldEvent_ComponentsListClickCheck(Sender);
  DsE:= GetFloatFormText(WizardForm.ComponentsDiskSpaceLabel.Caption)+{#NeedSize}+SSize;
  Label1.Caption:= 'Текущий выбор требует не менее '+MbOrTb(DsE)+' на диске.';
end;

procedure InitializeWizard;
var
  i: Integer;
  k: Array [0..99] of Boolean; // массив на 100 эл-ов
begin
  OldEvent_ComponentsListClickCheck := WizardForm.ComponentsList.OnClickCheck;
for i:=0 to WizardForm.ComponentsList.ItemCount-1 do
if WizardForm.ComponentsList.Checked[i] then
  k[i]:= True;
for i:=0 to WizardForm.ComponentsList.ItemCount-1 do
  WizardForm.ComponentsList.Checked[i]:= False;
  WizardForm.ComponentsList.OnClickCheck(nil);
  SSize:= GetFloatFormText(WizardForm.DiskSpaceLabel.Caption)-GetFloatFormText(WizardForm.ComponentsDiskSpaceLabel.Caption);
for i:=0 to WizardForm.ComponentsList.ItemCount-1 do
  WizardForm.ComponentsList.Checked[i]:= k[i];
  OldEvent_ComponentsListClickCheck(nil);
  DsE:= GetFloatFormText(WizardForm.ComponentsDiskSpaceLabel.Caption)+{#NeedSize}+SSize;
//
Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Parent := WizardForm.ComponentsDiskSpaceLabel.Parent;
    Caption:= 'Текущий выбор требует не менее '+MbOrTb(DsE)+' на диске.';
    SetBounds(WizardForm.ComponentsDiskSpaceLabel.Left, WizardForm.ComponentsDiskSpaceLabel.Top, WizardForm.ComponentsDiskSpaceLabel.Width, WizardForm.ComponentsDiskSpaceLabel.Height);
    Font.Color:= clBlue;
    Transparent:= True;
  end;
  WizardForm.ComponentsList.OnClickCheck:= @DiskSpaceLabel;
  WizardForm.ComponentsDiskSpaceLabel.Hide;
  WizardForm.DiskSpaceLabel.Hide;
end;
как сделать так что определенные галочки уже стояли например русский
 

Nemko

Дилетант
Модератор
как сделать так что определенные галочки уже стояли например русский
artemabu, Flags: "Exclusive" для обоих компонентов.
и как сделать проверку диска на определенный компонент
artemabu, если проверку на свободного места, а если нет то не ясен смысл.

P.S.: Прежде чем задать вопрос, попробуйте найти решение сами, а то в справке по Inno Setup все это есть, в определенных главах.
 

artemabu

Новичок
artemabu, Flags: "Exclusive" для обоих компонентов.

artemabu, если проверку на свободного места, а если нет то не ясен смысл.

P.S.: Прежде чем задать вопрос, попробуйте найти решение сами, а то в справке по Inno Setup все это есть, в определенных главах.
решил заняться разбивкой скрипта на модули

Скачать файлы можно по ссылке: https://cloud.mail.ru/public/RbAL/Tn5rCjdTj
 

Nemko

Дилетант
Модератор
artemabu, ошибка в том что вызываемая процедура должна быть прописана раньше чем присваивается. Исключением является тот случай, если была задействована директива forward (но и тогда, процедура прописывается в начале кода). Проще говоря, нужно либо переместить процедуру CancelButtonOnClick раньше чем присваивается, либо добавить строку (procedure CancelButtonOnClick(Sender: TObject); forward) в начало модуля isdone.iss.
 

artemabu

Новичок
artemabu, ошибка в том что вызываемая процедура должна быть прописана раньше чем присваивается. Исключением является тот случай, если была задействована директива forward (но и тогда, процедура прописывается в начале кода). Проще говоря, нужно либо переместить процедуру CancelButtonOnClick раньше чем присваивается, либо добавить строку (procedure CancelButtonOnClick(Sender: TObject); forward) в начало модуля isdone.iss.
и последнее как присвоить registry.ss к определенному компоненту допустим у меня две игры в одном или несколько
 

Nemko

Дилетант
Модератор
и последнее как присвоить registry.ss к определенному компоненту допустим у меня две игры в одном или несколько
artemabu, ИМХО через параметр Components в самой секции (но это не точно). Например:
Код:
Components: text\rus;
решил заняться разбивкой скрипта на модули
Внизу пример, как по мне будет правильнее, с botva и без мусора:
 

Вложения

artemabu

Новичок
artemabu, ИМХО через параметр Components в самой секции (но это не точно). Например:
Код:
Components: text\rus;
Внизу пример, как по мне будет правильнее, с botva и без мусора:
то-есть примерно так или я чего не понимаю
Код:
Components: text\rus; registry1.iss 
Components: text\rus; registry2.iss
 

artemabu

Новичок
sergey3695
создать секцию rum
Можно намного проще
Код:
[Run]
Filename: {win}\regedit.exe; Parameters: /s {tmp}\рег.reg; StatusMsg: "Вносим изменения в реестр ..."; Flags: waituntilterminated runasoriginaluser; Components: g0
Filename: {win}\regedit.exe; Parameters: /s {tmp}\рег.reg; StatusMsg: "Вносим изменения в реестр ..."; Flags: waituntilterminated runasoriginaluser; Components: g1
 
Сверху