2009-03-13 21 views
0
procedure TForm1.Button1Click(Sender: TObject); 
var 
    arrSize: array[ 0..255 ] of Char; 
begin 
    {same formating like in statusbar of Explorer} 
    StrFormatByteSize(70846, arrSize, Length(arrSize) * Sizeof(arrSize)); 
    Label1.Caption := 'Result: ' + arrSize; 
end; 

StrFormatByteSizeには、aridesizeがPWideCharである必要があります。不適切な出力文字列

結果をDelphi 2009で正しく表示するにはどうすればよいですか?

+0

あなたは正しく – dummzeuch

答えて

2

Charの配列をWideCharの配列に置き換えて、StrFormatByteSizeWを呼び出します。

5

これは、Delphi 2009で正常に動作します:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Buff: UnicodeString; 
    TheSize: Int64; 
begin 
    SetLength(Buff, 255);; 
    TheSize := 1024768; 
    StrFormatByteSizeW(TheSize, PWideChar(Buff), Length(Buff)); 
    Label1.Caption := Buff; 
end; 
+0

をあなたのコードをフォーマットするCodeSampleを使用する必要があります「何でもデフォルトの文字列型があることを起こること」では適切ではないことを明確にするのUnicodeStringとしてバフを宣言してください。この場合。このAPIにはUnicode文字列が必要です。 SizeOf(Char)をSetLengthで掛けることは不要です。 3番目のStrFormatByteSizeWパラメータは、Length(Buff)+1として指定できます。 –

+0

@Rob:上記のコメントを投稿した後、宣言でUnicodeStringとStringを再考しました。私は、UnicodeStringを指定すると、意図がより明確になり、それに応じて編集されることに同意します。訂正していただきありがとうございます。 –