sprintf
-
Hallo,
ich habe eine Frage zu sprintf.
Im folgenden Code wird der Wert in Temp als 3stellige Zahl ausgegeben, sollte
die Zahl nur zwei Stellen haben wird eine 0 vorangestellt.Image2->Canvas->TextOutA(0,20,AnsiString().sprintf("%03d°C",Temp));
Ist es irgendwie Möglich anstatt einer 0 ein Leerzeichen zu bekommen?
Und ehrlich gesagt verstehe ich immer noch nicht ganz genau den
AusdruckAnsiString().sprintf, diesen Ausdruck kenne ich nur als Zufgriff
auf einen Member einer struct.Warum nicht AnsiString->sprintf...
-
Hallo
Ist es irgendwie Möglich anstatt einer 0 ein Leerzeichen zu bekommen?
las einfach die 0 weg
sprintf("%3d°C",Temp)Und ehrlich gesagt verstehe ich immer noch nicht ganz genau den
AusdruckAnsiString().sprintf, diesen Ausdruck kenne ich nur als Zufgriff
auf einen Member einer struct.Its es im Grunde auch hier... hier wird die memberfunktion (Methode) AnsiString::sprintf ausgeführt. Um ein (temporäres) Objekt zu haben, wird der Konstruktor AnsIString() ausgeführt. Das der Wert von sprintf auch nicht wieder verlroengeht, liegt an :
BCB-Hilfe zu sprintf schrieb:
Diese Methode gibt eine Referenz auf das AnsiString-Objekt (*this) mit dem Ergebniswert zurück.
bis bald
akari
-
Hallo,
las einfach die 0 weg
Lasse ich die 0 weg wird bei einem 2stelligen Wert kein Leerzeichen mit
ausgegeben, das ganze rutsch dann um eine Stelle nach links.
-
Hallo
Ist es irgendwie Möglich anstatt einer 0 ein Leerzeichen zu bekommen?
Edit1->Text = AnsiString().sprintf("%03d°C",50);Ausgabe : 050°C
Edit1->Text = AnsiString().sprintf("%3d°C",50);Ausgabe : 50°C (mit Leerzeichen am Anfang)
bis bald
akari
-
... die führenden Leerzeichen können bei Proportionalschrift allerdings schmaler sein, als die führenden Nullen.
Courier ist eine Schriftart, die nicht proportional ist und dann stehen die Zahlen bei Leer oder Null auch im gleichen Abstand vom Rand.Eine andere Möglichkeit ist eine Komponente zu wählen, in die man rechtsbündig schreiben kann; evt. Memo.
-
Scheinbar willst du doch nur das deine Canvas Ausgabe Rechtsbündig ist ?
Image2->Canvas->TextOutA(50 - Image2->Canvas->TextWidth(FormatFloat("0°C", Temp)), 20, FormatFloat("0°C", Temp));
-
Hallo,
das Problem lag in der Schriftart.
... die führenden Leerzeichen können bei Proportionalschrift allerdings schmaler sein, als die führenden Nullen.
Courier ist eine Schriftart, die nicht proportional ist und dann stehen die Zahlen bei Leer oder Null auch im gleichen Abstand vom Rand.Benutze ich Courier sieht es gut aus.
-
Würdest du die Linke Anfangsposition errechnen durch den TextWidth ist es egal welche Schrift- /art/größe/aussehen die Schrift hat.
-
Werde ich mal machen.
Danke Dir.