Вопрос Нужна помощь

Rexar

Новичок
Как можно запаковать игру одним файлом ,допусти так, setup.exe 2 520 кб а setup-1.bin 14 500 560 кб ,как можно так сделать?помогите пожалуйста.
 

vint56

Ветеран
Проверенный
Rexar, все файлы пожать фриарком а для распаковки использовать isdone
 

Rexar

Новичок
Rexar, все файлы пожать фриарком а для распаковки использовать isdone
А я думал это какое-то специальное расширение для inno setup , я так понял это единственный способ,других программ которые могут упаковать в один файл ресурсы игры,не существует,да?
 

vint56

Ветеран
Проверенный
Rexar, почему 7zip winrar поменять расширения на bin
 

Rexar

Новичок
Rexar, почему 7zip winrar поменять расширения на bin
Так они и сутупник такого же размера как и файл делают и виндовс его открыть не может,так как размер сетупа большой.

И еще,кто подскажет,как сделать слева внизу надпись в инсталляторе,не кликальную и с любым цветом.
 

vint56

Ветеран
Проверенный
Rexar, ты с начало определись какими средствами ты будешь сжимать данные средствами inno setup или с помощью фриарка
 

Rexar

Новичок
Rexar, ты с начало определись какими средствами ты будешь сжимать данные средствами inno setup или с помощью фриарка
та я буду через inno setup разбивать по 2 гига.
Еще вопрос,подскажи как сделать чтобы установщик,мог выбирать между русским и английским языком и что бы надписи
Done, Elapsed, Remaining (это инфа в установщике,сколько готово процентов,сколько прошло и осталось времени) были на том языке,на каком и сам установщик и что бы при заходе в игру был тот язык,который выбирался в установщике,игра к реестру не привязана .
Заранее спасибо.
 

vint56

Ветеран
Проверенный
Rexar,
#define NeedInstallSize 100
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
Compression=none

[Languages]
Name: "eng"; MessagesFile: "compiler:Default.isl"
Name: "spa"; MessagesFile: "compiler:Languages\Spanish.isl"

[CustomMessages]
eng.Finished=The installation is completed.
spa.Finished=La instalación se ha completado.

eng.TotalSpaceLabel=Total disk space:
eng.FreeSpaceLabel=Available disk space:
eng.InstallSpacelabel=Required space for installation:
eng.Percent=Done:
eng.Elapsed=Elapsed:
eng.Remaining=Remaining:

spa.TotalSpaceLabel=Espacio total en disco:
spa.FreeSpaceLabel=Espacio disponible:
spa.InstallSpacelabel=Espacio necesario para la instalación:
spa.Percent=Hecho:
spa.Elapsed=Transcurrido:
spa.Remaining=Restante:

[Files]
Source: "C:\Program Files (x86)\ACD Systems\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; AfterInstall: ExtLog();

Код:
var
  ProgressLabel: TLabel;

procedure ExtLog();
begin
  with WizardForm.ProgressGauge do begin
  ProgressLabel.Caption:=IntToStr((Position-Min)/((Max - Min)/100)) + '%'
  if (Position-Min)/((Max - Min)/100) > 50 then ProgressLabel.Font.Color:= clWhite
  end
end;

procedure Progress;
begin
  ProgressLabel:=TLabel.Create(WizardForm)
  ProgressLabel.Top:= 4
  ProgressLabel.Left:= 200
  ProgressLabel.Caption:= '0%'
  ProgressLabel.AutoSize:= True
  ProgressLabel.Font.Color:= clBlue
  ProgressLabel.Font.Style:= [fsBold]
  ProgressLabel.Transparent:= True
  ProgressLabel.Parent:= WizardForm.ProgressGauge
end;

var
  TotalSpaceLabel, FreeSpaceLabel, 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(Byte: Extended): String;
begin
if Byte < 1024 then Result:= NumToStr(Byte) + ' Mb' else
  if Byte/1024 < 1024 then Result:= NumToStr(round(Byte/1024*100)/100) + ' Gb' else
  Result:= NumToStr(round((Byte/(1024*1024))*100)/100) + ' Tb'
end;

procedure DirEditOnChange(Sender: TObject);
var Drive: String;
begin
  Drive:= ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Drive, True, FreeMB, TotalMB);
  TotalSpaceLabel.Caption:= ExpandConstant('{cm:TotalSpaceLabel} ')+MbOrTb(TotalMB);
  FreeSpaceLabel.Caption:= ExpandConstant('{cm:FreeSpaceLabel} ')+MbOrTb(FreeMB)+' ('+IntToStr(round(FreeMB*100/TotalMB))+'%)';
  InstallSpacelabel.Caption:= ExpandConstant('{cm:InstallSpacelabel} ')+MbOrTb({#NeedInstallSize});
  if (FreeMB<{#NeedInstallSize}) then
  InstallSpacelabel.Font.Color:=clRed
  else
  InstallSpacelabel.Font.Color:=InstallSpacelabel.Font.Color;
  WizardForm.NextButton.Enabled:= (FreeMB>{#NeedInstallSize})
end;

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

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

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

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

function GetTickCount: DWORD;
  external 'GetTickCount@kernel32.dll stdcall';

var
  StartTick: DWORD;
  PercentLabel: TNewStaticText;
  ElapsedLabel: TNewStaticText;
  RemainingLabel: TNewStaticText;

function TicksToStr(Value: DWORD): string;
var
  I: DWORD;
  Hours, Minutes, Seconds: Integer;
begin
  I := Value div 1000;
  Seconds := I mod 60;
  I := I div 60;
  Minutes := I mod 60;
  I := I div 60;
  Hours := I mod 24;
  Result := Format('%.2d:%.2d:%.2d', [Hours, Minutes, Seconds]);
end;

procedure InitializeWizard;
begin
  TotalSpace;
  PercentLabel := TNewStaticText.Create(WizardForm);
  PercentLabel.Parent := WizardForm.ProgressGauge.Parent;
  PercentLabel.Left := 0;
  PercentLabel.Top := WizardForm.ProgressGauge.Top +
    WizardForm.ProgressGauge.Height + 12;

  ElapsedLabel := TNewStaticText.Create(WizardForm);
  ElapsedLabel.Parent := WizardForm.ProgressGauge.Parent;
  ElapsedLabel.Left := 0;
  ElapsedLabel.Top := PercentLabel.Top + PercentLabel.Height + 4;

  RemainingLabel := TNewStaticText.Create(WizardForm);
  RemainingLabel.Parent := WizardForm.ProgressGauge.Parent;
  RemainingLabel.Left := 0;
  RemainingLabel.Top := ElapsedLabel.Top + ElapsedLabel.Height + 4;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectDir then begin
  DirEditOnChange(nil)
  if CurPageID = wpInstalling then
  StartTick := GetTickCount;
  end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if CurPageID = wpInstalling then
  begin
    Cancel := False;
    if ExitSetupMsgBox then
    begin
      Cancel := True;
      Confirm := False;
      PercentLabel.Visible := False;
      ElapsedLabel.Visible := False;
      RemainingLabel.Visible := False;
    end;
  end;
end;

procedure CurInstallProgressChanged(CurProgress, MaxProgress: Integer);
var
  CurTick: DWORD;
begin
  CurTick := GetTickCount;
  PercentLabel.Caption :=Format(ExpandConstant('{cm:Percent} ') + '%.2f %%' , [(CurProgress * 100.0) / MaxProgress]);
  ElapsedLabel.Caption :=Format(ExpandConstant('{cm:Elapsed} ') + '%s', [TicksToStr(CurTick - StartTick)]);
  if CurProgress > 0 then
  begin
    RemainingLabel.Caption :=Format(ExpandConstant('{cm:Remaining} ') + '%s', [TicksToStr(((CurTick - StartTick) / CurProgress) * (MaxProgress - CurProgress))]);
  end;
end;
[/SPOILER]
 

Rexar

Новичок
Rexar,
#define NeedInstallSize 100
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
Compression=none

[Languages]
Name: "eng"; MessagesFile: "compiler:Default.isl"
Name: "spa"; MessagesFile: "compiler:Languages\Spanish.isl"

[CustomMessages]
eng.Finished=The installation is completed.
spa.Finished=La instalación se ha completado.

eng.TotalSpaceLabel=Total disk space:
eng.FreeSpaceLabel=Available disk space:
eng.InstallSpacelabel=Required space for installation:
eng.Percent=Done:
eng.Elapsed=Elapsed:
eng.Remaining=Remaining:

spa.TotalSpaceLabel=Espacio total en disco:
spa.FreeSpaceLabel=Espacio disponible:
spa.InstallSpacelabel=Espacio necesario para la instalación:
spa.Percent=Hecho:
spa.Elapsed=Transcurrido:
spa.Remaining=Restante:

[Files]
Source: "C:\Program Files (x86)\ACD Systems\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; AfterInstall: ExtLog();

Код:
var
  ProgressLabel: TLabel;

procedure ExtLog();
begin
  with WizardForm.ProgressGauge do begin
  ProgressLabel.Caption:=IntToStr((Position-Min)/((Max - Min)/100)) + '%'
  if (Position-Min)/((Max - Min)/100) > 50 then ProgressLabel.Font.Color:= clWhite
  end
end;

procedure Progress;
begin
  ProgressLabel:=TLabel.Create(WizardForm)
  ProgressLabel.Top:= 4
  ProgressLabel.Left:= 200
  ProgressLabel.Caption:= '0%'
  ProgressLabel.AutoSize:= True
  ProgressLabel.Font.Color:= clBlue
  ProgressLabel.Font.Style:= [fsBold]
  ProgressLabel.Transparent:= True
  ProgressLabel.Parent:= WizardForm.ProgressGauge
end;

var
  TotalSpaceLabel, FreeSpaceLabel, 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(Byte: Extended): String;
begin
if Byte < 1024 then Result:= NumToStr(Byte) + ' Mb' else
  if Byte/1024 < 1024 then Result:= NumToStr(round(Byte/1024*100)/100) + ' Gb' else
  Result:= NumToStr(round((Byte/(1024*1024))*100)/100) + ' Tb'
end;

procedure DirEditOnChange(Sender: TObject);
var Drive: String;
begin
  Drive:= ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Drive, True, FreeMB, TotalMB);
  TotalSpaceLabel.Caption:= ExpandConstant('{cm:TotalSpaceLabel} ')+MbOrTb(TotalMB);
  FreeSpaceLabel.Caption:= ExpandConstant('{cm:FreeSpaceLabel} ')+MbOrTb(FreeMB)+' ('+IntToStr(round(FreeMB*100/TotalMB))+'%)';
  InstallSpacelabel.Caption:= ExpandConstant('{cm:InstallSpacelabel} ')+MbOrTb({#NeedInstallSize});
  if (FreeMB<{#NeedInstallSize}) then
  InstallSpacelabel.Font.Color:=clRed
  else
  InstallSpacelabel.Font.Color:=InstallSpacelabel.Font.Color;
  WizardForm.NextButton.Enabled:= (FreeMB>{#NeedInstallSize})
end;

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

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

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

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

function GetTickCount: DWORD;
  external 'GetTickCount@kernel32.dll stdcall';

var
  StartTick: DWORD;
  PercentLabel: TNewStaticText;
  ElapsedLabel: TNewStaticText;
  RemainingLabel: TNewStaticText;

function TicksToStr(Value: DWORD): string;
var
  I: DWORD;
  Hours, Minutes, Seconds: Integer;
begin
  I := Value div 1000;
  Seconds := I mod 60;
  I := I div 60;
  Minutes := I mod 60;
  I := I div 60;
  Hours := I mod 24;
  Result := Format('%.2d:%.2d:%.2d', [Hours, Minutes, Seconds]);
end;

procedure InitializeWizard;
begin
  TotalSpace;
  PercentLabel := TNewStaticText.Create(WizardForm);
  PercentLabel.Parent := WizardForm.ProgressGauge.Parent;
  PercentLabel.Left := 0;
  PercentLabel.Top := WizardForm.ProgressGauge.Top +
    WizardForm.ProgressGauge.Height + 12;

  ElapsedLabel := TNewStaticText.Create(WizardForm);
  ElapsedLabel.Parent := WizardForm.ProgressGauge.Parent;
  ElapsedLabel.Left := 0;
  ElapsedLabel.Top := PercentLabel.Top + PercentLabel.Height + 4;

  RemainingLabel := TNewStaticText.Create(WizardForm);
  RemainingLabel.Parent := WizardForm.ProgressGauge.Parent;
  RemainingLabel.Left := 0;
  RemainingLabel.Top := ElapsedLabel.Top + ElapsedLabel.Height + 4;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectDir then begin
  DirEditOnChange(nil)
  if CurPageID = wpInstalling then
  StartTick := GetTickCount;
  end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if CurPageID = wpInstalling then
  begin
    Cancel := False;
    if ExitSetupMsgBox then
    begin
      Cancel := True;
      Confirm := False;
      PercentLabel.Visible := False;
      ElapsedLabel.Visible := False;
      RemainingLabel.Visible := False;
    end;
  end;
end;

procedure CurInstallProgressChanged(CurProgress, MaxProgress: Integer);
var
  CurTick: DWORD;
begin
  CurTick := GetTickCount;
  PercentLabel.Caption :=Format(ExpandConstant('{cm:Percent} ') + '%.2f %%' , [(CurProgress * 100.0) / MaxProgress]);
  ElapsedLabel.Caption :=Format(ExpandConstant('{cm:Elapsed} ') + '%s', [TicksToStr(CurTick - StartTick)]);
  if CurProgress > 0 then
  begin
    RemainingLabel.Caption :=Format(ExpandConstant('{cm:Remaining} ') + '%s', [TicksToStr(((CurTick - StartTick) / CurProgress) * (MaxProgress - CurProgress))]);
  end;
end;
[/SPOILER]
Спасибо,а поповоду надписи слева в низу,можешь скинуть.
 
Сверху