Vídeo - Criando Ribbons parte 4 - Imagens Externas

Podemos inserir imagens externas em todos os controles da ribbon que permitem o uso dos atributos image e getImage.   Fazemos uso do getImage apenas quando necessitamos selecionar as imagens em tempo de execução, do contrário, usamos o atributo image.

O MontaRibbons possui uma pasta de nome imagens é lá você terá como exemplo dois arquivos:  avel.gif e feed.png que são usados na ribbon de exemplo rbImagens. 

Quando você estiver criando sua ribbon, copie suas imagens para a pasta imagens do MontaRibbons.   Deverá posteriormente copiá-las para a pasta imagens do seu projeto. 

Criar a pasta de nome imagens, no mesmo local do aplicativo, facilita muito a programação e nos permite usar o caminho relativo com a propriedade path.   Veja mais detalhes aqui neste artigo.

Para o atributo image funcionar é necessário usar o atributo loadImage da tag customUI , que chama pela função de carregamento de imagens fncLoadImage.  

Observe abaixo, o atributo loadImage na tag customUI:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="fncRibbon" loadImage="fncLoadImage">
...
<button
id = "bt1"                         
label = "Feed"
image="feed.png"
size="large"
onAction = "fncOnAction"
/>
...
</customUI>

Toda vez que o atributo image for utilizado, ele fará uso da função fncLoadImage.

Veja a função fncLoadImage:

Public Sub fncLoadImage(imageId As String, ByRef Image)
On Error GoTo trataerro
Dim caminho As String
caminho = CurrentProject.Path & "\imagens\"
    If InStr(imageId, ".png") > 0 Or InStr(imageId, ".ico") > 0 Then
        Set Image = LoadImage(caminho & imageId)
    Else
        Set Image = LoadPicture(caminho & imageId)
    End If
sair:
    Exit Sub
trataerro:
    Select Case Err.Number
        Case 2220
            MsgBox "Imagem " & imageId & _
            " não encontrada no caminho indicado...", vbInformation, "Aviso"
        Case Else
            MsgBox "Erro: " & Err.Number & _
            vbCrLf & Err.Description, vbCritical, "Aviso", _
            Err.HelpFile, Err.HelpContext
    End Select
    Resume sair:
End Sub

O argumento imageId  da função, traz o nome da imagem dada no atributo image de um controle.  Este nome deve coincidir com o nome da imagem armazenada na pasta imagens.   O argumento image da função carrega então a imagem da pasta, no controle da ribbon.

Imagens GIF, JPEG e BMP são aceitas diretamente nos controles (button, gallery,...) da ribbon, utilizando o método LoadPicture do Access.  Já as imagens PNG e ICO precisam ser transformadas em BMP para então ser possível o seu carregamento.  Isto é feito através de uma função chamada LoadImage, que usa APIs do Windows para realizar essa transformação.  O MontaRibbons exporta para o seu projeto estas APIs num módulo chamado mod_picture.

Observe o código XML completo de uma ribbon, usando dois botões que carregam as imagens da pasta imagens do MontaRibbons:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="fncRibbon" loadImage="fncLoadImage">

<ribbon startFromScratch="true">

<tabs>
<tab id = "gui1" label = "Guia 1" >
<group id = "gr1" label = "Botões com imagens externas">
<!-- para carregar arquivo PNG é usada a função LoadImage -->
<button
id = "bt1"
label = "Feed"
image="feed.png"
size="large"
onAction = "fncOnAction"
/>
<!-- para carregar arquivo GIF é usado o método LoadPicture do Access -->
<button
id = "bt2"
label = "Avelino"
image="avel.gif"
size="large"
onAction = "fncOnAction"
/>

</group>
</tab>

</tabs>
</ribbon>
</customUI>

Como resultado temos a ribbon :

Editor do VBA

  

Como havia dito, podemos carregar nossas imagens utilizando o atributo getImage.  Esta opção é usada para uma necessidade da troca de imagens em tempo de execução.  Usaremos como exemplo a mesma XML acima, trocando apenas o atributo image pelo atributo getImage.  O atributo getImage não depende do atributo loadImage da tag customUI.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="fncRibbon">

<ribbon startFromScratch="true">

<tabs>
<tab id = "gui1" label = "Guia 1" >
<group id = "gr1" label = "Botões com imagens externas">
<!-- As imagens são definidas na função fncGetImage -->
<button
id = "bt1"
label = "Feed"
getImage="fncGetImage"
size="large"
onAction = "fncOnAction"
/>

<button
id = "bt2"
label = "Avelino"
getImage="fncGetImage"
size="large"
onAction = "fncOnAction"
/>

</group>
</tab>

</tabs>
</ribbon>
</customUI>

 

Com isso, a imagem é definida na função fncGetImage.  Veja a função abaixo:

 

Public Sub fncGetImage(control As IRibbonControl, ByRef Image)
On Error GoTo trataerro
Dim caminho As String
Dim strNomeImagem As String
caminho = CurrentProject.Path & "\imagens\"
Select Case control.Id
  Case "bt1"
     strNomeImagem = "feed.png"
  Case "bt2"
     strNomeImagem = "avel.gif"
End Select

If InStr(strNomeImagem, ".png") > 0 Or InStr(strNomeImagem, ".ico") > 0 Then
  Set Image = LoadImage(caminho & strNomeImagem)
Else
  Set Image = LoadPicture(caminho & strNomeImagem)
End If

sair:
  Exit Sub
trataerro:
  Select Case Err.Number
    Case 2220
      MsgBox "Imagem do botão " & control.Id & _
      " não encontrada no caminho indicado...", vbInformation, "Aviso"
    Case Else
      MsgBox "Erro: " & Err.Number & vbCrLf & Err.Description, _
      vbCritical, "Aviso", Err.HelpFile, Err.HelpContext
  End Select
  Resume sair:
End Sub

 

Montei um arquivo exemplo que faz a troca de imagens em tempo de execução de um controle gallery para você ficar com uma noção melhor do que é possível ser feito.

Veja o arquivo exemplo:

Editor do VBA

 

Vídeo-aula

Nesta vídeo-aula você terá uma breve apresentação do uso de imagens externas e irá acompanhar uma apresentação do arquivo exemplo que usa o controle gallery, em tempo de execução.

Como EXIBIR a vídeo-aula em tela cheia?

1. clique na seta executar da tela abaixo para iniciar a exibição do vídeo;

2. dê dois cliques rápidos na tela, quando o vídeo começar a ser exibido.

 

 

Introdução:

As presentes Vídeos-aulas apresentam uma visão estrutural básica sobre ribbons e pretendem abrir a sua mente para o entendimento do que é possível ser feito com esta fácil programação.
 

Links

Temas abordados

MontaRibbons

Todas as informações necessárias para você adquirir esta incrível ferramenta.

Vídeo-aula 1


Breve apresentação do MontaRibbons
Noção estrutural da XML empregada
Como desabilitar toda a faixa superior do Access
Usando imagens da galeria do Office
Usando controles internos do Office
Personalizando a barra de ferramentas de acesso rápido
Personalizando o Botão Office
Como criar uma ribbon personalizada
 

Vídeo-aula 2


Como montar o controle splitButton
Como montar o controle menu
Diferenças entre os controles splitButton e menu
Exportando as ribbons para os seus aplicativos
Como dar funcionalidade aos botões da ribbon
 

Vídeo-aula 3


Alterando os controles em tempo de execução, usando os atributos get
Como configurar a ribbon para a troca de idioma
Como ocultar/desabilitar os botões da ribbon, em função do usuário logado
 
Para saber como montar o controle personalizado de acesso de usuários, utilizado no arquivo exemplo desta aula, leia o artigo.
 
O arquivo exemplo desta vídeo-aula se encontra na pasta [exemplos] do MontaRibbons. O nome do arquivo é Maestro_idiomas.accdb
(disponível somente para quem adquirir o MontaRibbons).

 

Vídeo-aula 5

Uso de imagens externas (GIF, JPEG, PNG e ICO) armazenadas em tabela local

 


4 comentários

   5/8/2010 14:17:02

Boa Tarde Avelino muito interessante o artigo, e Parabéns pelo site!

estava lendo o artigo e fiquei curioso numa coisa...
como eu faço para usar imagens de uma dll de imagens, para usa-las nas ribbons e também em qualquer outro objeto do access? é possivel?

Márcio Melo - Rio de Janeiro/RJ   5/8/2010 23:54:04

Bela continuação... flexibilidade de colocar imagens enriquece a aplicação, farei o upgrade da versão 3 do monta Ribbons, gostei do vídeo que mostra que você colocou mais exemplos práticos, muito bom... parabéns. Sou mais Brasil!

Avelino Sampaio   6/8/2010 05:17:42



Ótima a sua pergunta. Nunca usei mas creio que seja possível utilizando APIs.

Por exemplo, esta extrai Icones

Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long

Procure no google com a frase "Api extrair imagens dll" ou algo parecido.

Sucesso

Avelino Sampaio   6/8/2010 05:23:34

Marcio,

Estou apostando muito que os exemplos práticos irão ajudar o pessoal a enriquecer os projetos.

Valeu pelo apoio.


Envie seu comentário: