Imprimindo o conteúdo de um controle ListView  

Neste artigo vamos mostra como imprimir o conteúdo de um controle ListView. Vamos apenas nos ater na rotina de impressão , se você quiser saber mais sobre o controle ListView leia :

  1. Usando o Controle Listview I
  2. Usando o Controle Listview II

A função para imprimir o ListView é dada abaixo.

Public Sub PrintListView(LV As ListView, Lines%)
Dim i%, LVWidth%, NewTab%, j%
Dim itmX As ListItem
Dim ContaLinha%
  
  LVWidth = 0
  For i = 1 To LV.ColumnHeaders.Count
     LVWidth = LVWidth + LV.ColumnHeaders(i).Width
  Next
  NewTab = 0
   'imprime o cabeçalho
  For i = 1 To LV.ColumnHeaders.Count
      NewTab = NewTab + CInt(LV.ColumnHeaders(i).Width * Printer.ScaleWidth / LVWidth)
      Printer.Print LV.ColumnHeaders(i).Text;
      Printer.CurrentX = NewTab
  Next
  'imprime uma linha de separação
  Printer.Print
  imprime_linha
  Printer.Print
  'se o numero de linhas do ListView for maior que o de linhas a
  'a imprimir então imprime o conteúdo total de Listview
  If Lines < LV.ListItems.Count And Lines <> 0 Then
       ContaLinha = Lines
   Else
       ContaLinha = LV.ListItems.Count
   End If
  'imprime os itens e subitens
  For i = 1 To ContaLinha
       NewTab = 0
       Set itmX = LV.ListItems(i)
       Printer.Print itmX.Text;
       For j = 1 To LV.ColumnHeaders.Count - 1
             NewTab = NewTab + CInt(LV.ColumnHeaders(j).Width * Printer.ScaleWidth / LVWidth)
             Printer.CurrentX = NewTab
             Printer.Print itmX.SubItems(j);
       Next
       Printer.Print
  Next
  'envia os dados para impressora
  Printer.EndDoc
End Sub

Você chama a função PrintListView passando como parãmetros o nome do controle ListView e o número de linhas a imprimir. Se o número de linhas informado for maior que o numero de linhas do controle ListView , então imprime o contéudo total do ListView. Exemplo: para imprimir 10 linhas do controle Listview1 chamamos a função assim:

Call PrintListView(ListView1 , 10 )

Usamos também a rotina para imprimir uma linha de separação para o cabeçalho :

Private Sub imprime_linha()
Dim linha As String
linha = "-"

Printer.CurrentX = 0
While Printer.CurrentX + Printer.TextWidth(linha) <= Printer.ScaleWidth
     Printer.Print linha;
Wend

End Sub

Para ilustrar temos abaixo a tela de um projeto exemplo que usa a função . No código o número de linhas a imprimir esta fixo (10 linhas) apenas para mostrar que a rotina funciona. Você pode expandir e melhorar o código usando o seu talento nato...

Clique aqui para pegar o código completo do exemplo acima: Imprimindo ListView.

Até mais...