Buongiorno a tutti,
Premesso che sto usando un controllo data e una DBGrid, ho un probema nella stampa
Per quanto riguarda le righe orrizzontali tutto funziona...nelle righe verticali no.
Non le impacca come dovrebbe, mi fa solo alcune righe nel mezzo del testo...Perchè?
So che sto sbagliano qualche cosa ma non capisco dove.
Vi posto il codice, sperando aver capito come si fa![]()
Se c'è qualcuno che riesce a capire dove sbaglio!
Grazie
codice:Function pad1(stringa As String, lung As Integer) As String pad1 = Left$(stringa & Space(lung), lung) End Function Function valida(dato As Variant) As String Select Case VarType(dato) Case vbNull: valida = vbNullString Case vbInteger: valida = CStr(dato) Case Else: valida = dato End Select End Function Private Sub Stampa() Screen.MousePointer = vbHourglass Dim aColWidth(10) As Integer, aPosVLine(10) As Integer Dim sHeader As String, bar As String, riga As String Dim ws As Workspace, db As Database, tb As Recordset Dim i, msup, msin, mdes, colx As Integer Dim maxr, rec, righe, pag As Integer bar = Chr(32) For i = 0 To 10 aColWidth(i) = CInt(Array(15, 15, 18, 16, 8, 8, 15, 8, 11, 11, 18)(i)) sHeader = sHeader + bar + pad1(DBGrid1.Columns(i).Caption, aColWidth(i)) aPosVLine(i) = msin + aColWidth(i) + 1 msin = aPosVLine(i) Next Set ws = DBEngine(0) Set db = ws.OpenDatabase(Data1.DatabaseName) Set tb = db.OpenRecordset(Data1.RecordSource) tb.MoveLast tb.MoveFirst Printer.Orientation = vbPRORPortrait Printer.FontName = "Courier" Printer.FontSize = 10 Printer.ScaleMode = vbCharacters mdes = Int(Printer.ScaleWidth) maxr = Int(Printer.ScaleHeight) - 10 If maxr > tb.RecordCount Then maxr = tb.RecordCount msin = (mdes - Len(sHeader)) / 2 colx = msin + 1 For pag = 1 To tb.RecordCount Step maxr Printer.CurrentY = 1 Printer.Print Tab(colx); DBGrid1.Caption; " (pagina"; Str(pag \ maxr + 1); ")" Printer.Print msup = Printer.CurrentY + 1 If tb.RecordCount - righe < maxr Then maxr = tb.RecordCount - righe Printer.CurrentY = msup + 0.04 Printer.Print Tab(colx); sHeader Printer.CurrentY = Printer.CurrentY + 0.04 Printer.Print For rec = 1 To maxr riga = "" For i = 0 To tb.Fields.Count - 1 riga = riga + bar + pad1(valida(tb.Fields(i)), aColWidth(i)) Next i Printer.CurrentY = Printer.CurrentY + 0.04 Printer.Print Tab(colx); riga righe = righe + 1 tb.MoveNext Next rec Printer.Line (msin, msup)-Step(Len(sHeader), 1), , B For i = 1 To maxr Printer.Line (msin, msup + i + 1)-Step(Len(sHeader), 1), , B Next i For i = 0 To tb.Fields.Count - 2 Printer.Line (msin + aPosVLine(i), msup)-Step(0, maxr + 2) Next i Printer.NewPage Next pag Printer.EndDoc tb.Close db.Close Set tb = Nothing Set db = Nothing Set ws = Nothing Screen.MousePointer = vbDefault End Sub

Rispondi quotando