quarta-feira, 19 de dezembro de 2012

DataWindows com Marca d'água


A utilização de imagens como marca d'água de relatórios ou documentos é uma prática normalmente associada à segurança. Sistemas precisam inserir marcas d'águas em páginas impressas, a fim de deixar visível que a impressão foi realizada sobre uma circunstância especial.

Existem textos bastante comuns utilizados como marca d'água, como por exemplo: "Rascunho", "Cancelado", "Sem validade", "Para uso interno", etc.

Mas como utilizar marca d'águas no PowerBuilder? Bem, isto é possível através da inserção de imagens nas datawindows, mas imagine o trabalho que pode dar se a quantidade de dataobjects do seu sistema seja alta.
A fim de evitar que cada datawindow seja alterada, eu criei um código que insere a marca d'água dinamicamente em uma datawindow. Veja mais abaixo.



String  ls_marca_dagua
String ls_datawindow_syntax
Long  ll_pos

// Recupera dinamicamente a sintaxe da datawindow
ls_datawindow_syntax = dw_report.DESCRIBE("Datawindow.syntax")

// Constrói a sintaxe do controle referente a imagem da marca dágua
ls_marca_dagua= 'bitmap(band=foreground filename="Imagens\Marca.gif" x="14" y="28" height="2572" width="2194" border="0"  name=p_1 visible="1" )'

// Recupera a posição do caractere em que será inserido o controle
ll_pos = Pos(ls_datawindow_syntax, "htmltable(")

// Modifica a sintaxe data datawindow, inserindo o controle
ls_datawindow_syntax = MID(ls_datawindow_syntax, 1, ll_pos -1) + ls_marca_dagua + MID(ls_datawindow_syntax, ll_pos , LEN(ls_datawindow_syntax))

// Recria a datawindow com a nova sintaxe
dw_report.CREATE( ls_datawindow_syntax)


Perceba no código acima que eu trabalhei com a imagem no formato GIF. O motivo disto foi para tentar colocar um pouco de "transparência" à minha marca d'água. Eu só precisei utilizar este formato porque desenvolvi o código fonte em PowerBuilder 10. Se você estiver utilizando a versão 11 do PowerBuilder ou uma superior, pode usar dois recursos mais eficientes para a transparência:

  • Ou utilizar uma imagem no formato PNG;
  • Ou definir o atributo transparency para o controle de imagem. Veja como ficaria:


...

// Constrói a sintaxe do controle referente a imagem da marca dágua
ls_marca_dagua= 'bitmap(band=foreground filename="Imagens\Marca.gif" x="14" y="28" height="2572" width="2194" border="0"  name=p_1 visible="1" transparency="50")'

...


A imagem com a marca utilizada por mim foi esta:


Agora, veja um relatório de exemplo com e sem marca d'água.





Nenhum comentário:

Postar um comentário