Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit Format und Widestring (https://www.delphipraxis.net/27848-probleme-mit-format-und-widestring.html)

Igotcha 16. Aug 2004 15:29


Probleme mit Format und Widestring
 
Hallo zusammen,

ich arbeite mich gerade im VirtualTreeview ein und stoße dabei auf ein Formatierungsproblem meiner Ausgabe. Kurz zum Hintergrund des VT: Inhalte des Treeviews werden in einem Record gespeichert, in diesem Record ist eine Integer, die ich im Rahmen der Ausgabe als formatierten String darstellen möchte.

In dem Ereignis des VT, welches die Darstellung der Record-Inhalte übernimmt, ist der String(CellText) als Widestring definiert:

Delphi-Quellcode:
procedure TfrmMain.MyTreeGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
Wenn ich jetzt schreibe:

Delphi-Quellcode:
CellText:=Format('%8.2n', [inttostr(myData.IntWert)]);
Bekomme ich eine "Format invalid"-Meldung

Formatieren möchte ich, dass die Zahl mit Tausender-Punkten ausgegeben wird.

Gruß Igotcha

sakura 16. Aug 2004 15:32

Re: Probleme mit Format und Widestring
 
Das hat nichts mit dem WideString zu tun ;)

Delphi-Quellcode:
CellText:=Format('%d', [myData.IntWert]);
...:cat:...

Igotcha 16. Aug 2004 15:37

Re: Probleme mit Format und Widestring
 
Nee ;-)

Ich möchte z.B. den Int-Wert 10000000 als String in der Form "10.000.000" anzeigen lassen. Der VirtualTV lässt ja nur Strings als Anzeige zu - also muß ich den Int-Wert vorher formatieren.

Das, was Du schreibst, könnte man ja gleich als:

Delphi-Quellcode:
CellText:=IntToStr(myData.IntWert)
schreiben, das nimmt er auch - aber da ist eben keine Formatierung dabei.

Ich denke schon, dass das am WideString liegt, denn wenn ich den Wert in eine Stringvariable formatiere geht es nämlich.

Delphi-Quellcode:
function Format(const Format: string; const Args: array of const): string; overload;
Hat als Rückgabewert eben nur "String" und nicht "WideString".

Oder stehe ich gerade völlig auf dem Schlauch :gruebel:

Gruber_Hans_12345 16. Aug 2004 15:42

Re: Probleme mit Format und Widestring
 
Zitat:

Zitat von Igotcha
Wenn ich jetzt schreibe:

Delphi-Quellcode:
CellText:=Format('%8.2n', [inttostr(myData.IntWert)]);
Bekomme ich eine "Format invalid"-Meldung

Müsste auf jeden Fall eher so heiszen :
Delphi-Quellcode:
CellText:=Format('%8.2n', [myData.IntWert]);
Da %n einen Integer erwartet

Gruss
Hans

Igotcha 16. Aug 2004 15:44

Re: Probleme mit Format und Widestring
 
Zitat:

Zitat von Gruber_Hans_12345
Zitat:

Zitat von Igotcha
Wenn ich jetzt schreibe:

Müsste auf jeden Fall eher so heiszen :
Delphi-Quellcode:
CellText:=Format('%8.2n', [myData.IntWert]);
Da %n einen Integer erwartet


Nö ;-)

"n" besag nur die Formatierung mit Tausender-Punkt und der o.g. Code geht nicht, da Format einen String als Argument erwartet.

Gruber_Hans_12345 16. Aug 2004 15:48

Re: Probleme mit Format und Widestring
 
Zitat:

Zitat von Igotcha
"n" besag nur die Formatierung mit Tausender-Punkt und der o.g. Code geht nicht, da Format einen String als Argument erwartet.

Stimmt auch nicht ganz, hab jetzt nachgesehn ... %n sagt das es eine Kommazahl braucht .... also inetwa so ...

Delphi-Quellcode:
function ....
var temp : double;
begin
  temp := myData.IntWert;
  CellText:=Format('%8.2n', [temp]);
end;
Ist zwar nicht schön, sollte aber funktionieren

Gruss
Hans

Stevie 16. Aug 2004 15:51

Re: Probleme mit Format und Widestring
 
Wie wär's mit:
Delphi-Quellcode:
Format('%8.2n', [StrToFloat(IntToStr(i))]);
???

Gruber_Hans_12345 16. Aug 2004 15:53

Re: Probleme mit Format und Widestring
 
Zitat:

Zitat von Stevie
Wie wär's mit:
Delphi-Quellcode:
Format('%8.2n', [StrToFloat(IntToStr(i))]);
???

aber auch nicht wirklich schön oder ?

... genau so wenig wie :
Delphi-Quellcode:
Format('%8.2n', [i*1.0])

Igotcha 16. Aug 2004 15:53

Re: Probleme mit Format und Widestring
 
Ja super, so funktioniert es zumindest, obwohl das nicht so ganz schön ist, da ich pro Ansicht so > 16.000 Daten "manipulieren" muss.

Ich habe jetzt statt "Integer" einfach "Double" verwendet. Muss nur mal schauen, ob sich das anderweitig negativ bemerkbar macht.

Danke und Gruß
Igotcha

Stevie 16. Aug 2004 16:17

Re: Probleme mit Format und Widestring
 
Ok, dürfte ein paar Ticks mehr brauchen, aber benutze doch einfach folgende Funktion: :mrgreen:
Delphi-Quellcode:
function IntToFloat(Value: Integer): Double;
begin
  Result := Value;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.

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