Lidando com imagens
Imagens ajudam a deixar o ambiente visualmente mais
agradável, seja um quadro na parede, seja imagens em um site ou mesmo em suas
planilhas e formulários.
Você certamente já deve ter visto que na caixa de
ferramentas do formulário há um botão chamado Imagem. Clicando nele e colocando em algum ponto do formulário você
irá acrescentar um objeto de imagem, que inicialmente vai aparecer como um
quadrado cinzento sem nada dentro.
A primeira propriedade que deve ser definida em uma
imagem é Picture, que irá carregar a
imagem. Escolha uma entre os poucos formatos suportado, as principais extensões
são bmp e wmf.
Na prática a imagem foi adicionada como se fosse 60x60.
Podemos editar a propriedade PictureSizeMode,
cujos valores possíveis são:
- fmPictureSizeModeClip:
mantém o arquivo no tamanho que o Excel importa;
- fmPictureSizeModeStretch:
expande ambas as laterais até os limites do objeto imagem, mesmo que saia da
proporção - a imagem ficará esticada se a proporção não for a mesma;
- fmPictureSizeModeZoom: expande a imagem até os limites do
objeto imagem, mantendo a proporção em relação ao arquivo original.
Usando o valor fmPictureSizeModeZoom
obtemos o seguinte resultado:
Como
pode-se ver, aparece um serrilhado, indicando que a imagem foi estendida. Por
outro lado, se definirmos as propriedades Height
e Width para 60, obtemos o seguinte
resultado:
Desconheço
as razões porque as proporções no formulário são diferentes da imagem do
arquivo. O jeito é sempre efetuar testes com as imagens antes de definir o
tamanho da imagem no formulário e o tamanho das próprias imagens que serão
inseridas. Outro detalhe importante é que fotos em formato jpg devem ser convertidas em bmp
para poder usar no formulário. Há softwares gratuitos que permitem converter alguns
formatos de arquivos de imagens, como o Paint.Net.
Já o
formato wmf (Windows MetaFile) é uma imagem em formato vetorial, ou seja, a
imagem é um conjunto de pontos, linhas e polígonos baseados em expressões
matemáticas, sendo cada linha ou polígono equivalente a um vetor (ou caminho,
como alguns softwares de desenho vetorial chamam). Arquivos em imagem vetorial
podem ser estendidos sem perda de qualidade. Os formatos mais conhecidos e
usados são EPS (Encapsulated Post Script, que está caindo em desuso), AI (Adobe
Illustrator), CDR (CorelDraw) e SVG (Scalable Vector Graphics),
sendo somente o último livre de royalties.
Um software gratuito capaz de exportar arquivos WMF é o InkScape.
Arquivos
em formato vetorial são excelentes para logotipos e desenhos, pois podemos
aumentar o tamanho sem comprometer a qualidade da imagem. Outra vantagem é que
não aparece o fundo branco que apareceu nas telas acima. Quem usa bastante o PowerPoint deve saber disso, devido ao costumeiro
uso de imagens nas apresentações.
Colocando
uma imagem vetorial e usando fmPictureSizeModeZoom
para manter a imagem proporcionalmente dentro dos limites temos o seguinte
resultado:
De
certa forma ainda aparece um serrilhado, isto é uma limitação dos formulários
no VBA, que estão limitados a 256 cores. De qualquer forma, está melhor que a
versão bmp estendida. Não dá para
saber o motivo da Microsoft não ter evoluído os formulários do Office dos
tempos do Windows 95 para o formato Windows
Presentation Foundation, muito mais modernos e visualmente agradáveis, o
que é uma pena.
Há
mais propriedades interessantes que podem ser editadas em um objeto imagem:
- BackStyle: estilo de fundo, pode ser fmBackStyleOpaque (fundo opaco, opção
padrão) ou fmBackStyleTransparent
(fundo transparente, ideal para imagens vetoriais);
- BorderStyle: estilo da borda, pode ser fmBorderStyleSingle (borda simples,
opção padrão) ou fmBorderStyleNone
(sem borda);
- PictureAlignment: alinhamento da figura,
pode ser fmPictureAlignmentCenter
(imagem no centro, opção padrão), fmPictureAlignmentTopLeft
(imagem no topo à esquerda), fmPictureAlignmentTopRight
(imagem no topo à direita), fmPictureAlignmentBottomLeft
(imagem embaixo à esquerda) e fmPictureAlignmentBottomRight
(imagem embaixo à direita);
- PictureTiling: permite que as imagens
fiquem lado a lado quando está com valor True,
o padrão é False;
- SpecialEffect: efeito especial, pode ser
fmSpecialEffectFlat (sem efeito,
opção padrão), fmSpecialEffectRaised
("levantado", como se fosse um botão), fmSpecialEffectSunken ("afundado", como um botão
pressionado), fmSpecialEffectEtched
("gravado", como se houvesse um vinco ao redor da imagem) e fmSpecialEffectBump
("inchaço", tem uma borda grossa). Vale observar que alterar o valor
desta propriedade altera a propriedade BorderStyle
para fmBorderStyleNone, ou seja, sem
borda.
Uma
coisa interessante que é possível fazer é alterar a imagem via código. Por
exemplo, no caso de um cadastro de pessoas, um objeto imagem pode exibir a foto
da pessoa ativa no momento. Para fazer algo do tipo, é crucial ter alguns
fatores em mente:
- As
imagens devem ter o mesmo tamanho, caso contrário podem ficar deformadas ao
exibir. Se você especificar que a imagem deve ser 80x100, todas deverão ter
essas medidas;
- As
imagens devem estar no mesmo local. O ideal é criar uma pasta (ou diretório) no
mesmo local da planilha e manter as imagens dentro dessa pasta;
- Os
nomes dos arquivos de imagens preferencialmente devem ser a chave (código, ID
ou outra forma de identificação única) e devem ter a mesma extensão. Se você
utilizar o nome de uma pessoa como nome do arquivo certamente terá problemas
com homônimos. Exceções podem ser feitas se você estiver lidando com uma lista que
não deve ser alterada e que não tenha objetos com o mesmo nome.
Um
exemplo simples para visualizar o funcionamento:
Este
formulário funcionará da seguinte maneira: a caixa de seleção tem dois valores:
Homem e Mulher. Quando um valor for selecionado, a imagem aparecerá:
O
código é o seguinte:
Private Sub UserForm_Initialize()
InicializarSeletor
End Sub
Sub InicializarSeletor()
frmSexo.cmbSelecionarSexo.Clear
frmSexo.cmbSelecionarSexo.AddItem "Homem"
frmSexo.cmbSelecionarSexo.AddItem "Mulher"
End Sub
Private Sub cmbSelecionarSexo_Change()
Dim Imagem As
String
Imagem =
ActiveWorkbook.Path & "\Imagens\" & _
frmSexo.cmbSelecionarSexo.Value & ".wmf"
frmSexo.imgSexo.Picture = LoadPicture(Imagem, 50, 100)
End Sub
O detalhe mais importante aqui é a forma de carregar a
imagem. É preciso usar uma função chamada LoadPicture,
que colocará a imagem dentro da propriedade Picture.
Aqui usei três argumentos: endereço do arquivo, largura e altura (estes dois últimos são opcionais). Há um quarto
parâmetro chamado flags, que pode ser
um valor da enumeração LoadPictureConstants.
Os valores possíveis são os seguintes: Default,
Monochrome, VgaColor e Color.
O exemplo acima é bem simples, mas dá uma ideia do que
você pode fazer para melhorar seus formulários. Você pode alterar uma imagem
dinamicamente conforme as necessidades: fotos de pessoas ou imagens de produtos
ajudam a incrementar o visual.
Enquanto
em formulários temos limitações com formatos e cores, nas planilhas temos muito
mais opções. É possível usar imagens vetoriais sem que aconteça o problema de
serrilhado como visto anteriormente, pois temos acesso a mais de 16 milhões de
cores. Além disso, é possível utilizar outros formatos de imagens populares,
como jpg e png. Estes, da mesma forma que o bmp, perdem qualidade quando ampliados.
Se
você tiver habilidade com desenho poderá transformar uma planilha em um
formulário. Pode começar usando algumas formas do Office ou figuras encontradas
na internet para entender o que é possível fazer. Fiz um exemplo bem simples
aqui para demonstrar:
Perceba
que aqui ocultei a barra de fórmulas, o menu, os títulos de linhas e colunas,
além da grade, tirando a chamada "aparência de Excel". Você pode
fazer isso manualmente na planilha, mas seu usuário pode mexer. Neste caso é
bom editar os eventos referentes a essa planilha. Existem os eventos Activate e Deactivate que, como o próprio nome indica, são processados quando entramos
ou saímos da planilha, respectivamente.
Portanto,
precisamos editar o evento de entrada na planilha para não exibir os detalhes
mencionados acima. Essas propriedades são definidas no objeto Application, que possui muitas outras
propriedades que podem ser ajustadas conforme suas necessidades. Vejamos o que
podemos fazer:
Private Sub Worksheet_Activate()
Application.ActiveWindow.DisplayGridlines
= False
Application.ActiveWindow.DisplayHeadings = False
Application.ActiveWindow.DisplayHorizontalScrollBar = False
Application.ActiveWindow.DisplayVerticalScrollBar = False
Application.DisplayFormulaBar = False
End Sub
Os nomes das propriedades explicam bem a função. DisplayGridlines exibe ou não as linhas
de grade da planilha. DisplayHeadings
é sobre o cabeçalho de linhas e colunas da planilha. DisplayHorizontalScrollBar e DisplayVerticalScrollBar
se referem às barras de rolagem horizontal e vertical, respectivamente. Por
fim, DisplayFormulaBar oculta ou
exibe a barra de fórmulas. Existem muitos outros controles que podem ser
definidos.
Como essas propriedades estão definidas no evento Worksheet_Activate, sempre que o usuário
entrar nessa planilha os valores serão definidos e a planilha estará sempre com
essa aparência. Mesmo que o usuário coloque a grade, por exemplo, ao sair e
retornar à planilha a grade estará oculta de novo.
Com um pouco de prática e uma certa habilidade com
imagens, você pode transformar planilhas em formulários que certamente irão impressionar
os usuários. Certamente ainda há muito sobre imagens a aprender, mas o que foi
visto aqui é um ótimo começo.
Para dúvidas sobre o artigo, comentários ou sugestões, utilize os comentários abaixo. Até o próximo artigo!
Como se faz para apagar a imagem através de um botão?
ResponderExcluir