Visualizando a Impressão
Você já esteve na seguinte situação :
"Tenho que gerar uma rotina para visualizar a impressão e imprimir os dados de uma tabela de clientes onde cada cliente tem uma foto associada armazenada em um diretório . Tenho que usar o objeto Printer (ninguém me apresentou este sujeito ainda) e o serviço era para ontem... " .
Sonho ou pesadelo ??? Calma , you´ve got a friend , estamos aqui para realizar seus sonhos e dissipar seus pesadelos ( nossa !!!).
Criando o projeto
Iremos criar um projeto , tentando simular a situação descrita acima. Vamos usar o nosso saco de pancadas, o bom e velho banco de dados Biblio.mdb ( coloquei-o em um diretório c:\teste) . E vamos imprimir os dados da tabela Authors - (Au_id , Author e Year Born) . (again).
Basicamente você deverá fazer o seguinte:
Abrir o banco de dados e a tabela , exibir os dados de cada autor , e , pode associar uma foto a este autor. Feito isto você deverá criar uma rotina para visualizar a impressão dos dados e da foto e outra para imprimir tudo isto.
Quer ver um preview do projeto , ei-lo abaixo:
Estamos usando um controle de dados - Data control - para acessar a base de dados- Biblio.mdb ( é mais simples) ; um controle image1 onde iremos exibir a foto do autor e outro controle picture1 onde iremos visualizar a impressão.
O que vamos fazer é bem simples , vamos imprimir no controle picture os dados do autor e a foto a ele associada permitindo assim a visualização da impressão. A rotina para imprimir irá apenas redirecionar os mesmos dados para a impressora.
Código do Projeto
Código do evento Form_Load : Define o nome e a fonte de dados e os nomes dos botões de comando.
Private Sub Form_Load() Data1.DatabaseName = "c:\teste\biblio.mdb" Data1.RecordSource = "Select * from authors" CommonDialog1.CancelError = True Command1.Caption = "Carregar Imagem" Command2.Caption = "Visualiza Impressão" Command3.Caption = "Imprimir" End Sub |
Código associado ao botão de comando - command1 - Carregar Imagem: Aqui permitimos que o usuário escolha uma imagem e a associa ao autor , sendo exibida no controle image1 ( propriedade stretch = true ). Após a imagem ser carregada , habilitamos o botão de comando para visualizar a impressão e o botão de comando para imprimir ( Command2.Enabled = True , command3.Enabled = True )
Private Sub Command1_Click() Dim sFileFilter As String On Error GoTo Erro_trata sFileFilter = "Bitmap Files (*.bmp)|*.bmp|" sFileFilter = sFileFilter & "GIF Files (*.gif)|*.gif|" sFileFilter = sFileFilter & "Icon Files (*.ico)|*.ico|" sFileFilter = sFileFilter & "JPEG Files (*.jpg)|*.jpg|" sFileFilter = sFileFilter & "Windows MetaFiles (*.wmf)|.wmf" With CommonDialog1
Command3.Enabled = True |
Código associado ao botão de comando - command2 - Visualizar Impressão - Aqui apenas enviamos os dados da rotina PrintRoutine para o controle Picture1
Private Sub Command2_Click() Dim dRatio As Double dRatio = ScalePicPreviewToPrinterInches(Picture1) PrintRoutine Picture1, dRatio End Sub |
Código associado ao botão de comando - command2 - Visualizar Impressão - Repetimos a impressão direcionando-a para o objeto Printer.
Private Sub Command3_Click() Printer.ScaleMode = vbInches PrintRoutine Printer Printer.EndDoc End Sub |
Código da rotina de impressão - PrintRoutine : Imprimimos primeiro a imagem usando o objeto PaintPicture , depois imprimimos um título - Dados do Autor e finalmente imprimimos os dados do autor selecionado:
Private Sub PrintRoutine(objPrint As Object, Optional Ratio As Double = 1) col = 5 ' dimensoes em polegadas objPrint.PaintPicture Image1, 3, 3, 2.8, 2.8 objPrint.Print objPrint.Print objPrint.Print ' Titulo relatorio With objPrint .Font.Name = "Arial" .CurrentX = 1.3 .CurrentY = 0.3 .FontSize = 40 * Ratio .Print "Dados do Autor" End With objPrint.FontName = "Arial" objPrint.FontSize = "11" '---------------imprime os dados da tabela---------------------------- objPrint.Print Tab(col); Data1.Recordset(0) ' Au_ID objPrint.Print Tab(col); Data1.Recordset(1) ' Author objPrint.Print Tab(col); Data1.Recordset(2) ' Year Born '-------------------------------------------- End Sub |
Vale lembrar que referenciamos em nosso projeto a biblioteca Microsof DAO Object Library 3.6 e que para cada caixa de texto definimos as propriedades DataSource como Data1 ( o controle de dados ) e a propriedade DataField relacionada com cada campo da tabela a ser exibida.
O resultado obtido pode ser o que exibimos a seguir:
Pegue o projeto aqui => visualizando a impressão.
Obs: Este projeto foi adaptado de um artigo da Microsoft ( Permitindo a visualização da impressão)
Inté ,