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.


Anmelden zum Antworten