Well I have been busy working in .NET and thought to add "string.format" functionality in Delphi. I am not quite sure if this functionality exists in new versions of Delphi??? AFAIK, this is not available until D7.
{------------------------------------------------------------------------
Procedure: StringFormat
Author: Kiran Kurapaty
Date: 02-Jan-2011
Arguments: const AFormat: string; AParams: array of const
Result: String
Usage: ShowMessage(StringFormat( 'Records ({0}) {1} in {2} mins {3} secs ', [123, 'loaded', varMins, varSecs]);
-------------------------------------------------------------------------}
function StringFormat(const AFormat: string; AParams: array of const): string;
function GetAsString(varRec: TVarRec): String;
begin
try
case varRec.VType of
vtAnsiString: result := varRec.VPChar;
vtBoolean: result := IfThen(varRec.VBoolean, 'True', 'False');
vtChar: result := varRec.VChar;
vtClass: result := varRec.VClass.ClassName;
vtCurrency: result := format('%m', [varRec.VCurrency^]);
vtExtended: result := format('%f', [varRec.VExtended^]);
vtInt64: result := format('%d', [varRec.VInt64^]);
vtInteger: result := format('%d', [varRec.VInteger]);
vtInterface: result := format('%p', [varRec.VPointer]);
vtObject: result := varRec.VObject.ClassName;
vtPChar: result := varRec.VPChar;
vtPointer: result := format('%p', [varRec.VPointer]);
vtPWideChar: result := varRec.VPWideChar;
vtString: result := varRec.VPChar;
vtVariant: result := varRec.VVariant^;
vtWideChar: result := varRec.VWideChar;
vtWideString: result := varRec.VPWideChar;
end;
except
Result := 'Unknown';
end;
end;
var
I: Integer;
itemVal: string;
begin
Result := AFormat;
for I := Low(AParams) to High(AParams) do
begin
itemVal := GetAsString(AParams[I]);
Result := StringReplace(Result, Format('{%d}', [I]), itemVal, [rfReplaceAll]);
end;
end;