17

What is the easiest way to convert a Boolean value into a String in an Inno Setup Pascal script? This trivial task that should be completely implicit seems to require a full-blown if/else construction.

function IsDowngradeUninstall: Boolean;
begin
    Result := IsCommandLineParamSet('downgrade');
    MsgBox('IsDowngradeUninstall = ' + Result, mbInformation, MB_OK);
end;

This doesn't work because "Type mismatch". IntToStr doesn't accept a Boolean neither. BoolToStr does not exist.

Martin Prikryl
  • 188,800
  • 56
  • 490
  • 992
ygoe
  • 18,655
  • 23
  • 113
  • 210

2 Answers2

27

If you need it once only, the easiest inline solution is to cast the Boolean to Integer and use the IntToStr function. You get 1 for True and 0 for False.

MsgBox('IsDowngradeUninstall = ' + IntToStr(Integer(Result)), mbInformation, MB_OK);

Though, I usually use the Format function for the same result:

MsgBox(Format('IsDowngradeUninstall = %d', [Result]), mbInformation, MB_OK);

(Contrary to Delphi) The Inno Setup/Pascal Script Format implicitly converts the Boolean to Integer for %d.


If you need a more fancy conversion, or if you need the conversion often, implement your own function, as @RobeN already shows in his answer.

function BoolToStr(Value: Boolean): String; 
begin
  if Value then
    Result := 'Yes'
  else
    Result := 'No';
end;
Martin Prikryl
  • 188,800
  • 56
  • 490
  • 992
7
[Code]
function BoolToStr(Value : Boolean) : String; 
begin
  if Value then
    result := 'true'
  else
    result := 'false';
end;

or

[Code]
function IsDowngradeUninstall: Boolean;
begin
    Result := IsCommandLineParamSet('downgrade');
    if Result then 
      MsgBox('IsDowngradeUninstall = True', mbInformation, MB_OK)
    else
      MsgBox('IsDowngradeUninstall = False', mbInformation, MB_OK);
end; 
RobeN
  • 5,346
  • 1
  • 33
  • 50