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

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

LordSP

Новичок
Ребят, всем привет, у меня вот этот Скрипт на расширенной версии компилятора ANSI ничего не отображает? Можете помочь? Должны показываться проценты распаковки и размер извлекаемого файла в Байтах, КБ, Мб, Гб, Тб и т.д.
 

aLLeXUs

Участник
почему все элементы окна, даже кнопки ботвы скрываются за изображением CreateFormFromImage? В коде расположено все после CreateFormFromImage.
 

Shegorat

Lord of Madness
Администратор
почему все элементы окна, даже кнопки ботвы скрываются за изображением CreateFormFromImage? В коде расположено все после CreateFormFromImage.
В модуле ботвы же написано, что в таком Layered-окне стандартные объекты не будут отрисовываться. Потому что там используется немного другой принцип отображения формы.
Вариант конечно есть, я не спорю, но он довольно трудоемкий и его реализация пока доступна ограниченному кругу лиц. Результат можно увидеть в инсталлах Witcher 2 (репак R.G. Revenants) и Final Fantasy (репак Heuron).
Для остальных же доступен вариант создания региона окна и дополнительной спрайт-формы по png, как в скрипте Starcraft 2, к примеру.

Ребят, всем привет, у меня вот этот Скрипт на расширенной версии компилятора ANSI ничего не отображает? Можете помочь? Должны показываться проценты распаковки и размер извлекаемого файла в Байтах, КБ, Мб, Гб, Тб и т.д.
Я извиняюсь, но ты делал привязку процедуры Progress к файлам в секции Files? Или просто скопировал пример в свой скрипт?
 

Shegorat

Lord of Madness
Администратор
Shegorat, Я просто скопировал , скажите, а как привязать?
Ну например
Код:
[noparse][Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[Files]
Source: D:\testfiles\*; DestDir: {app}; AfterInstall: Progress; Flags: recursesubdirs createallsubdirs;

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

[CustomMessages]
ru.Bt=Бт
ru.Kb=Кб
ru.Mb=Мб
ru.Gb=Гб
ru.Tb=Тб
ru.Pb=Пб
ru.Eb=Эб

[Code]
var
  ProgressLabel, SizeLabel: TLabel;

function BytesToReadable(Bytes: Extended; Signs: Integer): string;
{ Перевод числа в значение Бт/Кб/Мб/Гб/Тб/Пб/Эб (Signs - количество знаков после запятой)}
var
  ABytes: Extended;
  i: Integer;
begin
  i := 0;
  ABytes := Bytes;
  while Int(ABytes) >= 1024 do
    begin
      ABytes := ABytes/1024;
      i := i + 1;
    end;
  case i of
    0: Result := FloatToStr(Int(ABytes)) + Padl(ExpandConstant('{cm:Bt}'), 1);                // Байт
    1: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Kb}'), [ABytes]); // Килобайт
    2: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Mb}'), [ABytes]); // Мегабайт
    3: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Gb}'), [ABytes]); // Гигабайт
    4: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Tb}'), [ABytes]); // Терабайт
    // больше Терабайта конечно не пригодится, покрайней мере в ближайшее время, но всё же...
    5: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Pb}'), [ABytes]); // Петабайт
    6: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Eb}'), [ABytes]); // Эксабайт
  end;
	StringChange(Result, ',', '.');
end;

function Size64(Hi, Lo: Integer): Extended;
begin
  Result := Lo;
  if Lo < 0 then
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
  for Hi := Hi - 1 downto 0 do
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
end;

function GetFileSize(const FileName: string): Extended;
var
  FindRec: TFindRec;
begin
  Result := 0;
  if FindFirst(FileName, FindRec) then
    try
      if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
        Result := Size64(FindRec.SizeHigh, FindRec.SizeLow);
    finally
      FindClose(FindRec);
    end;
end;

procedure Progress();
begin
  with WizardForm.ProgressGauge do
    ProgressLabel.Caption := IntToStr((Position-Min)/((Max - Min)/100)) + '%';
  SizeLabel.Caption := BytesToReadable(GetFileSize(ExpandConstant(CurrentFileName)), 1);
end;

procedure InitializeWizard();
begin
  ProgressLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      ProgressLabel.Top := Top + Height + ScaleY(8);
      ProgressLabel.Left := Left + Width/2 - ScaleX(8);
      ProgressLabel.Width:= 200;
      ProgressLabel.Height:= 20;
      ProgressLabel.AutoSize := False;
      ProgressLabel.Parent := WizardForm.InstallingPage;
    end;

  SizeLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      SizeLabel.Top := Top + Height + ScaleY(8);
      SizeLabel.Left := Left;
      SizeLabel.Width:= 200;
      SizeLabel.Height:= 20;
      SizeLabel.AutoSize := False;
      SizeLabel.Parent := WizardForm.InstallingPage;
    end;
end;[/noparse]
Работает только для файлов извлекаемых из инсталлятора.
 

Wanterlude

Мимокрокодил
Люди подскажите как убрать надпись "Тестовый прогон" и чтоб показывало сколько осталось, а то не понимаю(
 

ilzok17

Новичок
Люди подскажите как убрать надпись "Тестовый прогон" и чтоб показывало сколько осталось, а то не понимаю(
После тестового прогона,из папки с инсталлятором и архивами файл records.inf(который там появится) надо переместить в папку со скриптом и в самом скрипте расскоментировать #define records,и ещё раз скомпилировать инсталлятор.
 

dark_fen1x

Мимокрокодил
Можно ли как-то сделать выбор чекбокса через проверку ключа реестра(если отсутствует ключ то выбрать чекбокс)
 

Mailchik

Старожил
Проверенный
dark_fen1x,
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[B][[/B]Code]
var
 TestCheckBox : TCheckBox;

procedure InitializeWizard;
 begin
  TestCheckBox := TCheckBox.Create(WizardForm);
  with TestCheckBox do begin
   Parent := WizardForm.WelcomePage;
   Caption := 'TestCheckBox';
   Checked := not RegKeyExists(HKEY_CURRENT_USER, 'Software\Jordan Russell\Inno Setup');
   SetBounds(WizardForm.WizardBitmapImage.Width + ScaleX(10), WizardForm.Bevel.Top - ScaleY(30), Width, Height);
  end;
end;
Нужная вам строчка: Checked := not RegKeyExists(HKEY_CURRENT_USER, 'Software\Jordan Russell\Inno Setup');
Отмечен, если ключ отсутствует.
 

aLLeXUs

Участник
Подскажите, есть ли какие-нибудь аналоги InnoTools Downloader (библиотека для скачивания файлов)? Либо скажите, как в нем можно сделать отображение информации о скачке отдельно на другой форме (получить информацию о скорости, размере...), а то в библиотеке реализована только вставка своей страницы после указанной.
 
Последнее редактирование:

LordSP

Новичок
aLLeXUs, Вы теперь на каждом форуме будете этот вопрос задавать?

По поводу вопроса, аналогов насколько я знаю, пока не существует.
 
Последнее редактирование:

aLLeXUs

Участник
LordSP, что? Покажите мне хоть один форум, где я этот вопрос задавал...
 

LexBell

Борода
Супер модератор
aLLeXUs, в модуле procedure ITD_NowDoDownload(sender: TWizardPage);
заменить TWizardPage на форму ну и так по мелочи. для дельфи программиста это должно было быть очевидным, как мне кажется.

аналогов насколько я знаю, пока не существует
есть еще isxdl.dll, доступна даже в исходниках - где-то видел на сайте инно ссылку.

Добавлено через 1 час 1 минуту
2ALL причесал чуток шапку, с учетом последних изменений. Русик сделан по моей просьбе давишней, возможно нужно еще потестировать, о чем сам автор просит тут. Для расширенной версии тоже будет русик от него-же, отдельно у нас была договоренность его не выкладывать, присутствует в моей сборке, так-же китайцы добавили русик от предыдущего автора локализаций Inno, так что отдельно его выкладывать больше нет смысла.
 
Последнее редактирование:

aLLeXUs

Участник
Gnom,
в модуле procedure ITD_NowDoDownload(sender: TWizardPage);
заменить TWizardPage на форму ну и так по мелочи
Посмотрел поверхностно, скорость, размер не нашел. Попробую isxdl.dll.

для дельфи программиста это должно было быть очевидным, как мне кажется.
К сожалению, я не дельфи программист:(
[MOD="Gnom"]Эмм...
Прошел курс Pascal и C++.
Как-бы я думал, что ты и правда знаешь паскаль. Буду знать, что пройти курс обучения языку и знать его в результате обучения - совсем не одно и тоже.[/MOD]

P.S.
Попробовал использовать isxdl.dll, и понял что у него даже меньший функционал, чем у InnoTools Downloader, и размер побольше, значит нету смысла его использовать.
 
Последнее редактирование модератором:

LordSP

Новичок
Все привет, есть вопрос: в расширенной версии Inno Setup есть пункт под названием "инструмент подписания сертификатом", так вот, знаю что нужно приобрести/купить сертификат, но все же как работает данное меню, и какие команды там вводить? Вероятно что через SignTool.exe, но все равно не ясно, что куда прописывается...
 

LexBell

Борода
Супер модератор
LordSP, чего там неясного-то? всеж в виде мастера пошагово - сперва имя купленого сертификата, потом команду. как работаею подпись - можно у гугла спросить, он по любому знает, а добавить - как уже сказано - даже безрукий сможет, при его наличии.
 

LordSP

Новичок
Gnom, Где все файлы, и сертификат должны лежать? Рядом с программой/скриптом не рядом,можно пример?
 

LexBell

Борода
Супер модератор
Я ни разу не покупал, могу предположить, что после покупки сертификата, он будет прописан в системе, и проверятся на серверах мелких. будет включена в ближайшее обновление, при отсутствии в системе - проверяться онлайн. это по логике, реальные подробности можно спросить у гугла или вики, инфа по любому есть, тем более эта инфа достаточно важная.
 

LordSP

Новичок
Я ни разу не покупал, могу предположить, что после покупки сертификата, он будет прописан в системе, и проверятся на серверах мелких. будет включена в ближайшее обновление, при отсутствии в системе - проверяться онлайн. это по логике, реальные подробности можно спросить у гугла или вики, инфа по любому есть, тем более эта инфа достаточно важная.
Верно, так и есть. Но все равно спасибо за информацию.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху