procedure FmtStr(var Result: string; const Format: string; const Args: array of const); var Len, BufLen: Integer; Buffer: array[0..4095] of Char; begin BufLen := SizeOf(Buffer); if Length(Format) < (sizeof(Buffer) - (sizeof(Buffer) div 4)) then Len := FormatBuf(Buffer, sizeof(Buffer) - 1, Pointer(Format)^, Length(Format), Args) else begin BufLen := Length(Format); Len := BufLen; end; if Len >= BufLen - 1 then begin while Len >= BufLen - 1 do begin Inc(BufLen, BufLen); Result := ''; // prevent copying of existing data, for speed SetLength(Result, BufLen); Len := FormatBuf(Pointer(Result)^, BufLen - 1, Pointer(Format)^, Length(Format), Args); end; SetLength(Result, Len); end else SetString(Result, Buffer, Len); end;
const Args: array of const);
var
Len, BufLen: Integer;
Buffer: array[0..4095] of Char;
begin
BufLen := SizeOf(Buffer);
if Length(Format) < (sizeof(Buffer) - (sizeof(Buffer) div 4)) then
Len := FormatBuf(Buffer, sizeof(Buffer) - 1, Pointer(Format)^, Length(Format), Args)
else
begin
BufLen := Length(Format);
Len := BufLen;
end;
if Len >= BufLen - 1 then
begin
while Len >= BufLen - 1 do
begin
Inc(BufLen, BufLen);
Result := ''; // prevent copying of existing data, for speed
SetLength(Result, BufLen);
Len := FormatBuf(Pointer(Result)^, BufLen - 1, Pointer(Format)^,
Length(Format), Args);
end;
SetLength(Result, Len);
end
else
SetString(Result, Buffer, Len);
end;
http://www.360doc.com/content/08/0705/02/63725_1398836.shtml
http://www.cnblogs.com/del/archive/2007/12/18/1005161.html
就是格式化字符串的
Format('(%.4s)', ['aa']);让你看那万一老师的博客,可惜你不接受建议,他描述这函数讲得很清楚的。“%”是格式指令符,“%s”代表后面的参数是个字符串,“%.4s”表示将后面参数的字符串截留左面4个,我不懂“%4s”这个格式。
如果是:
Format('(%.4s)', ['aa']);
那么,结果就是 '(aa)',因为'aa'不足4个,所以没被截断,
如果是:
Format('(%.4s)', ['abcdef']);
那么,结果就是 '(abcd)'。——'abcdef'被截留左面4个后,代替前面参数的'%.4s'
例如:Format('%6s','ABCDEFGHI' );//输出结果:ABCDEFGHI
Format('%6s','ABCD'); //输出结果:空格空格ABCD
例子上面的各位都给了,你只要理解它的道理,具体的每个参数什么意思,你可以查文档,还可以自定义格式化字符串.