如何在inno组件页面中正确显示组件大小

时间:2014-02-11 06:24:54

标签: installer inno-setup

我没有获得组件页面中所选组件的正确内存大小。

请给我一个解决方案,如何为所有组件选择的总内存是否正确?

内存大小显示在页面底部的标签上。

1 个答案:

答案 0 :(得分:0)

如果在[files]部分中使用了检查标志,则Inno-setup不能处理所有标志。特别是如果你创建了依赖于[code]部分的检查标志。

在我的设置中,创建了一个包含所有文件的数组。 在这条记录中,我有一个选定的标志和一个filesizeflag。 示例如下:

 files[index].selected := // true or false depending on your wizard flow 
 files[index].filesize := {#filesize(..)} // on the .. the source file, including path

在调用目录页面向导页面之前,您将完成一个计算文件大小的过程,并将它们添加到已计数的文件大小中。 已计算的文件大小是针对每个设置的不同,具体取决于代码部分中的代码量是我的经验。

我计算空间的示例代码是一个好的开始(我希望)

Procedure GetSetUsedDiskSpace();
// This procedure counts an displays the used disk space
{}
var
 TempS, SearchString, NumberString, diskspace : String;
 Position, p2                                 : Integer;
 Tot_disk, TempSpace                          : Longint;
 {}
 begin
  TempS        := InitDiskSpace; // wizardform.DiskSpaceLabel.Caption;
  SearchString := 'MB';
  Position     := pos(SearchString, TempS);
  NumberString := copy(TempS, 1, Position-2); // exclusive the space before the MB
  p2           := 0;
  repeat // find the space before the number
   p2           := pos(' ', NumberString);
   NumberString := copy(NumberString, p2 + 1, length(NumberString) - p2);
  until p2 = 0;
  p2 := pos(',', NumberString);
  if (p2 = 0) then
   begin // Some languages use the period as a decimal separator
    p2 := pos('.', NumberString);
   end;
  if (p2 > 0) then
   begin
    NumberString := copy(Numberstring, 1, p2-1) + copy(NumberString, p2+1, 1);
    // If there is a need to more shifting we add some code
   end;
  TempSpace := StrToInt(NumberString);
  TempSpace := TempSpace * 1024 * 1024; // Conversion to bytes
  TempSpace := TempSpace / 10;          // We replaced the decimal separator once
  CountSpace;                           // Count the space for our selection
  Tot_disk      := UsedDiskSpace + TempSpace; // The total in bytes
  UsedDiskSpace := Tot_disk;                  // We need this for the control panel
  Tot_disk      := Tot_disk / 1024;           // The total in kilobytes
  Tot_disk      := Tot_disk / 1024;           // The total in MB
  diskspace     := IntToStr(Tot_disk);
  TempS         := SetupMessage(msgDiskSpaceMBLabel);
  StringChangeEx(TempS, '[mb]', diskspace, True);
  WizardForm.DiskSpaceLabel.Caption := TempS;
 end;