Newsgroup: it.comp.lang.visual-basic
Titolo: Printer di un testo che deve andare a capo

Sono quasi riuscito a superare i travagli dell'oggetto Printer. Però devo
ancora capire una cosa (VB5 Pro).
Una TextBox ha la proprietà Multiline = True.
Quando stampo il testo desidero che mantenga lo stesso aspetto visibile nel
Form, cioè che vada a capo negli stessi punti. Come devo fare? Possibilmente
senza usare le API.
Curiosità, ovvero l'arte di arrangiarsi: se imposto ScaleLeft o ScaleTop la
mia stampante (HP Deskjet 670C) fa finta di niente e stampa il testo in alto
a sinistra (mi succedeva anche con VB4 Standard e la TI MicroMarc). Poi,
magari un po' annoiata, stampa gli altri testi nelle giuste posizioni.
Allora stampo una stringa vuota, ripristino le coordinate ... e funziona. Da
che cosa potrebbe dipendere questa anomalia?
Grazie, mi urge una risposta alla prima domanda.
Ciao
Francesco

 senza usare le API.
Hmmm, _senza_ API non saprei, _con_ ti posso aiutare...
Ma dai, in fondo non pungono ! ;-))
In un prg nuovo inserisci un modulo standard, un TextBox MultiLine e un
CommandButton.
Copia e incolla nel modulo questo:
____________________________
Public Const EM_GETLINE = &HC4
Public Const EM_GETLINECOUNT = &HBA
Public Const EM_LINEINDEX = &HBB
Public Const EM_LINEFROMCHAR = &HC9
Public Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByRef lParam As Byte) As Long
Public Const MaxCaratteri = 1500   ' Scale this to size of text box
Public buff(MaxCaratteri) As Byte
Public Function fGetLine(Box As Control, LineNumber As Long) As String
    'Dim MAX_CHAR_PER_LINE As Integer
    Dim byteLo%
    Dim byteHi%
    Dim Buffer$
    Dim K As Integer
    Dim x%
    ' This function fills the buffer with a line of text
    ' specified by LineNumber from the text box control.
    ' The first line starts at zero.
    byteLo% = MaxCaratteri And (255)  '[changed 5/15/92]
    byteHi% = Int(MaxCaratteri / 256) '[changed 5/15/92]
    Buffer$ = Chr$(byteLo%) + Chr$(byteHi%) + Space$(MaxCaratteri - 2)
    ' [Above line changed 5/15/92 to correct problem.]
    For K = 0 To MaxCaratteri
        buff(K) = 255
    Next K
    x% = SendMessage(Box.hwnd, EM_GETLINE, LineNumber, buff(0))
    fGetLine$ = ""
    For K = 0 To MaxCaratteri
        If buff(K) = 255 Then Exit For
        fGetLine$ = fGetLine$ & Chr$(buff(K))
    Next K
End Function
_______________________________
Poi, nel CommandButton prova questo:
_______________________________
Private Sub Command1_Click()
    Dim NumeroRighe As Long
    Dim NumeroRigaCorrente As Long
    Dim TestoRigaCorrente As String
    NumeroRighe = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0&, 0&) - 1
    For NumeroRigaCorrente = 0 To NumeroRighe
        TestoRigaCorrente = fGetLine(Text1, NumeroRigaCorrente)
        Debug.Print NumeroRigaCorrente & " - " & TestoRigaCorrente
    Next NumeroRigaCorrente
End Sub
________________________________
Inserisci qualche riga di testo e prova il Command1.
Bye, G.
--
---------------------------------------------
    Le risposte alle tue domande le trovi
    sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
       ... e nell'help in linea !
---------------------------------------------
Real E-address: 
gaet...@hotmail.com

Prova PrnPrv3; č nel sito comune (o da me)..
E' solo codice
Enjoy...
--
GbC
http://www.chiappori.net