[VB6] Tekst uit multiline textbox printer dmv printer-object

Pagina: 1
Acties:
  • 171 views sinds 30-01-2008
  • Reageer

  • Exe-cuter
  • Registratie: September 2001
  • Laatst online: 11-09-2023
Hello ,

Ik ben een programma aan het schrijven in visual basic , waarbij ik opmerkingen over een bepaalde persoon in een multiline textfield zet (gegevens uit databank)

Voorbeeld gegevens uit tekstbox


Leerkracht 1ste jaar

Heeft een opleiding lichamelijke opvoeding gevolgd alvorens leerkracht te worden. Meer blablabalbl

en zelfs meer blablalblbaal


Ik wil deze gegevens dus op dezelfde manier op een blad afdrukken dmv het printer-object.

Voorbeeld :
Afbeeldingslocatie: http://users.skynet.be/executer/temp.jpg

Het probleem dat optreed is dat :
- Bij iedere nieuwe lijn begint de tekst vanaf de linkerrand van mijn pagina
- Tekst die te lang is loopt gewoon door

Ik heb al geprobeerd zelf een functie te schrijven dat van elke 4-5 woorden een nieuwe string maakt , maar dat wil niet echt lukken. Van de Split() functie word ik ook niet veel wijzer en op MSDN lijkt er ook geen antwoord te staan.

Vraag :
Is er in vb een mogelijkheid om de tekst in een "onzichtbaar" kader te plaatsen op het blad ? Het is niet zo belangrijk of de tekst links of rechts uitgelijnd wordt op de pagina. :)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je kunt het textwidth property gebruiken om uit te lezen hoe lang je string is.
Wat je dat kunt doen is een tempstring vullen met letters uit de originele tempstring, totdat je textwidth breed genoeg is. Ga daarna terug tot de laatste spatie (i.v.m. afkappen woorden) en druk de tempstring af.

Vervolgens kunt je met het currentX property van het printerobject de volgende positie zetten en daar opnieuw beginnen met de volgende letters te printen.

Als je een non-proportioneel font gebruikt kun je ook het textwidth property achterwege laten en tekens tellen (gebruik b.v. courier new ofzo). Anders moet je toch met de textwidth aan de slag, een W is immers breder dan een i... ;)

Ik heb het ooit gemaakt, maar kan de code zo 1 2 3 niet meer vinden.
Als je slim bent maak je een subje ofzo met wat parameters (de af te drukken string, de gewenste x-pos, de gewenste lengte en evt (of optioneel?) het te gebruiken lettertype en grootte).

[ Voor 17% gewijzigd door RobIII op 25-02-2004 14:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • GigaDave56
  • Registratie: Juni 2001
  • Laatst online: 14-12-2025
Volgens mij is het niet mogelijk tekst in een onzichtbar kader te stoppen en te printen. Visual Basic is wat dat betreft erg karig met printmogelijkheden. In een VB boek wat ik heb, wordt het summier beschreven en wordt Crystal Reports aangeraden om gegevens te printen, maar dit terzijde.

Het moet, denk ik, niet onmogelijk zijn een (of meer) string(s) te retourneren met de info uit het memoveld. Dit string(s) kun je dan gewoon afdrukken.
Een andere mogelijkheid is het formulier zelf af te drukken en dan de multiline textbox zo groot te maken dat alle informatie afgebeeld wordt.

edit:

Zie antwoord hierboven voor een gedetaileerdere uitleg.
Ik ga mijn systeemklok eens gelijk zetten :)

[ Voor 11% gewijzigd door GigaDave56 op 25-02-2004 14:34 . Reden: Sort of dubbelpost ]

Not so Giga One
> I'd sell my soul for you, babe
> For money to burn, for you
> I'd give you all and have none, babe
> Just to, just to, to have you here by me... [Scooter - Rebel yell]


  • GigaDave56
  • Registratie: Juni 2001
  • Laatst online: 14-12-2025
[Bugje *splat* Fixed]

[ Voor 97% gewijzigd door GigaDave56 op 25-02-2004 14:35 ]

Not so Giga One
> I'd sell my soul for you, babe
> For money to burn, for you
> I'd give you all and have none, babe
> Just to, just to, to have you here by me... [Scooter - Rebel yell]


  • Exe-cuter
  • Registratie: September 2001
  • Laatst online: 11-09-2023
Ik ga proberen om over het hele project te printen met zelfgeschreven printer-functies (functies voor lijnen , pagina hoofding enz...) , dus Crystal Reports en .Printform probeer ik te vermijden :)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik heb effe snel wat code in mekaar geflanst:
Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Private Function WrapText(strText As String, lWidth As Long, Optional strReplace As String = vbCrLf, _
                Optional strFontName As String = "", Optional lFontSize As Long = -1) As String
    Dim strRet As String
    Dim iLastSpace As Long
    Dim strTemp As String
    Dim lPos As Long
    Dim lTPos As Long
    
    strRet = ""
    If Len(strFontName) > 0 Then fontname = strFontName
    If lFontSize > 0 Then fontsize = lFontSize
    
    If Len(strText) > 0 Then
        lPos = 1
        While (lPos <= Len(strText))
            strTemp = ""
            While (lPos <= Len(strText)) And (TextWidth(strTemp) < lWidth)
                strTemp = strTemp & Mid(strText, lPos, 1)
                lPos = lPos + 1
            Wend
            lTPos = Len(strTemp)
            If (Asc(Mid(strTemp, Len(strTemp), 1)) <> 32) And (Len(strTemp) > 1) And _
                (TextWidth(strTemp) >= lWidth) And (InStr(strTemp, " ") > 0) Then
                Do
                    lTPos = lTPos - 1
                    lPos = lPos - 1
                Loop Until (Asc(Mid(strTemp, lTPos, 1)) = 32) Or (lTPos = 1)
            End If
            strRet = strRet & Trim(Mid(strTemp, 1, lTPos)) & _
                IIf(lPos < Len(strText), strReplace, "")
        Wend
    End If
    WrapText = strRet
End Function


Geeft gewrappte text terug op breedte met enters erin. Je zou nu met een split() de stukken text kunnen breken op vbCrLf en vervolgens telkens op de juiste X-pos afdrukken.

Ik gooi effe een test-projectje online... Tadaaa!

[ Voor 31% gewijzigd door RobIII op 25-02-2004 15:10 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Exe-cuter
  • Registratie: September 2001
  • Laatst online: 11-09-2023
Op het latijn (?) na begrijp ik het. Na het een beetje te hebben versimpeld kan ik het bijna rechtstreeks implementeren in het projectje. :> O+

Ff tussendoor :
Is er een ingebakken functie om te weten uit hoeveel arrayindexes je "arrLines string" bestaat ? B)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
UBound, zoals je in het voorbeeld (zipfile) kunt zien...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Exe-cuter
  • Registratie: September 2001
  • Laatst online: 11-09-2023
sorry , had er helemaal overeen gekeken
Pagina: 1