[C#] right align true type font text

Pagina: 1
Acties:

  • chrisO
  • Registratie: Mei 2003
  • Laatst online: 22-05 09:18
ik moet dus een kolom met geldbedragen uitprinten, alleen krijg ik de bedragen niet netjes rechts uitgelijnd. Voordat ik het geldbedrag print stop ik hem eerst in een string van exact 16 posities, hierdoor staan alle bedragen netjes rechts uitgelijnd, maar zodra ik dus ga printen en een true type font gebruik gaat de uitlijning mis.
er iis volgens mij geen functie om na te gaan hoe breed een string in pixels is...dus op die manier kan ik niet uitlijnen, mijn vraag dus...hoe kan ik dit wel oplossen?

  • Juicy
  • Registratie: December 2000
  • Laatst online: 04:14
chrisO schreef op 18 mei 2004 @ 22:38:
er iis volgens mij geen functie om na te gaan hoe breed een string in pixels is...dus op die manier kan ik niet uitlijnen, mijn vraag dus...hoe kan ik dit wel oplossen?
Die is er dus wel ... Gewoon even wat doorzetten ipv direct hier te posten. Weet zo 1, 2, 3 niet hoe het ook alweer precies werkt maar ik zal even kijken.

En kijk ook eens naar de DrawString icm de StringFormat ... Je kunt definieren waar de tekst moet komen en mbv de stringformat rechts uitlijnen.

[ Voor 15% gewijzigd door Juicy op 18-05-2004 22:46 ]

-


  • chrisO
  • Registratie: Mei 2003
  • Laatst online: 22-05 09:18
Ja, zie ik nu ook, nog even doorgezocht op andere plaats na het posten en toen vondt ik dus de oplossing.
overigens heeft String.Format om recht uittelijnen geen nut, dit werkt enkel met ASCII characters zodra je true type fonts gaat gebruiken zorgtde variable breedte van characters ervoor dat de uitlijning mis gaat.
heb het uiteindelijk opgelost m.b.v. Graphics.MeasureString

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

chrisO schreef op 18 mei 2004 @ 22:38:
ik moet dus een kolom met geldbedragen uitprinten, alleen krijg ik de bedragen niet netjes rechts uitgelijnd. Voordat ik het geldbedrag print stop ik hem eerst in een string van exact 16 posities, hierdoor staan alle bedragen netjes rechts uitgelijnd, maar zodra ik dus ga printen en een true type font gebruik gaat de uitlijning mis.
er iis volgens mij geen functie om na te gaan hoe breed een string in pixels is...dus op die manier kan ik niet uitlijnen, mijn vraag dus...hoe kan ik dit wel oplossen?
Met welke code print je en hoe print je?

  • chrisO
  • Registratie: Mei 2003
  • Laatst online: 22-05 09:18
De onderstaande functie print "hello" uit 4,5 inch vanaf de linkerrand en 2,2 inch vanaf boven.

code:
1
2
3
4
5
6
7
8
9
private void PrintDocument(Object sender, PrintPageEventArgs e)
{
    String string("Hello");
    Font printFont = new Font("Arial", 10);
    e.Graphics.DrawString(String string, 
                          printFont, 
                      Brushes.Black, 
                      450, 220());
}


je hebt ook nog een PrintDocument object nodig
code:
1
private PrintDocument printFactuur = new PrintDocument();


en een eventhandler.
code:
1
printFactuur.PrintPage += new PrintPageEventHandler(PrintDocument);


tenslotte roep je de printfunctie aan d.m.v.
code:
1
printFactuur.Print()

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Dit zou gewoon moeten resulteren tot een goede print. Heb je een voorbeeld van hoe het precies mis gaat?

  • whoami
  • Registratie: December 2000
  • Laatst online: 25-05 23:56
questa schreef op 19 mei 2004 @ 08:31:
Dit zou gewoon moeten resulteren tot een goede print. Heb je een voorbeeld van hoe het precies mis gaat?
Hij zegt net dat hij de oplossing gevonden heeft ?

chrisO: je zegt dat je het opgelost hebt mbhv MeasureString, maar ik zie je die method nergens gebruiken?

[ Voor 18% gewijzigd door whoami op 19-05-2004 08:40 ]

https://fgheysels.github.io/


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:01

Janoz

Moderator Devschuur®

!litemod

Waarom gebruik je hiervoor niet een fixed width font. Die zijn hier speciaal voor gemaakt. Als je bij een niet fixed width font de digits appart uit gaat lijnen ziet het er voor geen meter meer uit vanwege de verschillende witruimtes om de digits.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • chrisO
  • Registratie: Mei 2003
  • Laatst online: 22-05 09:18
Ja dat stukje code had ik niet in dit ingekorte voorbeeld geplakt, omdat ik de oplossing al gevonden had. maar het volgende stukje code gebruik ik dus om bijvoorbeeld
tekst rechts uit te lijnen op positie 700

code:
1
2
SizeF stringSize = e.Graphics.MeasureString(verkoopsPrijs, artikelFont);
x = 700 - stringSize.Width;


vervolgens print ik de string dus op positie x, 220 (zie eerder vermeldde code)


staan overigens een paar () die er niet horen in de code van mijn vorige post ;)

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

whoami schreef op 19 mei 2004 @ 08:39:
Hij zegt net dat hij de oplossing gevonden heeft ?
* pjvandesande las weer is niet goed :Z

  • chrisO
  • Registratie: Mei 2003
  • Laatst online: 22-05 09:18
Janoz schreef op 19 mei 2004 @ 08:42:
Waarom gebruik je hiervoor niet een fixed width font. Die zijn hier speciaal voor gemaakt. Als je bij een niet fixed width font de digits appart uit gaat lijnen ziet het er voor geen meter meer uit vanwege de verschillende witruimtes om de digits.
misschien heb ik het niet helemaal duidelijk gemaakt maar met print, bedoel ik dus printen op papier, en een fixed witdth font lijkt mij dan niet echt mooi. en ik lijn niet de characters apart uit, maar de gehele string (zie code)
Pagina: 1