2009-03-13 5 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 requiert que arrsize soit un PWideChar.Chaîne de sortie incorrecte

Comment afficher le résultat correctement dans Delphi 2009?

+0

vous devez utiliser CodeSample pour formater votre code correctement – dummzeuch

Répondre

2

Remplacez le tableau de Char par le tableau de WideChar, appelez StrFormatByteSizeW.

5

Cela fonctionne bien en 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

S'il vous plaît déclarer Buff comme UnicodeString de préciser que « quel que soit le type de chaîne par défaut se trouve être » ne convient pas dans ce cas. Cette API nécessite une chaîne Unicode. La multiplication par SizeOf (Char) dans SetLength n'est pas nécessaire. Le troisième paramètre StrFormatByteSizeW peut être donné en Longueur (Buff) +1. –

+0

@Rob: Après avoir posté mon commentaire ci-dessus, j'ai reconsidéré à propos de UnicodeString vs. String dans la déclaration; Je suis d'accord que la spécification de UnicodeString rend l'intention plus claire, et donc modifiée en conséquence. Merci pour les corrections. –

Questions connexes