Retângulos, linhas e bordas em relatórios
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Os relatórios possuem um método chamado Line, que nos permite criar formas retangulares, em qualquer posição.
O método Line tem a seguinte sintaxe:
Line (esquerda, topo)-(esquerda, topo), Cor, B
Observe que temos que indicar duas coordenadas para definir a posição e o tamanho do retângulo desejado: Esquerda significa o quanto a coordenada deverá estar afastada do canto esquerdo do relatório e Topo significa o quanto deverá estar afastada da parte superior do relatório. A contagem é a partir das margens.
Exemplo:
me.Line (0,0) - (567,1134), vbRed, B
O resultado é este que você vê na imagem:
O VBA possui uma unidade de medida, chamada Twip, que equivale a 1/20 de um ponto ou 1/1.440 de uma polegada. Existem 567 Twips em um centímetro. Os valores 567 e 1134 da coordenada acima estão em Twips.
Para facilitar a nossa compreensão, podemos trabalhar com valores em centímetros , bastando para isso, multiplicar o valor por 567 Twips. Nosso exemplo acima, fica assim:
me.Line (0,0) - (567 * 1, 567 * 2), vbRed, B
Ou seja, nossa segunda coordenada tem 1 cm afastada da esquerda e 2cm afastada do topo.
Podemos criar diversos retângulos no relatório. Exemplo de dois retângulos:
me.Line (0,0) - (567 * 1, 567 * 2), vbRed, B
me.Line (567 * 0.3, 567 * 0.5) - (567 * 2.3, 567 * 3.5), vbBlue, B
Veja o resultado na imagem abaixo! O retângulo azul medindo 2cm x 3cm e afastado 0.3 cm da lateral esquerda e a 0.5 cm do topo.
Podemos alterar a largura da linha, através do propriedade DrawWidth. Este valor é medido em Pixel que vai de 1 pixel (padrão) a 32767 pixels. Exemplo:
me.DrawWidth = 8 'pixels
me.Line (0,0) - (567 * 1, 567 * 2), vbRed, B
me.DrawWidth = 1 'pixel
me.Line (567 * 0.3, 567 * 0.5) - (567 * 2.3, 567 * 3.5), vbBlue, B
Observe bem a largura da linha do retângulo vermelho em relação a do Azul:
Para preencher o retângulo, basta acrescentar um F depois do B. Exemplo:
me.Line (0,0) - (567 * 1, 567 * 2), vbRed, BF
Agora, veja o resultado:
Podemos criar um retângulo bem estreito, que dá para usá-lo como linha. Exemplo:
Me.Line (567 * 1, 567 * 1)-(567 * 1.02, 567 * 4), vbRed, B 'linha na vertical
Me.Line (567 * 2, 567 * 2)-(567 * 6, 567 * 2.03), vbRed, B 'linha na horizontal
Veja o resultado na figura abaixo:
Existem duas propriedades que nos permitem obter as dimensões do relatório: Me.ScaleHeight que nos fornece a altura e a Me.ScaleWidth que nos fornece a largura. As medidas são fornecidas em Twips.
Então, fica fácil montarmos um retângulo, nas dimensões do relatório, formando com isso a nossa borda. Exemplo:
me.DrawWidth = 8 'pixels
Me.Line (0, 0)-(Me.ScaleWidth - 25, Me.ScaleHeight - 25), vbRed, B
Observe que diminuí o tamanho em 25 twips para que as partes do retângulo da lateral direita e inferior apareçam.
Temos, como resultado, a imagem abaixo:
O evento que recebe o método Line para a formação da borda externa é o "Na página", mas também pode ser utilizado em outras seções do relatório. Exemplo do código utilizado em dois eventos de um relatório:
Private Sub Detalhe_Format(Cancel As Integer, PrintCount As
Integer)
Me.Line (0,
0)-(Me.ScaleWidth - 25, Me.ScaleHeight - 25), vbRed, B
End Sub
----------------------------------------------------------------------------------------------
Private Sub Report_Page()
Me.Line (0,
0)-(Me.ScaleWidth - 25, Me.ScaleHeight - 25), vbBlack, B
End Sub
Veja, na imagem abaixo, o resultado! A borda preta formada no evento "Na página(report_page)" e as bordas em vermelho, geradas no evento "Ao Formatar" da seção detalhes.
Existe também o método para a criação de círculos (Circle) e que vou deixar para você pesquisar no help do Access.
Bom estudo!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Vídeo - Criando Ribbons parte 1 - Conhecendo a estrutura Xml
15 comentário(s) Avelino Sampaio 22/06/2023 02:35:41 Liomar, muito obrigado pelo seu feedback e sucesso! Liomar 20/06/2023 08:03:33 Fiz um armengo aqui que deu certo, no evento ao formatar da seção detalhe do Relatório. Trata-se de um Relatório de Conciliação Bancária. vejam: Dim iChequesConciliados As Integer, dAlturaAcrescer As Double, dAlturaFixa As Double iChequesConciliados = Nz(DCount("nrCheque", "tblSubConciliaçãoBanc", "NumConc=" & Me.CodConc), 0) dAlturaFixa = 0 Me.DrawWidth = 10 'pixel Select Case iChequesConciliados Case Is = 0 dAlturaFixa = 11 Me.Line (50, 50)-(567 * 15, 567 * dAlturaFixa), vbBlack, B Case Is <= 2 dAlturaFixa = 10 dAlturaAcrescer = iChequesConciliados * 0.4 'Aqui considero o tamanho a crescer por linha de registro. Me.Line (50, 50)-(567 * 15, 567 * (dAlturaFixa + dAlturaAcrescer)), vbBlack, B Case 2 To 4 dAlturaFixa = 9.5 dAlturaAcrescer = iChequesConciliados * 0.6 Me.Line (50, 50)-(567 * 15, 567 * (dAlturaFixa + dAlturaAcrescer)), vbBlack, B Case 5 To 8 dAlturaFixa = 9.8 dAlturaAcrescer = iChequesConciliados * 0.5 Me.Line (50, 50)-(567 * 15, 567 * (dAlturaFixa + dAlturaAcrescer)), vbBlack, B Case Is > 8 dAlturaFixa = 10 dAlturaAcrescer = iChequesConciliados * 0.5 Me.Line (50, 50)-(567 * 15, 567 * (dAlturaFixa + dAlturaAcrescer)), vbBlack, B End Select Liomar 19/06/2023 08:29:54 Excelente o artigo, porém tenho um Relatório e tentei aplicar o conceito na Seção Detalhe do Relatório. Ocorre que nesta Sessão Detalhe do Relatório, tenho um controle SubRelatório. Então, quando não tenho registros no subRelatório, o retângulo fecha a Sessão Detalhes Beleza, porém, quando são exibidos registros no subrelatório (a Seção Detalhe amplia), mas as linhas do retângulo não acompanham na vertical o crescimento da Seção Detlhe. Pensei em contar os registros do SubRelatório e fazer dimensionar as linhas do retângulo na vertical em função do número de registros do subrelatório; mas também não sei se isso é possível. Alguma dica, amigo Avelino? Obrigado. Wesley 30/01/2022 13:24:03 Vixe, muito atrasado mesmo mas sua dica de organizar layout por tabela foi excelente. Grato. Avelino Sampaio 30/10/2021 10:38:07 Wesley, Esperimente utilizar as bordas dos campos. Faça o seguinte: 1- Marque todos os campos 2- Clique na guia "Organizar" da Ribbon 3- No Grupo layout da ribbon clique no botão "tabela" Veja então se atende. Sucesso! Wesley Soares 30/10/2021 10:03:54 Estou tentando colocar bordas na seção Detalhes de um relatório meu e esta dica sua foi boa porém ela não funciona quando existem campos com a função "Pode Ampliar", neste caso ele insere a borda porém ela fica no tamanho original da seção e não se expande com ela. Conhece alguma forma de inserir borda ampliável em seções? Lauro Sales 24/06/2020 18:07:03 Parabéns Avelino. Aqui eu aprendo muito. Marcelo David 24/06/2020 00:28:35 Grande Avelino!!! Voce simplismente surpreende a cada artigo!! Parabéns!!! Anderson Luiz 23/06/2020 23:08:29 Grande Avelino Suas aulas são memoráveis. Parabéns pelo conteúdo Jeferson Braz 23/06/2020 21:05:46 Sem comentários. O usandoaccess.com.br é o site de conteudo Access que mais cresce, e com artigos de qualidade como esse, vai se destacar ainda mais. Vem para provar que quando há um programador de peso na frente da máquina, o Access é uma ferramenta sem concorrentes. Sds Gilberto Mendes 23/06/2020 18:46:01 Bem divertido. Lembrou os tempos de visual basic no msx Dá pra fazer vários relatórios e gráficos interessantes. Legal que tem o comando circle e paint. Dá pra fazer várias brincadeiras: Crie um relatório de uns 16 x 16cm Private Sub Detalhe_Format(Cancel As Integer, FormatCount As Integer) For i = 1 To 8000 Step 400 Me.Line (i, 0)-(8000, i), vbBlack Me.Line (0, i)-(i, 8000), vbBlack Next Me.Line (0, 0)-(8000, 8000), vbRed, B End Sub MARCIO MELO - RJ 23/06/2020 13:52:16 Nosssaaa! matou a pau, gostei muito rsrsrs, você realmente domina o VBA e seu funcionamento, fico super feliz em ler seus artigos e obter conhecimento tão refinado, eu ainda não tive a oportunidade de fazer um curso avançado em nenhuma área da informática tudo que sei venho aprendendo na internet e aqui está sendo meu verdadeiro aprendizado, vou deixar aqui o meu último projeto como exemplo de tudo que aprendi www.sic.iniciantejoomla.com e acreditem esta tudo aqui no usandoaccess. Obrigado Avelino! por mais esse artigo... Sou mais Brasil! OLDRIVG 28/03/2020 02:45:18 Prezado Avelino, bom dia. Desculpe-me pela demora. Fiz como sugeriu, mas não me atendeu. O retângulo não acompanha a ampliação dos campos e não consegui configurar a margem esquerda e não imprime como é visualizado. Mas agradeço-lhe pela a atenção. Avelino Sampaio 14/03/2020 04:16:29 Oldrivg, Altere a escala Width até que a borda apareça. Escolha um valor bem grande para testar. Exemplo (1250). Se aparecer vai testando valores menores até chegar na posição desejada. Me.Line (0, 0)-(Me.ScaleWidth -1250, Me.ScaleHeight - 25), vbBlack, B Sucesso! OLDRIVG 14/03/2020 03:31:55 Prezado Avelino, tentei utilizar o código Me.DrawWidth = 8 'Valor em Pixel Me.Line (0, 0)-(Me.ScaleWidth - 25, Me.ScaleHeight - 25), vbBlack, B no evento "Na Página" de um formulário, conforme seu exemplo acima para formar uma borda. Entretanto, somente são exibidas as bordas superior, inferior e esquerda. A borda direita não é exibida. Porventura existe uma solução para este problema? Desde já agradeço. |