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

oliveira99

Problema na impressão

15 mensagens neste tópico

Boas!

Estou neste momento a terminar o meu projecto... estou a dar os últimos toques..

O que se passa é o seguinte....  eu quero imprimir uma form... só que tenho o mesmo problema que tinha no vb6 (não imprime até ao fundo da folha)... já estive aqui á procura no forum mas não encontrei nenhum resolução para o problema!

O que tenho é o seguinte no projecto: uma form (a que quero imprimir), com o objecto printform e no form load tenho o seguinte código:

PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)

Existe alguma solução para contornar este problema, para imprimir numa folha A4 até ao fundo... eu exprimentei num computador de maior resolução e já imprime direito, mas no meu já não (que tem uma resolução mais baixa, o que faz com que a form não atinja o tamanho no outro computador!)

Aguardo respostas!

Obrigado pelo vosso contributo!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para obter resultados exactos, nada melhor que seres tu mesmo a desenhar o que queres que saia na folha.

Dá uma vista de olhos por aqui.

Se precisares de mais que uma folha, a lógica terá que ser um pouco diferente, mas gira em torno do HasMorePages (para pesquisares se quiseres)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para obter resultados exactos, nada melhor que seres tu mesmo a desenhar o que queres que saia na folha.

Dá uma vista de olhos por aqui.

Se precisares de mais que uma folha, a lógica terá que ser um pouco diferente, mas gira em torno do HasMorePages (para pesquisares se quiseres)

obrigado pela resposta!

Mas dizes desenhar a folha atraves de codigo não é?

cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois. Assim é que te fica exactamente como queres.

Se precisares de exemplos posso fazer uns.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois. Assim é que te fica exactamente como queres.

Se precisares de exemplos posso fazer uns.

sim dava bastante jeito! E permite ajutar a posicao de cada item?

obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Permite fazer e meter tudo quanto te apetecer.

Vou fazer uma factura, que é rica em exemplos para fazeres tudo.

Faço assim que tiver tempo, e posto aqui um link.

Vai verificando.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Permite fazer e meter tudo quanto te apetecer.

Vou fazer uma factura, que é rica em exemplos para fazeres tudo.

Faço assim que tiver tempo, e posto aqui um link.

Vai verificando.

ok obrigado pela disponibilidade!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu sei que te prometi um exemplo de uma factura completa e tal.

Como não tenho grande disponibilidade para te estar a escrever uma de raiz, queria enviar-te uma das que já uso em algumas das minhas aplicações, mas receio que te fosses confundir ainda mais.

Então, resolvi fazer um exemplo genérico com algumas das coisas com que te tens de deparar ao desenhar uma folha.

(Nota que usei DrawIcon e não DrawImage para garantir que aí conseguias ver alguma coisa, mas o DrawImage consegue desenhar-te qualquer bitmap que tenhas declarado)

Public Class Form1
    Private WithEvents PrintDoc As New Printing.PrintDocument
    Private ControloPagina As Integer = 1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim PD As New PrintDialog
        PD.Document = PrintDoc
        PD.ShowDialog()
        PrintDoc.Print()
    End Sub

    Private Sub Pagina(ByVal sender As System.Object, ByVal e As Drawing.Printing.PrintPageEventArgs) Handles PrintDoc.PrintPage
        Dim g As Graphics = e.Graphics

        PrintDoc.OriginAtMargins = False
        PrintDoc.DocumentName = "A minha página"
        g.PageUnit = GraphicsUnit.Millimeter

        Dim FolhaA4 As New Rectangle(0, 0, 210, 297)
        Dim F As New Font("Arial", 6, FontStyle.Regular, GraphicsUnit.Millimeter)
        Dim F2 As New Font("Arial", 3, FontStyle.Regular, GraphicsUnit.Millimeter)

        While ControloPagina <> 6

            g.DrawString("LinhaXPTO", F, Brushes.Black, 5, 10)
            g.DrawString("LinhaXPTO " & ControloPagina, F, Brushes.Black, 5, 24)
            g.DrawIcon(Me.Icon, 5, 32)
            g.DrawLine(Pens.Black, 5, 40, FolhaA4.Width - 5, 40)

            Dim StrTam As SizeF = g.MeasureString(My.Computer.Name, F2)
            g.DrawString(My.Computer.Name, F2, Brushes.Black, (FolhaA4.Width - 5) - StrTam.Width, 55)

            g.DrawString("Página " & ControloPagina & " de 5", F2, Brushes.Red, 5, FolhaA4.Height - 15)
            g.DrawRectangle(Pens.Black, New Rectangle(5, 10, 150, 40))

            ControloPagina += 1

            If ControloPagina = 6 Then
                e.HasMorePages = False
            Else
                e.HasMorePages = True
                Exit Sub
            End If

        End While


    End Sub
End Class

Recomendo o uso de "print to document" como XPS ou o uso de pré-visualização da impressão que o software de algumas impressoras oferece, para evitar gastar folhas em níveis brutais.

Podes desenhar para impressão tudo o que o GDI+ te permite através da classe Graphics.

Dá uma olhadela no resultado do Intellisense no g.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não á problema em relação á factura! Só quero um exemplo para eu ver como funciona e para ver se aprendo a trabalhar com isto!

Eu vou verificar o exemplo que tu me enviaste, a qual agradeço muito!

Obrigado!

Qualquer duvida eu digo alguma coisa!

cumps,

EDIT: Diz-me uma coisa... eu para chamar o " Private Sub Pagina" que valores  é que tenho que passar?

ByVal sender As System.Object, ByVal e As Drawing.Printing.PrintPageEventArgs

Está a dar um erro neste sitio!

cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tens de passar nada.

Provavelmente naão declaraste a PrintDoc com Withevents e o Handle não existe.

Copia o código integralmente e substituí num Form, num projecto novo para veres.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tens de passar nada.

Provavelmente naão declaraste a PrintDoc com Withevents e o Handle não existe.

Copia o código integralmente e substituí num Form, num projecto novo para veres.

testado com sucesso! O problema sao os bastantes campos que tenho a imprimir! diga-me uma coisa, eu necessito de imprimir umas checkbox (cerca de 20)  e 5 radios button, é possivel fazer tal?

obrigado pela disponibilidade!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro.

Só tens de empregar alguma criatividade no desenho.

Desenhar um quadrado e duas diagonais faz lembrar uma checked checkbox, e um círculo com outro círculo preenchido por dentro, mais pequeno, faz lembrar um checked radiobutton.

É tudo uma questão de ciclos, imaginação e um pouco de matemática.

EDIT: Em último caso podes fazer imagens do quadrado e da bolinha das checkboxes e radiobuttons e fazes DrawImage consoante esteja checked ou não. Como disse, é tudo uma questão de imaginação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro.

Só tens de empregar alguma criatividade no desenho.

Desenhar um quadrado e duas diagonais faz lembrar uma checked checkbox, e um círculo com outro círculo preenchido por dentro, mais pequeno, faz lembrar um checked radiobutton.

É tudo uma questão de ciclos, imaginação e um pouco de matemática.

EDIT: Em último caso podes fazer imagens do quadrado e da bolinha das checkboxes e radiobuttons e fazes DrawImage consoante esteja checked ou não. Como disse, é tudo uma questão de imaginação.

Ok!  obrigado por tudo!

Vou praticar os meus "dotes" matematicos  para fazer!

Mais uma vez obrigado!

cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se encalhares em alguma coisa, já sabes onde voltar  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se encalhares em alguma coisa, já sabes onde voltar  ;)

ok!

Cumps,

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