Newsgroup: it.comp.lang.visual-basic
Titolo: Come cancellare una scritta su un oggetto printer

Stampando una griglia con un oggetto printer, poiche' delle colonne
"sbordavano" in quelle successive a causa di stringhe da stampare troppo
lunghe rispetto allo spazio a disposizione.
A questo punto ho tentato di cancellare la parte "Invadente" con
una istruzione di LINE (con parametri ...step(...), vbWhite, BF)
Con Sorpresa ho scoperto che istruzioni di questo tipo non cancellano il
testo ma solo eventuali altre line precedentemente fatte.
Per semplificare il tutto con un esempio mi trovo in una situazione del
tipo:
Private Sub Command1_Click()
   Printer.Print "STRINGA QUALSIASI"
   Printer.FillStyle = vbFSSolid
   Printer.ForeColor = vbWhite
   Printer.Line (1500, 0)-Step(1000, 400), , BF
   Printer.EndDoc
End Sub
dove "stringa qualsiasi"  supera il limite di 1500 a lei assegnato ma
il tentativo di pulizia non pulisce niente.
Come potrei fare ad ottenere l'effetto desiderato di pulizia della
parte di "stringa qualsiasi" che supera 1500.
Grazie in anticipo
Gianluigi Masciulli

 testo ma solo eventuali altre line precedentemente fatte.
Io mi sono sorpreso ma non troppo:
Personalmente ho sviluppato soffisticate stampe (con preview) su Vb 3.0 con
ottimi risultati. Quando ho fatto il porting su VB5 hanno miracolosamente
smesso
di funzionare, o meglio, davano di matto. In realta' il mio codice era
giusto, ma
l'oggetto printer e' bucato peggio di un formaggio svizzero!!!!!
Hai provato ad installare il Service Pack? (ps: io ancora no)
Hi, Ciao
Ettore           By -MES-

Hai provato ad installare il Service Pack? (ps: io ancora no)
Ho istallato il servivce pack 3 (l'ultimo) su vb5 ma non mi risultano
per il vb4 dove ho avuto questi problemi.
Conosci per caso qualche sistema (oppure qualcun'altro nel NG lo conosce)
per fare questo lavoro di pulitura degli sbordamenti magari con altre
istruzioni diverse dal line?
Magari un sistema per rendere lo sfondo dei caratteri non trasparente ma
bianco in modo da ricoprire con le successiva colonna lo sbordamento della
precedente.
Ogni aiuto e' benvenuto!( e grazie in anticipo)
Gianluigi Masciulli


 precedente.
Guarda, come probabilmente avrai gia scoperto, se imposti
Printer.FontTrasparent=FALSE ottieni il risultato che il font
copre lo sfondo (in vb5 senza SP non mi va!).
Un'altra soluzione molto valida e' quella di usare, per le print, una bella
API windows.
Di seguito un esempio:
'------------------------ INIZIO ESEMPIO -----------------------
Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Public Const ETO_CLIPPED = 4
Public Const ETO_GRAYED = 1
Public Const ETO_OPAQUE = 2
Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal x1 As Long,
ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long
Declare Function ExtTextOut Lib "gdi32" Alias "ExtTextOutA" (ByVal hdc As
Long, ByVal x As Long, ByVal y As Long, ByVal wOptions As Long, lpRect As
RECT, ByVal lpString As String, ByVal nCount As Long, ByVal lpDx As Long)
As Long
Sub main()    
    Dim Rc As RECT
    Dim x1&, y1&, x2&, y2&
    Dim S$
 
    x1 = 200: y1 = 200: x2 = 300: y2 = 300
    S$ = "La Scritta troppo lunga 1234567890"
    ' Creo la zona di clipping
    Call SetRect(Rc, x1, y1, x2, y2)
    ' Inizializzo la stampante    
    Printer.Print "";
    ' Questo Print e' in clipping
    Call ExtTextOut(Printer.hdc, x1, y1, ETO_CLIPPED, Rc, S$, Len(S$), 0)
   'Questo Print No
   Printer.ScaleMode = vbPixels
   Printer.CurrentX = x1
   Printer.CurrentY = y1+30
   Printer.Print S$;
End Sub
'------------------------ FINE ESEMPIO -----------------------
Nell'sesempio qui sopra uso la funzione API ExtTextOut per fare una print
con Clipping, l'area
di Clip viene definita come rettangolo (Rc).
IMPORTANTE: La funzione API ExtTextOut() usa come sistema di misura i
Pixels, quindi
o converti i Twips in Pixel, o ragioni tutto in pixel.
