セットアップ内のすべてのコンポーネントの合計サイズを計算する必要があります。一部のカスタム コードが原因で、Inno Setup の内部機能を使用できません。
問題は、コンポーネントが多くのファイルを共有することでした。そのため、使用するファイルの変数を含むすべてのコンポーネントの文字列を定義しました。次に、これらの文字列を単一の文字列に追加し、この文字列に特定の変数が見つかった場合、ファイルのサイズ (バイト単位) が type の変数「サイズ」に追加されますSingle
。最後に、「サイズ」は、インストールに必要なスペースを示します。
実際、これはうまく機能しますが、次のページでサイズを GB で示したいと思います。しかし、関数FloatToStr
は小数点の後に多くの数字を追加しますが、私は2つだけにしたいのです。
スクリプトは次のとおりです (問題は最後の行で発生します)。
function NextButtonClick(CurPageID: Integer): Boolean;
var
size: Single;
if (CurPageID = wpSelectDir) then { I have swapped the Components and SelectDir pages }
begin
size := 0; { this will contain the size in the end }
xg := ''; { this is the string which contains the list of files needed by every single component }
for I := 0 to GetArrayLength(ComponentArray) - 1 do
if IsComponentSelected(ComponentArray[I].Component) then
begin
xg := xg + ComponentArray[I].GCF;
end;
{ here the files are being added to the string, everything's working as intended.. }
MsgBox(xg, mbInformation, MB_OK); { this is for testing if the string has been created correctly }
if Pos('gcf1', xg) > 0 then size := size + 1512820736; { here the Pos-function searches for the given string and if it is found it adds the value to "size", ok... }
if Pos('gcf2', xg) > 0 then size := size + 635711488;
if Pos('gcf3', xg) > 0 then size := size + 286273536;
size := size / 1024 / 1024 / 1024; { now all sizes have been added and the number is converted to be displayed GB, not bytes }
{ Format('%.2n', [size]); }
{ size := (round(size * 10) / 10); }
{ size := Format('%.2n', [size]); }
{ FloatToStr(size); }
MsgBox(FloatToStr(size), mbInformation, MB_OK); { Here the size is shown but with several unneeded places after the decimal point (2.267589569092) }
end;
end;
ご覧のとおり、数字を取り除くためにいくつかのことを試しました。問題は のFloatToStr
関数で、MsgBox
すべての数値が自動的に追加されます。Integer
「サイズ」のタイプを選択しても、長い数値が表示されますが、ここで処理される数値が大きすぎて、ポイントの後に小数点以下 2 桁が必要なため、Integer
andIntToStr
を使用できません (問題を解決するもの)。MsgBox
Format
関数も入れようとしましたMsgBox
が、「タイプの不一致」エラーも発生しました。
FloatToStrF
Inno Setup ではサポートされていません。
コンパイラは、「サイズ」が宣言された型をチェックし、再び使用することを主張するため、事前に使用して「サイズ」を変換FloatToStr
して切り捨ててもうまくいきませんでした。FloatToStr
MsgBox
この数を切り上げる方法がわかりません。たぶん、いくつかの異なるアプローチが役立つでしょうか?
あなたの答えを楽しみにしています!