Toon posts:

[VB] Uitlijnen string voor printen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik stuur door middel van het printer object strings naar een printer. Nu wil ik het een en ander als volgt printen.


Voorbeeld

Cola 2,00
Fanta 2,00
Bier 2,00

Het bedrag moet anders uitgelijnd worden dan het artikel.

Nu ben ik al bezig geweest met het volgende

TePrintenString = Artikel & LegeString(80-len(artikel)-len(bedrag)) & Bedrag

De functie legestring levert een string met spaties. Ter lengte van input.

Dit werkt ALS alle karakters even groot zijn. En dat zijn ze niet.

Hoe kan ik dit oplossen.

  • baskabas
  • Registratie: December 2000
  • Laatst online: 05-04 12:26
Een mono-spaced lettertype instellen.

Edit: Courrier bijv.

Verwijderd

Je kan de CurrentX van het printer-object (nadat je de eerste tekst hebt geprint) naar een vast punt zetten.
Als je wil weten hoe breed dat minimaal moet zijn, dan je van alle eerste teksten (cola, fanta, bier) de .TextWidth bepalen.

Rechtsuitlijnen werkt dus ook zo: Printer.CurrentX = [vast punt] - Printer.TextWidth(string)

  • DinX
  • Registratie: Februari 2002
  • Laatst online: 00:54

DinX

Motormuis

Best FixedSys font nemen. Heb je dat probleem niet.

Marokko 2015: Route
Sat Tracker: SpotWalla
Blog: Gone for a ride


  • M_de_Hilg
  • Registratie: November 2000
  • Niet online
De functie tab(n) is een simpele manier om dit voor elkaar te krijgen.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09-09 16:14

Crazy D

I think we should take a look.

Als je het vrij makkelijk wilt oplossen, kun je het font aanpassen, of met tab's (vbTab) de prijzen uitlijnen.
Als je moeilijk(er) wilt doen, kun je met de CurrentX en CurrentY properties wat spelen, en met de TextWidth functie van het printerobject bekijken hoe lang de tekst is die je wilt printen, zodat je daarmee kunt bepalen wat de CurrentX moet worden.
tip: gooi een picturebox op je form, vervang Printer door de naam van je picturebox, en het bespaart je een hoop papier ;)

Exact expert nodig?


Verwijderd

Topicstarter
Allereerst bedankt voor jullie tips

Wat betreft dat currentx, currenty, textwidth, en textheigth gebeuren ben ik er al helemaal uit. De uitlijning is bijna perfect.

Nog een klein detail waar ik niet uitkom!

Als ik een multiline string heb. Afkomstig uit een multiline-textbox. Dan gaat het mis.

Textbox inhoud en dus ook de inhoud van de string
code:
1
2
Mystring = "Dit is regel 1" overgang naar volgende regel
         "Dit is regel 2"

Ziet er na volgende code
Printer.currentx = 1000
Printer.print Mystring

als volgt uit op papier

-------Dit is regel 1 (Lees _ als spatie)
Dit is regel 2

Een oplossing die ik mogelijk acht is. De string opsplitsen in meerdere strings. En deze een voor een afdrukken.

Wellicht kan dit makkelijker??

Verwijderd

Het wordt alleen maar moeilijker...
Je strings kan nog nog opdelen met Split(sString, vbCrLf) en door de array te loopen. Maar wat als de string breder is dan je papier? Dan moet je ook nog een word-wrap functie gaan maken.

Verwijderd

Topicstarter
Die split functie was precies wat ik zocht

Uitlijning werkt nu prima
Pagina: 1