Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Str() und Unicode (https://www.delphipraxis.net/168840-problem-mit-str-und-unicode.html)

MaBuSE 13. Jun 2012 16:55

Delphi-Version: XE

Problem mit Str() und Unicode
 
Hallo,

ich habe folgendes Problem:

In der Online-Hilfe zu XE steht:

System.Str
Übergeordnet: System

Delphi
Delphi-Quellcode:
procedure Str(const X [: Width [:Decimals]]; var S: String);


Eigenschaften
Typ Sichtbarkeit Quelle Unit Übergeordnet
---------- -------------- ------------ -------- ------------
procedure public System.pas System System

Beschreibung
Formatiert einen String und gibt diesen an eine Variable zurück.

In Delphi konvertiert Str den numerischen Wert X entsprechend der in Width und Decimals angegebenen Formatierung in einen String. Das Ergebnis entspricht einem Aufruf der Prozedur Write, wobei aber der formatierte String nicht in eine Textdatei geschrieben, sondern in der Variable S gespeichert wird.

X ist ein Ausdruck des Typs Integer oder Real. Width und Decimals sind Integer-Ausdrücke. Wenn die erweiterte Syntax aktiviert ist, ist der Parameter S eine String-Variable bzw. ein nullbasiertes Zeichen-Array (PChar).

Siehe auch
Write
Intrinsische Routinen in Delphi
Routinen für die Typumwandlung

Codebeispiele
SystemStr (Delphi)
Quelle: http://docwiki.embarcadero.com/VCL/de/System.Str

Leider bringt mir der folgende Aufruf eine Warnung beim Compilieren.
Delphi-Quellcode:
// Das ist das Original Beispiel aus derDelphi Hilfe
// http://docwiki.embarcadero.com/CodeExamples/XE2/en/SystemStr_(Delphi)
function MakeItAString(const ANumber: LongInt): String;
begin
  { Convert any ordinal type to string }
  Str(ANumber, Result);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.TextOut(10, 10, MakeItAString(-5322));
end;
Die Warnung besagt, dass der Parameter ein ShortString ist. :-(
Fehlermeldung:
[DCC Warnung] Unit1.pas(29): W1057 Implizite String-Umwandlung von 'ShortString' zu 'string'

Laut Doku ist es doch ein String (unicode).
Wie kann das sein?

:?::?::?:

himitsu 13. Jun 2012 17:50

AW: Problem mit Str() und Unicode
 
Die Doku stimmt halt nicht immer, vorallem nicht bei sooo alten Funktionen.

Die umkehrfunktion "Val" wurde auf String (UnicodeString) erweitert, aber "Str" war schon immer ShortString und da hatte man wohl keine Lust das alles neu zu schreiben.


Bis XE war es so wohl einfacher, da der Aufruf dieser Funktionen ein bissl CompilerMagic beinhaltet.
Hab jetzt noch nicht in XE2 nachgesehn, aber ich denk nicht, daß sich daran was geändert hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz