<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-3687951292627746671</atom:id><lastBuildDate>Thu, 29 Aug 2024 01:35:14 +0000</lastBuildDate><category>visualizar</category><category>GDI</category><category>automatizar</category><category>banco de dados</category><category>bastidores</category><category>configurar impressão</category><category>cores</category><category>cópias</category><category>email</category><category>fontes</category><category>frente e verso</category><category>html</category><category>impressora</category><category>jpg</category><category>listagem</category><category>orientação</category><category>paisagem</category><category>pdf</category><category>problemas</category><category>página</category><category>resolução</category><category>retrato</category><category>salvar</category><category>silencioso</category><category>simples</category><category>soluções</category><category>tamanho do papel</category><category>txt</category><category>vrx</category><category>xls</category><category>zoom</category><title>Visual ReportX</title><description>Um componente que facilita a construção de relatórios em  aplicações desenhadas com Visual Basic</description><link>http://visualreportx.blogspot.com/</link><managingEditor>noreply@blogger.com (Blogotti)</managingEditor><generator>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3687951292627746671.post-4308457235245003224</guid><pubDate>Wed, 18 Nov 2015 14:50:00 +0000</pubDate><atom:updated>2015-11-18T06:50:24.641-08:00</atom:updated><title>Visual ReportX .NET</title><description>&lt;div id=&quot;yui_3_15_0_1_1447857616326_1299&quot; style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
Já tem algum tempo que estou trabalhando na versão do VRX.Net.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
Adiei várias vezes e também iniciei e joguei fora algumas tentativas logo que comecei a conhecer a plataforma .Net.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
Decidi então trabalhar em um projeto open source para a versão de forma que pudesse disponibilizar uma versão de forma mais rápida, mesmo sem todos os recursos, e ao mesmo tempo permitir que os usuários com perfil mais avançado pudessem evoluir o projeto com suas próprias necessidades.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
Dessa forma, após alguns meses desenvolvendo a carcaça e as rotinas básicas do componente, cheguei numa solução que acredito ser um bom ponta-pé inicial para quem deseja ter uma ferramenta leve, open source e o mais importante FREE! :)&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
Fiz o upload do projeto no Github com os componentes e nela também existe um projeto de exemplo para poder verificar as funcionalidades.&lt;/div&gt;
&lt;div id=&quot;yui_3_15_0_1_1447857616326_1298&quot; style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;yui_3_15_0_1_1447857616326_1296&quot; style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
&lt;a data-rapid_p=&quot;1&quot; href=&quot;https://github.com/pagotti/vrx&quot; id=&quot;yui_3_15_0_1_1447857616326_1297&quot; rel=&quot;nofollow&quot; style=&quot;color: #1155cc; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;https://github.com/pagotti/vrx&lt;/a&gt;&lt;/div&gt;
&lt;div id=&quot;yui_3_15_0_1_1447857616326_1295&quot; style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;yui_3_15_0_1_1447857616326_1280&quot; style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
Essa versão ainda é inicial e não está otimizada, mas com o tempo vou evoluir. Quem quiser brincar com o código ou até mesmo fazer algo específico fique a vontade para fazer um fork do projeto.&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;yui_3_15_0_1_1447857616326_1280&quot; style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;yui_3_15_0_1_1447857616326_1280&quot; style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
Apenas peço que observem a licença de uso que estou usando que é a MIT.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 15px; margin: 0px; padding: 0px;&quot;&gt;
Quem quiser colaborar com o projeto através de doação voluntária, pode fazer através de uma&amp;nbsp;&lt;a href=&quot;https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;amp;hosted_button_id=MPKQKKLJTMMDS&quot;&gt;Doação no Paypal&lt;/a&gt;&lt;/div&gt;
</description><link>http://visualreportx.blogspot.com/2015/11/visual-reportx-net.html</link><author>noreply@blogger.com (Blogotti)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3687951292627746671.post-3176487727278322213</guid><pubDate>Mon, 22 Oct 2012 15:18:00 +0000</pubDate><atom:updated>2012-10-22T08:18:48.355-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">bastidores</category><category domain="http://www.blogger.com/atom/ns#">fontes</category><category domain="http://www.blogger.com/atom/ns#">GDI</category><category domain="http://www.blogger.com/atom/ns#">problemas</category><category domain="http://www.blogger.com/atom/ns#">soluções</category><category domain="http://www.blogger.com/atom/ns#">zoom</category><title>Aplicando Zoom nas Fontes do Windows</title><description>Nessa última atualização do componente (1.5), além das novas funcionalidades que estava desenvolvendo há bastante tempo, me deparei com um problema, que a principio parecia ser simples, com o ajuste de fontes na tela de visualização do relatório e com a diferença na aparência entre a tela e o papel, quando precisava imprimir os textos que tinham configurado a altura automática (&lt;b&gt;TamanhoAuto&lt;/b&gt; = &lt;i&gt;True&lt;/i&gt; e &lt;b&gt;WordWrap&lt;/b&gt; = &lt;i&gt;True&lt;/i&gt;).&amp;nbsp;Percebi que os dois problemas estavam relacionados com a diferença de densidade de pontos da tela e da impressora e o sistema de escala de fontes do Windows.&lt;br /&gt;
&lt;br /&gt;
Ocorre que quando o Windows desenha um texto na tela, a fonte tem uma densidade de pontos por polegada diferente quando imprime para a impressora e para tela. Isso faz com que o GDI, que é o engine responsável por desenhar as letras, utilize mais ou menos pixels para um mesmo texto, e isso deixa de ser proporcional.&amp;nbsp;Dessa forma, como o engine do relatório usava a tela como base para medir as larguras e alturas do textos, ocorria que alguns textos aparentemente corretos na tela de visualização, quando enviados para a impressora, as vezes, ocupavam mais espaço do que o &quot;retângulo&quot; que havia sido calculado para ele.&lt;br /&gt;
Esse cálculo baseado na tela, é importante, porque define a quantidade de texto que cabe por página e consequentemente, a quantidade de páginas do relatório.&lt;br /&gt;
&lt;br /&gt;
Eu não entendia porque isso não funcionava porque embora estivesse usando a tela como referência, mantinha os valores em Twips, o que garantia a conversão para qualquer &lt;i&gt;Device Context&lt;/i&gt;. Eu usava a &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windows/desktop/dd162498(v=vs.85).aspx&quot; target=&quot;_blank&quot;&gt;API DrawText&lt;/a&gt;&amp;nbsp;do Windows. Além dela fornecer um meio de calcular a altura que um texto ocupará, ela trabalha o texto com alinhamentos e quebras de linha automáticas. Porém, eu não tinha o controle sobre em qual palavra quebraria o texto de várias linhas. Quando eu passava ela para o &lt;i&gt;Device Context&lt;/i&gt; da tela e para o &lt;i&gt;Device Context&lt;/i&gt; da impressora, em alguns textos, ela imprimia as quebras de linha de forma diferente, exatamente por causa do problema da diferença entre as densidades dos pixels.&lt;br /&gt;
&lt;br /&gt;
Uma forma de resolver foi deixar de usar essa API e começar a fazer o cálculo das quebras de linha manualmente, calculando, para cada parágrafo, o número de linhas. Para isso usei&amp;nbsp;utilizei a&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windows/desktop/dd144935(v=vs.85).aspx&quot; target=&quot;_blank&quot;&gt;API GetTextExtentExPoint&lt;/a&gt;.&amp;nbsp;Depois imprimir, linha a linha, usando a &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windows/desktop/dd162713(v=vs.85).aspx&quot; target=&quot;_blank&quot;&gt;API ExTextOut&lt;/a&gt;. &lt;br /&gt;
Até esse ponto estava aparentemente tudo resolvido, porque agora eu tinha o controle sobre cada linha do texto e ao enviar tanto para a tela como para a impressora, a quantidade de linhas sempre seria a mesma, de forma que ao fazer um cálculo do número de linhas e páginas não haveria diferenças.&lt;br /&gt;
&lt;br /&gt;
Porém, surgiu outro problema.&amp;nbsp;Durante o zoom no visualizador, para algumas situações, as larguras e as alturas das linhas ficam diferentes do apresentado quando estava em 100%. Mais tarde descobri que esse problema tinha a mesma origem da diferença de densidade de pixels entre a impressora e a tela. Porque na verdade, ao fazer o zoom, internamente o sistema de escalas estava oferecendo uma resolução maior ou menor para o GDI conforme o fator do zoom na tela. Isso porque o engine de visualização usa as &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windows/desktop/dd145045(v=vs.85).aspx&quot; target=&quot;_blank&quot;&gt;APIs de mapeamento e escala do Windows&lt;/a&gt;.&amp;nbsp;Depois de tentar entender e procurar alternativas para resolver essa diferença entre as escalas, achei essa&amp;nbsp;&lt;a href=&quot;http://stackoverflow.com/questions/1918332/how-do-i-draw-zoomed-text-without-changing-effective-text-width&quot; target=&quot;_blank&quot;&gt;discussão no stack&lt;b&gt;overflow&lt;/b&gt;&lt;/a&gt;. A discussão estava falando de um problema com uma rotina em Delphi, mas através dela, consegui entender melhor o que estava acontecendo e finalmente resolver o problema.&lt;br /&gt;
&lt;br /&gt;
Para alguns fatores de zoom e também para algumas resoluções de impressão, uma fonte de texto pode ocupar mais ou menos espaço propositalmente.&amp;nbsp;Assim, para o problema na largura dos textos, tive que verificar a diferença de pixels entre o texto que foi calculado para ser impresso numa largura pré-definida e a largura efetiva que o texto precisa para ser impresso na nova resolução ou densidade. A partir desse cálculo, precisava distribuir ou remover os espaços entre os caracteres (caracteres de espaço em branco, se possível) do texto daquela linha. Foi então que percebi porque o Windows colocou um parâmetro chamado &quot;lpDx&quot; na API ExtTextOut. Esse parâmetro serve para fazer exatamente esse &quot;ajuste fino&quot; entre resoluções diferentes.&amp;nbsp;Já o problema da diferença na altura das linhas do texto quando altera o zoom da visualização, resolvi utilizando a altura da fonte quando o fator de zoom está em 100%.&lt;br /&gt;
&lt;br /&gt;
Como toda solução, embora tenha entendido melhor o funcionamento do GDI, acredito que não seja a última e definitiva. :)</description><link>http://visualreportx.blogspot.com/2012/10/aplicando-zoom-nas-fontes-do-windows.html</link><author>noreply@blogger.com (Blogotti)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3687951292627746671.post-4726747372687944934</guid><pubDate>Sun, 30 Sep 2012 19:43:00 +0000</pubDate><atom:updated>2012-09-30T12:45:02.141-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">configurar impressão</category><category domain="http://www.blogger.com/atom/ns#">cores</category><category domain="http://www.blogger.com/atom/ns#">cópias</category><category domain="http://www.blogger.com/atom/ns#">frente e verso</category><category domain="http://www.blogger.com/atom/ns#">impressora</category><category domain="http://www.blogger.com/atom/ns#">orientação</category><category domain="http://www.blogger.com/atom/ns#">paisagem</category><category domain="http://www.blogger.com/atom/ns#">página</category><category domain="http://www.blogger.com/atom/ns#">resolução</category><category domain="http://www.blogger.com/atom/ns#">retrato</category><category domain="http://www.blogger.com/atom/ns#">tamanho do papel</category><category domain="http://www.blogger.com/atom/ns#">visualizar</category><title>Configurar Impressão</title><description>A tela de configuração de impressão pode ser aberta a partir do ícone, na tela de visualização. A Figura 1 mostra a localização dos botões na tela do visualizador.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.joinbit.com/reportx/blog/2012_09_000043.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;119&quot; src=&quot;http://www.joinbit.com/reportx/blog/2012_09_000043.png&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 1 - Tela do Visualizador&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Ao abrir a tela é apresentada a janela com as configurações. O componente busca as configurações que foram feitas para a impressora no painel de controle do Windows.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.joinbit.com/reportx/blog/2012_09_000039.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;340&quot; src=&quot;http://www.joinbit.com/reportx/blog/2012_09_000039.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 2 - Tela de Configuração de Impressão&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Através dessa tela, o usuário pode selecionar as seguintes opções de impressão:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Impressora: Apresenta uma lista com todas as impressoras disponíveis no painel de impressora do Windows.&lt;/li&gt;
&lt;li&gt;Tamanho do Papel: Apresenta a lista dos tamanhos de papel disponíveis para a impressora selecionada.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Origem do Papel: Permite escolher a bandeja de papel para a impressão, quando a impressora suporta mais de uma bandeja.&lt;/li&gt;
&lt;li&gt;Páginas: Permite selecionar quais páginas devem ser impressas. Pode-se selecionar todas as páginas, a página atual ou uma faixa de páginas. Pode-se selecionar também a impressão apenas das páginas ímpares ou pares.&lt;/li&gt;
&lt;li&gt;Cópias: Indica o número de cópias que devem ser impressas da mesma seleção de páginas do relatório.&lt;/li&gt;
&lt;li&gt;Usar Recurso do Driver: Essa seleção permite escolher se o componente irá utilizar o recurso do driver da impressora. Se selecionado, indica que o relatório será enviado apenas uma vez para o driver e ele irá replicar as cópias. Caso contrário, o componente irá enviar cada cópia separadamente para a impressora dentro do mesmo Job de impressão. Essa opção é útil quando o driver não tem suporte de múltiplas cópias. A seleção que o usuário fizer para o uso ou não do driver para as cópias, é salva para a próxima vez que usar a impressora.&lt;/li&gt;
&lt;li&gt;Cor: Permite escolher entre impressão colorida ou em preto e branco.&lt;/li&gt;
&lt;li&gt;Orientação: Permite escolher entre orientação retrato ou paisagem. É importante que o relatório seja desenhado para orientação retrato para que possa ser impresso em paisagem. No caso do relatório ter sido escrito no modo paisagem, caso o usuário mudar a seleção para a impressão retrato, os dados podem ser cortados.&lt;/li&gt;
&lt;li&gt;Imprimir Frente e Verso: Permite que o usuário escolha a impressão frente e verso nos drivers que suportam essa configuração. A maioria das impressoras tem suporte no modo manual, Isso significa que o usuário precisará &quot;virar&quot; o papel manualmente quando selecionar essa opção. O tipo de virada de página (horizontal ou vertical) é uma escolha do usuário de acordo com a sua necessidade.&lt;/li&gt;
&lt;li&gt;Resolução: O usuário pode escolher a qualidade da impressão.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
É importante lembrar que quando o usuário altera as opções de impressora ou tamanho de papel, o componente reinicia as rotinas internas de geração do relatório para o novo tamanho/driver. Por isso ;e importante programar o evento &lt;b&gt;IniciarRelatorio&lt;/b&gt; do &lt;u&gt;ReportMain&lt;/u&gt; para zerar as variáveis ou acumuladores internos usados no relatório.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://visualreportx.blogspot.com/2012/09/configurar-impressao.html</link><author>noreply@blogger.com (Blogotti)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3687951292627746671.post-3590095578008903462</guid><pubDate>Sun, 30 Sep 2012 18:30:00 +0000</pubDate><atom:updated>2012-09-30T11:30:20.304-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">automatizar</category><category domain="http://www.blogger.com/atom/ns#">email</category><category domain="http://www.blogger.com/atom/ns#">html</category><category domain="http://www.blogger.com/atom/ns#">jpg</category><category domain="http://www.blogger.com/atom/ns#">pdf</category><category domain="http://www.blogger.com/atom/ns#">salvar</category><category domain="http://www.blogger.com/atom/ns#">silencioso</category><category domain="http://www.blogger.com/atom/ns#">txt</category><category domain="http://www.blogger.com/atom/ns#">vrx</category><category domain="http://www.blogger.com/atom/ns#">xls</category><title>Salvar Diretamente para Arquivo</title><description>Com o Visual ReportX é possível salvar diretamente o relatório para arquivo sem passar pela visualização.&amp;nbsp;&lt;span style=&quot;text-align: left;&quot;&gt;Os tipos atualmente suportados são: PDF, VRX, XLS, HTM, TXT, JPG.&lt;/span&gt;&lt;br /&gt;
No caso do tipo PDF, no entanto, é que preciso que a máquina tenha instalado o &lt;a href=&quot;http://www.pdfforge.org/&quot;&gt;PDF Creator&lt;/a&gt;. Ele é uma espécie de impressora virtual e é um freeware. Além de habilitar o componente, caso tenha outras rotinas de impressão no seu sistema que utilizem o objeto Printer, pode apontar para essa impressora virtual para que a impressão seja salva em arquivo PDF.&lt;br /&gt;
O exemplo abaixo mostra como salvar o relatório do exemplo utilizado no post&amp;nbsp;&lt;a href=&quot;http://visualreportx.blogspot.com.br/2012/09/hello-reportx.html&quot; target=&quot;_blank&quot;&gt;Hello! ReportX&lt;/a&gt;&amp;nbsp;em PDF.&lt;br /&gt;
Para programar o componente, basta configurar as propriedades&amp;nbsp;&lt;b&gt;NomeArquivo&lt;/b&gt;,&lt;b&gt; Visualizar&lt;/b&gt;, e &lt;b&gt;Salvar&lt;/b&gt; do &lt;u&gt;ReportMain&lt;/u&gt;, antes de ativar, conforme mostra a figura abaixo.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.joinbit.com/reportx/blog/2012_09_000032.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;105&quot; src=&quot;http://www.joinbit.com/reportx/blog/2012_09_000032.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 1 - Janela do código&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Dessa forma, ao executar o relatório, o visualizador não será aberto e será apresentada a tela do relatório sendo salvo.&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.joinbit.com/reportx/blog/2012_09_000029.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.joinbit.com/reportx/blog/2012_09_000029.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 2 - Janela enquanto salva o relatório&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Além dessa opção, pode-se ligar a propriedade &lt;b&gt;ModoSilencioso&lt;/b&gt; do &lt;u&gt;ReportMain&lt;/u&gt;. Ela é útil quando não queremos mostrar essa janela da Figura 2 enquanto o relatório é salvo.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Para mudar o tipo de arquivo a ser salvo, basta mudar a extensão do nome do arquivo que é colocado na propriedade &lt;b&gt;NomeArquivo&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
É possível definir também um nome de arquivo com a extensão EML. Ao definir dessa forma, além de salvar o arquivo no local indicado, o componente irá enviar o comando para abrir um novo email e anexar esse arquivo. Nesse caso, como o tipo definido foi EML, o tipo de arquivo gerado para o anexo, e as configurações para o email, serão obtidas da tela de opções que está disponível no visualizador, como mostra a figura abaixo.&amp;nbsp;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.joinbit.com/reportx/blog/2012_09_000035.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;343&quot; src=&quot;http://www.joinbit.com/reportx/blog/2012_09_000035.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 3 - Janela de opções do usuário para os relatórios&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Para os tipos de arquivo VRX, XLS, HTM e JPG essa janela também define as configurações que são usadas quando os arquivos estão sendo gerados.&lt;/div&gt;
</description><link>http://visualreportx.blogspot.com/2012/09/salvar-diretamente-para-arquivo.html</link><author>noreply@blogger.com (Blogotti)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3687951292627746671.post-1003584610538320839</guid><pubDate>Sun, 09 Sep 2012 02:30:00 +0000</pubDate><atom:updated>2012-09-08T19:30:32.919-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">banco de dados</category><category domain="http://www.blogger.com/atom/ns#">listagem</category><category domain="http://www.blogger.com/atom/ns#">simples</category><category domain="http://www.blogger.com/atom/ns#">visualizar</category><title>Hello ReportX!</title><description>A ideia desse exemplo, além de testar o formato das postagens para o blog, é construir um relatório simples.&amp;nbsp;Não chega a ser o relatório mais simples que podemos escrever com o VRX, mas é um exemplo prático para ter uma noção geral do funcionamento dos objetos que o componente disponibiliza.&lt;br /&gt;
Nesse exemplo vou descrever como construir uma listagem de uma tabela de banco de dados usando o banco de exemplo do MS Access que é enviado no pacote de exemplos do componente.&lt;br /&gt;
&lt;br /&gt;
Primeiro, vou mostrar a estrutura da tabela no banco para sabermos como desenhar o relatório.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.joinbit.com/reportx/blog/2012_09_000001.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;147&quot; src=&quot;http://www.joinbit.com/reportx/blog/2012_09_000001.png&quot; title=&quot;Figura 1&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 1 - O banco de dados&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Da tabela de &quot;Estados&quot;, vamos imprimir uma listagem com os atributos &quot;Estado&quot; e &quot;Nome&quot;.&lt;br /&gt;
Para isso, abrimos um novo projeto no VB, adicionamos as referências para a OCX do componente e para o ADO.&lt;br /&gt;
Depois inserimos um formulário em branco com o nome &quot;SampleReport&quot;, onde desenhamos o relatório seguindo o layout abaixo. Para desenhar, pode arrastar os objetos a partir da barra de ferramentas. A atenção é apenas com os objetos &lt;u&gt;ReportField&lt;/u&gt;&amp;nbsp;porque eles precisam ser colocados dentro das seções (objeto &lt;u&gt;ReportSection&lt;/u&gt;). A melhora sequência para desenhar é inserir um &lt;u&gt;ReportMain&lt;/u&gt;, em seguida os objetos do tipo&amp;nbsp;&lt;u&gt;ReportSection&lt;/u&gt; e no final os objetos do tipo &lt;u&gt;ReportField&lt;/u&gt;.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.joinbit.com/reportx/blog/2012_09_000002.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;188&quot; src=&quot;http://www.joinbit.com/reportx/blog/2012_09_000002.png&quot; title=&quot;Figura 2&quot; width=&quot;580&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 2 - O desenho do relatório&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Para criar esse formulário, adicionamos o objeto do &lt;u&gt;ReportMain&lt;/u&gt;, definimos a propriedade &lt;b&gt;Name&lt;/b&gt; para &amp;nbsp;&quot;Relatório&quot;, a propriedade &lt;b&gt;Titulo&lt;/b&gt; para &quot;Exemplo&quot;, ligamos a propriedade &lt;b&gt;Regua&lt;/b&gt; e definimos a propriedade &lt;b&gt;Divisao&lt;/b&gt; para 10. Depois inserimos 3 objetos do tipo&amp;nbsp;&lt;u&gt;ReportSection&lt;/u&gt;, definindo para cada um, a propriedade &lt;b&gt;Tipo&lt;/b&gt;&amp;nbsp;como &lt;i&gt;secCabecalho&lt;/i&gt;, &lt;i&gt;secDetalhe&lt;/i&gt;&amp;nbsp;e &lt;i&gt;secRodape&lt;/i&gt;&amp;nbsp;respectivamente. Depois inserimos 3 objetos do tipo &lt;u&gt;ReportField&lt;/u&gt; na seção de cabeçalho, programando a propriedade &lt;b&gt;Caption&lt;/b&gt;&amp;nbsp;com os textos de acordo com a Figura 2.&amp;nbsp;Em seguida, adicionamos mais 2 objetos do tipo &lt;u&gt;ReportField&lt;/u&gt; na seção de detalhe programando a propriedade &lt;b&gt;Campo&lt;/b&gt;&amp;nbsp;de acordo com o nome do atributo da tabela &quot;Estados&quot;.&lt;br /&gt;
&lt;br /&gt;
Agora, escrevemos o código do formulário do relatório conforme a figura abaixo:&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.joinbit.com/reportx/blog/2012_09_000003.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;371&quot; src=&quot;http://www.joinbit.com/reportx/blog/2012_09_000003.png&quot; title=&quot;Figura 3&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 3 - O código do relatório&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
No formulário, criamos um método público para que possa ser chamado por alguma rotina ou tela do sistema, onde esse método pode ter um filtro, se necessário ou outras opções do relatório.&lt;br /&gt;
Normalmente deixamos o código que tem relação com o relatório encapsulado no próprio formulário, assim podemos levar o formulário inteiro para outro projeto, se necessário. É possível até definir as propriedades e executar o relatório a partir de outra parte do sistema. Tudo depende de como o sistema está desenhado. A única restrição aqui é que o relatório não pode ser chamado a partir de um formulário que está sendo exibido de forma modal.&lt;br /&gt;
Na Figura 3, destaquei a propriedade &lt;b&gt;Recordset&lt;/b&gt; porque através dela, dizemos ao componente qual a fonte de dados. Podemos usar um objeto recordset do ADO ou mesmo do DAO/RDO caso o sistema acesse banco de dados com esses engine. Como ela é uma propriedade do objeto &lt;u&gt;ReportMain&lt;/u&gt;, no código que escrevermos nos eventos, que são disparados pelo componente durante a execução, podemos usar essa propriedade para acessar os valores dos campos do registro que estiver corrente, mover o registro para frente para pular alguma parte ou mesmo mover para trás para repetir a impressão de um registro.&lt;br /&gt;
Outra parte importante é o método &lt;b&gt;Ativar&lt;/b&gt;&amp;nbsp;que inicia a execução do relatório, e ao terminar, tendo o usuário impresso, fechado ou apenas visualizado, o controle volta ao código e fechamos o recordset.&lt;br /&gt;
Ao terminar a execução, como o formulário que desenhamos é apenas um &lt;i&gt;container&lt;/i&gt;&amp;nbsp;para o desenho do relatório, fazemos o &lt;i&gt;Unload&lt;/i&gt; para que ele não fique ocupando memória.&lt;br /&gt;
&lt;br /&gt;
Para executar esse relatório, criamos um formulário simples com um botão e uma caixa de parâmetros que usamos como filtro, e fazemos a chamada do método &lt;b&gt;Config &lt;/b&gt;do formulário do relatório, conforme mostra a figura abaixo:&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.joinbit.com/reportx/blog/2012_09_000008.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;272&quot; src=&quot;http://www.joinbit.com/reportx/blog/2012_09_000008.png&quot; title=&quot;Figura 4&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 4 - O formulário de execução&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Em seguida, executamos o projeto, e clicamos no botão &quot;Ativar Relatório&quot;. Como deixamos as propriedades padrão do &lt;u&gt;ReportMain&lt;/u&gt;, onde temos a propriedade &lt;b&gt;Visualizar&lt;/b&gt; ligada, o componente irá exibir a tela do visualizador com a execução do relatório. Ao visualizar é mostrada a tela a seguir:&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.joinbit.com/reportx/blog/2012_09_000004.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;326&quot; src=&quot;http://www.joinbit.com/reportx/blog/2012_09_000004.png&quot; width=&quot;580&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 5 - A visualização do relatório&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
O componente irá funcionar da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Primeiro todos os objetos da seção de cabeçalho são impressos.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Em seguida, todos os registros do recordset são percorridos, e para cada um, são impressos os objetos da seção de detalhe, buscando o conteúdo de cada atributo do recordset pelo nome que foi colocado na propriedade &lt;b&gt;Campo&lt;/b&gt; do &lt;u&gt;ReportField&lt;/u&gt;. O componente irá imprimir cada seção de detalhe até que chegue ao final da página.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Quando atingir o final, caso ainda existam registros para imprimir, é iniciada uma nova página e o processo é repetido, até que chegue ao final do recordset, imprimindo a seção de rodapé ao final de cada página.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Assim que terminam os registros do recordset, o visualizador fica em estado de espera para o usuário efetuar as ações. Nesse momento o usuário pode enviar para impressora, salvar o relatório em arquivo, modificar o tamanho de página, ampliar ou reduzir a visualização, enviar o relatório por email, dentre outras funções.&lt;br /&gt;
O mecanismo de navegação das páginas é liberado assim que a primeira página é gerada internamente. Assim, quando relatórios mais complexos ou de muitas páginas são gerados, o usuário pode visualizar as páginas já construídas enquanto as restantes são geradas internamente.&lt;br /&gt;
Esse é o processo básico. A ideia desse post e dar uma noção básica do mecanismo de forma que possam ser explicadas as outras propriedades, métodos e eventos de cada objeto.&lt;br /&gt;
&lt;br /&gt;</description><link>http://visualreportx.blogspot.com/2012/09/hello-reportx.html</link><author>noreply@blogger.com (Blogotti)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3687951292627746671.post-1646337408063763029</guid><pubDate>Fri, 07 Sep 2012 16:13:00 +0000</pubDate><atom:updated>2012-09-07T09:13:24.597-07:00</atom:updated><title>Início 2.0</title><description>Essa postagem dá início ao blog do Visual ReportX. Espero que esse canal de comunicação possa contribuir com mais informações sobre o funcionamento do componente.&lt;br /&gt;
A ideia também é reunir as dúvidas dos usuários de forma mais sintética e permitir uma interação maior com as pessoas que utilizam o componente, sejam usuários registrados ou que utilizam a versão free.&lt;br /&gt;
&lt;br /&gt;
Espero que todos participem. Sejam bem-vindos!&lt;br /&gt;
&lt;br /&gt;</description><link>http://visualreportx.blogspot.com/2012/09/inicio-20.html</link><author>noreply@blogger.com (Blogotti)</author><thr:total>0</thr:total></item></channel></rss>