Newsgroup: it.comp.lang.visual-basic
Titolo: Come controllare il ritorno a capo

Profano dilettante con Vb6 chiede (ancora) come risolvere questo dilemma:
Ho una Texbox impostata su Multiline un pulsante per mandare in stampa il
suo contenuto,
ho creato una funzione che riconosce gli spazi e mi manda a capo
automaticamente quando si supera le dimensioni di stampa consentite, tutto
funziona bene...ma quando nel testo viene premuto INVIO il testo viene
stampata senza rispettare la posizione Currentx andando al margine sinistro
estremo e non c'è verso di controllarne la posizione.
Come fare? Dato che il codice è cortissimo eccolo quì sotto.
Grazie a chi mi illumina
Jankie
'----------------------------
Dim StringToPrint As String
'-----------------------------
Function GetWord$()
If InStr(StringToPrint, " ") = 0 Then
GetWord$ = StringToPrint
StringToPrint = " "
Else
GetWord$ = Left$(StringToPrint, InStr(StringToPrint, " "))
StringToPrint = Right$(StringToPrint, Len(StringToPrint) -
InStr(StringToPrint, " "))
End If
End Function
'-------------------------
'per comodità stampo sulla form1 perchè con la stampante fa la stessa cosa,
'la procedura, se debordo a destra, manda il resto testo a capo
'------------------------
Private Sub Command1_Click()
Finestra% = 3500   'stabilisco la larghezza finestra
Xvalue = 750         'stabilisco dove inizia la stampa
Yvalue = 50
        Form1.CurrentY = Yvalue      'posizione in altezza
        StringToPrint = TextBox1.Text   'assegno il contenuto text alla
variabile che la funzione sopra tratterà
        PrintLine$ = ""   'questa variabile la userò per montare la riga
incollando ciò che arriva dalla funzione (la pulisco...)
        NextWord$ = GetWord$()  'applico la funzione e l'assegno a NextWord$
    Do While NextWord$ <> ""  'ciclo fintanto che la funzione mi restituisce
una parola intera
        Temp$ = PrintLine$ + NextWord$      'uso Temp$ per incollare una
nuova aggiunta
    If Form1.TextWidth(Temp$) > Finestra%  Then    'se la riga supera le
dim. consentite...
        Form1.CurrentX = Xvalue    'imposto la posizione di inizio stampa
orizzontale
        Form1.Print PrintLine$        'stampa la variabile PrintLine$  senza
NextWord$ che non ci sta
        PrintLine$ = NextWord$      'ora la parola che non ci stava è
assegnata alla variabile PrintLine$
    Else
        PrintLine$ = Temp$             ' se non viene superata la larghezza
della finestra di stampa si aggiunge ancora una parola
    End If
        NextWord$ = GetWord$()    'la Funz.GeWord$ cambia NextWord$ nella
parola successiva
    Loop
    Form1.CurrentX = Xvalue      'stampa il rimanente contenuto della
textbox sull'ultima riga
    Form1.Print PrintLine$          'posizione in larghezza di inizio stampa
End Sub

 estremo e non c'è verso di controllarne la posizione.
[SNIP]
Intanto spero vivamente che tu utilizzi la dichiarazione obbligatoria di
variabili... se cosi' non e', ti prego, per cortesia, impostala.
Detto questo, se ti ricordi le risposte date a suo tempo su Split, fai
queste modifiche:
Fai in modo che la funzione GetWord prenda un parametro in input che
rappresenta la stringa da analizzare ed usa questo internamente alla
funzione al posto di StringToPrint.
A questo punto nella funzione principale, dopo aver assegnato StringToPrint
= TextBox1.Text, genera un array di stringe utilizzando Split e vbCrLf come
separatore; tutto il resto del codice deve quindi essere eseguito in un
ciclo For che va da 0 al numero di elementi (UBound) dell'array generato,
facendo attenzione che le chiamate a GetWord() diventino qualcosa di simile
a GetWord(array(i)) (ovvero analizzo non piu' l'intera stringa, ma ogni
singola riga ricavata dall'array)
A questo punto funziona tutto, ho gia' provato di persona.
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 variabile che la funzione sopra tratterà
In alternativa alla soluzione di Luca Dormio, potresti fare una Replace
per eliminare tutti i VBCrLf (qualcosa del genere, vado a occhio):
StringToPrint  = Replace(StringToPrint , vbCrLf, " ")
Bye, G.

 > estremo e non c'č verso di controllarne la posizione.


 > estremo e non c'č verso di controllarne la posizione.


 > singola riga ricavata dall'array)
In Command1_Click dichiara quindi
Dim HardLines() As String, i As Long
e dopo l'istruzione StringToPrint = TextBox1.Text aggiungi
'genera tutti i paragrafi separati da un ritorno a capo esplicito.
HardLines = Split(StringToPrint, vbCrLf)
'Applichiamo il procedimento esistente, ma paragrafo per paragrafo
For i = 0 To UBound(HardLines)
    '[...] qui lasci tutto il resto del codice invariato tranne che per una
cosa;
    'tutte le chiamate a GetWord$(), se non sbaglio 2, devono diventare
    'GetWord$(HardLines(i))
Next
Tutto qui
