Newsgroup: it.comp.lang.visual-basic
Titolo: Margini richtexbox

Salve NG,
premetto che ho cercato su google e sui gruppi prima di postare, ma nisba...
Ho un richtextbox che riempio scrivendo un testo nella proprietą TextRTF,
setto i margini e stampo
rtb1.TextRTF = Testo
rtb1.SelStart = 0: rtb1.SelLength = Len(rtb1)  'seleziona tutto il testo
rtb1.SelIndent = 500: rtb1.SelRightIndent = 500 'setta i margini
Printer.Print ""   'per inizializzare l'oggetto printer
rtb1.SelPrint (Printer.hDC)     'stampa il testo
Per i margini sinistro e destro ho googlato ed ho trovato la soluzione di
cui sopra, ma riguardo al margine superiore ed inferiore come fare? Con il
codice qui sopra, la stampa inizia proprio attaccata al margine superiore
della carta e termina (prima di cambiare pagina in automatico) proprio
attaccata al bordo inferiore del foglio, con un risultato estetico
francamente brutto.
Ho provato con le varie proprietą e metodi della famiglia Scale, ma nulla,
sembra non vederle proprio.
Chi mi aiuta a far sģ che su ogni pagina vi siano un bordo superiore ed
inferiore? :))
Grazie dell'attenzione e di eventuali risposte, nonché di altre mille
risposte ai miei problemucci VB che ho risolto grazie ai post di questo NG.
Ciao!

 rtb1.SelPrint (Printer.hDC)     'stampa il testo
da un vecchio post di lupo.
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q146022&
il codice a suo tempo l'avevo provato, perň non so se il link funziona :-)
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Ciao!
il codice sotto e' molto tempo che non lo guardo, ma mi era sembrato
abbastanza flessibile.
-- 
hth, ciao, j.
http://www.sundaysw.com
'form
Private Sub cmdOK_Click()
' 1 CM = 567 TWIPS
On Error GoTo errman
framePrinting.Enabled = True
lblPC.Enabled = True
lblPrintingCopy.Enabled = True
lblPP.Enabled = True
lblPrintingPage.Enabled = True
Dim LM As Long, TM As Long, RM As Long, BM As Long
LM = Val(txtLM) * 567
TM = Val(txtTM) * 567
RM = Val(txtRM) * 567
BM = Val(txtBM) * 567
With frmMain.ActiveForm.RTF
'RTFPrint .Left = .Left
'RTFPrint .Top = .Top
RTFPrint.Width = Width
RTFPrint.Height = Height
RTFPrint.RightMargin = .RightMargin
RTFPrint.SelFontName = .SelFontName
RTFPrint.SelFontSize = .SelFontSize
RTFPrint.SelBold = .SelBold
RTFPrint.SelItalic = .SelItalic
If optPrintAll Then
RTFPrint.Text = .Text
ElseIf optPrintSel Then
RTFPrint.Text = .SelText
End If
End With
RTFPrint.SelLength = 0
PrintRTF RTFPrint, LM, TM, RM, BM
framePrinting.Enabled = False
lblPC.Enabled = False
lblPrintingCopy.Enabled = False
lblPP.Enabled = False
lblPrintingPage.Enabled = False
txtCopies = 1
' Unload Me
Exit Sub
errman:
MsgBox Error
framePrinting.Enabled = False
lblPC.Enabled = False
lblPrintingCopy.Enabled = False
lblPP.Enabled = False
lblPrintingPage.Enabled = False
txtCopies = 1
Exit Sub
End Sub
'modulo
' PRINT RTF
Type Rect
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Type CharRange
cpMin As Long ' First character of range (0 for start of doc)
cpMax As Long ' Last character of range (-1 for end of doc)
End Type
Type FormatRange
hdc As Long ' Actual DC to draw on
hdcTarget As Long ' Target DC for determining text formatting
rc As Rect ' Region of the DC to draw to (in twips)
rcPage As Rect ' Region of the entire DC (page size) (in twips)
chrg As CharRange ' Range of text to draw (see above declaration)
End Type
Global Const WM_USER As Long = &H400
Global Const EM_FORMATRANGE As Long = WM_USER + 57
Global Const EM_SETTARGETDEVICE As Long = WM_USER + 72
Global Const PHYSICALOFFSETX As Long = 112
Global Const PHYSICALOFFSETY As Long = 113
Declare Function GetDeviceCaps _
Lib "gdi32" (ByVal hdc As Long, _
ByVal nIndex As Long) As Long
Declare Function SendMessage _
Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal Msg As Long, _
ByVal WP As Long, lp As Any) As Long
Declare Function CreateDC _
Lib "gdi32" Alias "CreateDCA" _
(ByVal lpDriverName As String, ByVal lpDeviceName As String, _
ByVal lpOutput As Long, ByVal lpInitData As Long) As Long
Public Sub PrintRTF(RTF As RichTextBox, LeftMarginWidth As Long, _
TopMarginHeight, RightMarginWidth, BottomMarginHeight)
On Error GoTo errman
Dim LeftOffset As Long, TopOffset As Long
Dim LeftMargin As Long, TopMargin As Long
Dim RightMargin As Long, BottomMargin As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
Dim J
For J = 1 To Val(frmStampa.txtCopies) ' aggiunto io => # copie
frmStampa.lblPrintingPage = 1
frmStampa.lblPrintingCopy = Val(frmStampa.lblPrintingCopy) + 1
DoEvents
Dim NextCharPosition As Long
Printer.Print Space(1) ' Start a print job to get a valid
Printer.hDC
Printer.ScaleMode = vbTwips
' Get the offsett to the printable area on the page in twips
LeftOffset = Printer.ScaleX(GetDeviceCaps(Printer.hdc, _
PHYSICALOFFSETX), vbPixels, vbTwips)
TopOffset = Printer.ScaleY(GetDeviceCaps(Printer.hdc, _
PHYSICALOFFSETY), vbPixels, vbTwips)
' Calculate the Left, Top, Right, and Bottom margins
LeftMargin = LeftMarginWidth - LeftOffset
TopMargin = TopMarginHeight - TopOffset
RightMargin = (Printer.Width - RightMarginWidth) - LeftOffset
BottomMargin = (Printer.Height - BottomMarginHeight) - TopOffset
' Set printable area rect
rcPage.Left = 0
rcPage.Top = 0
rcPage.Right = Printer.ScaleWidth
rcPage.Bottom = Printer.ScaleHeight
' Set rect in which to print (relative to printable area)
rcDrawTo.Left = LeftMargin
rcDrawTo.Top = TopMargin
rcDrawTo.Right = RightMargin
rcDrawTo.Bottom = BottomMargin
' Set up the print instructions
fr.hdc = Printer.hdc ' Use the same DC for measuring and
rendering
fr.hdcTarget = Printer.hdc ' Point at printer hDC
fr.rc = rcDrawTo ' Indicate the area on page to draw
to
fr.rcPage = rcPage ' Indicate entire size of page
fr.chrg.cpMin = 0 ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' Get length of text in RTF
TextLength = Len(frmStampa.RTFPrint.Text)
Do ' Loop printing each page until done
' Print the page by sending EM_FORMATRANGE message
NextCharPosition = SendMessage(frmStampa.RTFPrint.hwnd,
EM_FORMATRANGE, True, fr)
If NextCharPosition >= TextLength Then Exit Do 'If done
then exit
fr.chrg.cpMin = NextCharPosition ' Starting position for
next page
Printer.NewPage ' Move on to next page
frmStampa.lblPrintingPage = Val(frmStampa.lblPrintingPage) +
1
DoEvents
Printer.Print Space(1) ' Re-initialize hDC fr.hDC =
Printer.hDC
fr.hdcTarget = Printer.hdc
Loop
' Commit the print job
Printer.EndDoc ' Allow the RTF to free up memory
Next J
r = SendMessage(frmStampa.RTFPrint.hwnd, EM_FORMATRANGE, False, ByVal
CLng(0))
Exit Sub
errman:
MsgBox Error
Exit Sub
End Sub


Grazie per  la risposta, sě il link funziona e l'avevo giŕ visto prima di
postare, ma mi sembrava esagerato tutto quel codice solo per i margini
superiore ed inferiore, chiedevo a voi una soluzione piů semplice che
sicuramente c'č solo che a me sfugge...
Ciao!

 semplice che sicuramente c'è solo che a me sfugge...
Se "sicuramente c'e'" allora devono proprio passare le giornate a girarsi i 
pollici sia Javalab che in Microsoft, dato che non hanno trovato di meglio 
da fare che scrivere una paginata di codice al posto di tre righe...
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown 

 da fare che scrivere una paginata di codice al posto di tre righe...
Questa la incornicio ;-)
-- 
ciao, hal

 da fare che scrivere una paginata di codice al posto di tre righe...
grazie. noi labrador notoriamente non abbiamo pollici. in microsoft non so
cosa facciano con le loro dita, e se per caso accettano i suggerimenti che
gli arrivano da ogni parte del mondo non voglio nemmeno saperlo :)
il nucleo di quel codice l'avevo trovato, e benche' avessi poi cercato non
avevo scoperto l'autore, di area spagnola.
il codice in se' e' da guardarselo un po', pero' perfino io che non uso
mai printer e stampo solo su file avevo visto che con una implementazione
paziente funzionava molto bene. spero sia utile a qualcun altro. e' il
bello di internet.
poi magari il rtb ha una .PrintUpperMargin :)
ciao, j.
-- 
