• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JLDR

[VB 2005 Express] Sistema de impressão - Exemplo muito simples

12 mensagens neste tópico

Sistema de impressão - Exemplo muito simples

Ora bolas! Tava habituadinho a trabalhar com a porcaria dos DataReports do VB6 e agora não há nada disso no VB.NET!  :bye2: Tem que ser tudo (ou praticamente tudo) metido à unha  :bored:

Depois de muito procurar pela net um exemplo simples que me permitisse chegar à ideia base do novo formato de impressão, acabei por ficar ainda mais confuso do que estava. Só depois de algumas experiências é que consegui "perceber" como funciona. Por isso trouxe aqui aquele que considero ser o exemplo mais simples de como imprimir qualquer coisa no VB 2005 Express.

A ideia é apenas ter o exemplo mais simples, uma vez que depois existe um número vasto de comandos que agora não vêem ao caso.

Criem um novo aplicativo e na Toolbox procurem a área Printing. Dentro dessa área existem 6 objectos. Para o nosso exemplo vamos apenas usar 2. Clica e arrasta para cima da form um objecto PrintDocument e outro PrintPreviewDialog. O primeiro será para construir a página para impressão e o segundo, embora não seja necessário para imprimir nada, serve para fazer uma pré-visualização do documento.

Coloquem também um Button para exibirmos a previsualização do documento.

Ao arrastar os objectos para a form vamos reparar que eles ficam fora dela, na barra imediatamente por baixo do espaço de trabalho:

image1dy9.jpg

Se clicarem sobre cada um dos objectos terão as propriedades ao lado. Atribuam o nome como mostra a figura (PrintDocument -> Documento  |  PrintPreviewDialog ->Previsualizar)

Agora vamos ao código. (o mais simples possível)

....................................................
Public Class Form1
    
    Dim TipoLetra As New Font("Verdana", 10)

    Private Sub Documento_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles Documento.PrintPage
        e.Graphics.DrawString("Esta frase vai ser impressa no documento.", TipoLetra, Brushes.Black, 30, 30, New StringFormat())
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Previsualizar.Document = Documento
        Previsualizar.Show()
    End Sub
End Class

....................................................

Ao clicar no Button1, teremos acesso ao seguinte quadro:

image2rz1.jpg

O QUE ACONTECE NO CÓDIGO?

Bem, genericamente foi feito o seguinte:

Inicialmente foi definido um objecto TipoLetra As New Font("Verdana",10). Este objecto é necessário para definir o tipo de letra para impressão (Família,tamanho).

Depois surge o evento Private Sub Documento_PrintPage que é a rotina onde vai ser construído o documento. No caso, o objecto e permite enviar instruções para a página do documento... e.Graphics.DrawString(<frase>,<Tipo de Letra>, <Cor>, <coordenada X>, <coordenada Y>, Formato string por defeito)

No evento Click do Button1 definimos que o documento para o objecto de previsualização é o objecto Documento e depois simplesmente ordenamos para mostrar a prévisualização do mesmo.

Isto serviu apenas para mostrar aquilo que me pareceu explicado de forma muito complexa para quem queria apenas ver uma linha apresentada no documento.

A salientar:

- o sistema de coordenadas em DrawString... x,y permite definir a localização exacta em píxeis onde queremos colocar o texto.

- Para além de DrawString, existe ainda DrawLine, DrawRectangle, etc. etc... Muita margem de manobra sobre o espaço.

- O sistema é praticamente livre para a nossa criatividade, mas tem o handicap de termos que "dar ao dedo" para fazer tudo de raíz.

Venha de lá o vosso contributo para aumentar isto.

Cumps :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas!

Outra forma de imprimir.

Usa o programa associado ao tipo de documento para imprimir.

        Dim strFile As String = "c:\test.xls"
        Dim objProcess As New System.Diagnostics.ProcessStartInfo

        With objProcess
            .FileName = strFile
            .WindowStyle = ProcessWindowStyle.Hidden
            .Verb = "print"

            .CreateNoWindow = True
            .UseShellExecute = True
        End With
        Try
            System.Diagnostics.Process.Start(objProcess)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa tarde.

É pena dar imenso trabalho a estruturar o relatório.  :bored:

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

será que podes por aqui um pequeno exemplo de imprimir os dados de uma tabela?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa noite.

acao não há nada melhor do que experimentar e aprender por nós próprios. Para responder á tua pergunta, sim dá trabalho, e sugiro que sigas o exemplo deste tópico, mais o artigo escrito pelo bioshock, adaptando o código de acordo com as tuas necessidades, para teres essa noção por ti próprio.

Eu também tinha e ainda tenho várias dúvidas, relativamente ao tema do tópico, mas com a ajuda do mesmo mais o link em questão, e mais alguma pesquisa no google, consegui resolver grande parte delas, de acordo com aquilo que eu preciso no dia-a-dia, ao ponto de momento e correndo o risco de ser offtopic  o que me falta e tendo como exemplo o link em questão, e o exemplo dos relatórios em access é na mesma página colocar mais do que um registo, isto só para veres que requer alguma prática e pesquisa por nós próprios.

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa noite.

acao não há nada melhor do que experimentar e aprender por nós próprios. Para responder á tua pergunta, sim dá trabalho, e sugiro que sigas o exemplo deste tópico, mais o artigo escrito pelo bioshock, adaptando o código de acordo com as tuas necessidades, para teres essa noção por ti próprio.

Eu também tinha e ainda tenho várias dúvidas, relativamente ao tema do tópico, mas com a ajuda do mesmo mais o link em questão, e mais alguma pesquisa no google, consegui resolver grande parte delas, de acordo com aquilo que eu preciso no dia-a-dia, ao ponto de momento e correndo o risco de ser offtopic  o que me falta e tendo como exemplo o link em questão, e o exemplo dos relatórios em access é na mesma página colocar mais do que um registo, isto só para veres que requer alguma prática e pesquisa por nós próprios.

Cumprimentos.

[/quote

boas

sou novato, sou como o pedinte mas lá virá o dia de retribuir.

agradeço qualquer ajuda seja ela boa ou não.

acções de psicologia não fazem o meu gosto, se pedi ajuda é porque necessito dela, escrever porque aumentamos o numero de mensagens e engordamos a db do forum também não será boa opção.

cumps

acao

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas

sou novato, sou como o pedinte mas lá virá o dia de retribuir.

agradeço qualquer ajuda seja ela boa ou não.

acções de psicologia não fazem o meu gosto, se pedi ajuda é porque necessito dela, escrever porque aumentamos o numero de mensagens e engordamos a db do forum também não será boa opção.

cumps

acao

Bom dia.

Antes de mais nada corrige o teu post.

Amigo agora estiveste muito mal, comentários desses são desnecessários... É pena que assim penses... :) .

Eu quando começei também era novato, alías ainda tenho muito que aprender e ainda nem sequer chego aos calcanhares de muito boa gente que por aqui anda, mas não é por isso que não vou tentar por mim próprio, praticando um pouco todos os dias.

"Acções de psicologia"????. "Aumentar o número de mensagens e engordar a db do forum"???? Amigo volta a ler o post, e diz-me lá se é como tu dizes acções de psicologia ou se é uma tentativa para te ajudar?.

O saber não ocupa o lugar e tal como tu á mais gente que também recorre a este site a pedir ajuda, eu sou um deles, de tempos a tempos também peço ajuda, mas antes de a pedir, já fiz alguma pesquisa na net, e testei algumas possibilidades para resolver o problema por mim próprio, portanto testa a informação disponibilizada anteriormente e depois vem falar comigo.  :)

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda bem que disseste o que disseste @acao :)

?

...

De qualquer maneira para o caso de surgir mais alguém que precise de ajuda na questão dos relatórios.  E para a informação disponibilizada anteriormente, dependendo daquilo que precisa, é uma questão de trabalhar com o sistema de coordenadas (x,y).

Cumprimentos. 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora