Ir para conteúdo
Fórum Script Brasil
  • 0

Alinhar Coluna A Direita


cyberalexxx

Pergunta

estou tentando criar um relatório no VB 2005, como ele não possui o Data Report e eu não tenho crystal estou usando o namespace System.Drawing.Printing

Alguém sabe como alinhar uma coluna a direita no relatório, segue abaixo código do relatório, a coluna em vermelho é a que eu quero alinhar

Public Class Impressao

    Private RsProdutos As New ADODB.Recordset

    Private paginaAtual As Integer = 1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim sql As String

        sql = "Select cod_prod, descricao, qtde from itens where nf=" & nf.Text & " and volume='" & vol.Text & "'"

        If conecta.State <> 1 Then

            conecta.Open("dsn=conexoes")

        End If

        RsProdutos = conecta.Execute(sql)

        Do While Not RsProdutos.EOF

            Dim documento As New Printing.PrintDocument

            AddHandler documento.PrintPage, AddressOf Me.relatorio

            Dim objPrintPreview As New PrintPreviewDialog

            With objPrintPreview

                .Document = documento

                .WindowState = FormWindowState.Maximized

                .PrintPreviewControl.Zoom = 1

                .Text = "Volume de carga"

                .ShowDialog()

            End With

        Loop

        RsProdutos.Close()

        RsProdutos = Nothing

        conecta.Close()

    End Sub

    Private Sub relatorio(ByVal sender As Object, ByVal Relatorio As System.Drawing.Printing.PrintPageEventArgs)

        Dim codigoproduto As String

        Dim produto As String

        Dim qtdade As Integer

        Dim margemEsq As Single = Relatorio.MarginBounds.Left

        Dim margemSup As Single = Relatorio.MarginBounds.Top

        Dim margemDir As Single = Relatorio.MarginBounds.Right

        Dim margemInf As Single = Relatorio.MarginBounds.Bottom

        Dim fonteTitulo, fonteRodape, fonteNormal, fontecoluna As Font

        fonteTitulo = New Font("Verdana", 15, FontStyle.Bold)

        fonteRodape = New Font("Verdana", 8)

        fonteNormal = New Font("Verdana", 10)

        fontecoluna = New Font("Verdana", 10, FontStyle.Bold)

        Relatorio.Graphics.DrawLine(Pens.Blue, margemEsq, 60, margemDir, 60)

        Relatorio.Graphics.DrawLine(Pens.Blue, margemEsq, 120, margemDir, 120)

        Relatorio.Graphics.DrawString("NOME DA EMPRESA Ltda.", fonteTitulo, Brushes.Blue, margemEsq, 60, New StringFormat())

        Relatorio.Graphics.DrawString("Volume de Cargas", fonteTitulo, Brushes.Blue, margemEsq, 87, New StringFormat())

        Relatorio.Graphics.DrawString("Código", fontecoluna, Brushes.Red, margemEsq, 140, New StringFormat())

        Relatorio.Graphics.DrawString("Produto", fontecoluna, Brushes.Red, margemEsq + 100, 140, New StringFormat())

        Relatorio.Graphics.DrawString("Quantidade", fontecoluna, Brushes.Red, margemEsq + 500, 140, New StringFormat())

        Relatorio.Graphics.DrawLine(Pens.Blue, margemEsq, 170, margemDir, 170)

        Dim linhasporpagina As Integer

        Dim linhaatual As Integer = 5

        Dim posicaodalinha As Integer

        linhasporpagina = Relatorio.MarginBounds.Height / fonteNormal.GetHeight(Relatorio.Graphics) - 1

        While (linhaatual < linhasporpagina And Not RsProdutos.EOF())

            posicaodalinha = margemSup + (linhaatual * fonteNormal.GetHeight(Relatorio.Graphics))

            codigoproduto = RsProdutos.Fields("cod_prod").Value

            produto = RsProdutos.Fields("descricao").Value

            qtdade = RsProdutos.Fields("qtde").Value

            Relatorio.Graphics.DrawString(codigoproduto, fonteNormal, Brushes.Black, margemEsq, posicaodalinha, New StringFormat())

            Relatorio.Graphics.DrawString(produto, fonteNormal, Brushes.Black, margemEsq + 100, posicaodalinha, New StringFormat())

            Relatorio.Graphics.DrawString(qtdade, fonteNormal, Brushes.Black, margemEsq + 500, posicaodalinha, New StringFormat())

            linhaatual += 1

            RsProdutos.MoveNext()

        End While

        'rodape

        Relatorio.Graphics.DrawLine(Pens.Black, margemEsq, margemInf, margemDir, margemInf)

        Relatorio.Graphics.DrawString(System.DateTime.Now, fonteRodape, Brushes.Black, margemEsq, margemInf, New StringFormat())

        Relatorio.Graphics.DrawString("Pag. " & paginaAtual.ToString, fonteRodape, Brushes.Black, margemDir - 50, margemInf, New StringFormat())

        paginaAtual += 1

        If Not RsProdutos.EOF Then

            Relatorio.HasMorePages = True

        Else

            Relatorio.HasMorePages = False

        End If

    End Sub

End Class

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Bom, sabendo o tamanho, em pixels, do texto e o tamanho máximo (do lado direito) basta subtrair um do outro. O exemplo abaixo desenha os valores alinhados no form:

        Dim g As Graphics = Me.CreateGraphics()

        Dim valores() As String = {"1.26", "12.61", "126.12"}
        Dim posx, posy As Single
        Dim limite As Single = 100
        Dim fonte As New Font("Tahoma", 10)

        For Each valor As String In valores
            posx = limite - g.MeasureString(valor, fonte, 1000).Width
            posy = posy + 15
            g.DrawString(valor, fonte, Brushes.Black, posx, posy)
        Next

Faça um teste com o código acima (coloque-o no evento click de um botão em um form vazio) e veja se você entende o funcionamento dele.

Qualquer dúvida, 'stamos aí.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...