Jump to content

Recommended Posts

Posted

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!

Posted

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)

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Posted

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,

Posted

Pois. Assim é que te fica exactamente como queres.

Se precisares de exemplos posso fazer uns.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Posted

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.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Posted

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!

Posted

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.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Posted

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,

Posted

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.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Posted

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!

Posted

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.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Posted

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,

Posted

Se encalhares em alguma coisa, já sabes onde voltar  😉

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.