bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Vídeo de como criar ribbons, usando o aplicativo MontaRibbons - Imagens de campo tipo anexo

Vídeo - Criando Ribbons parte 5 - Imagens de campo tipo anexo

Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 2x no Cartão de Crédito, através do Paypal. 

Veja como comprar e saiba mais sobre o material oferecido,  clicando aqui.

Open v3

 

Vimos na aula anterior que podemos utilizar imagens externas nas ribbons, usando os atributos image e getImage.  Fizemos uso de uma pasta local para o armazenamento dessas imagens.  O que demonstrarei neste artigo é a alternativa de armazenar essas imagens numa tabela local, utilizando um campo do tipo anexo. 

Em relação ao código XML, nada muda.  O que muda é a forma de extrair as imagens pelo código VBA, que se encontram agora numa tabela.

Lembrando que para fazer uso do atributo image dos controles é necessário usar o atributo loadImage da tag CustomUI, que chama pela função fncLoadImage:

<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>

Para o carregamento das imagens armazenadas numa pasta, utilizamos o método LoadPicture do Access ou a função LoadImage, para tratar as extensões PNG e ICO.

Veja a função fncLoadImage usada para o carregamento das imagens de uma pasta:

Public Sub fncLoadImage(imageId As String, ByRef Image)
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
End Sub

A questão central aqui é: Como podemos extrair as imagens de campo tipo anexo de uma tabela local?  Podemos extrair as imagens de campo tipo anexo, de duas formas.

A primeira forma é extrairmos as imagens direto de campo tipo anexo de um formulário que está vinculado à tabela , utilizando o método PictureDisp.

A segunda forma é extrairmos as imagens do campo tipo anexo, direto da tabela, para uma pasta temporária , através do método SaveToFile.

Utilizaremos as duas formas.

Veja o código utilizado para carregar, na ribbon, as imagens extraídas de um campo tipo anexo, de um formulário oculto.  Este formulário está vinculado à tabela que contém as imagens.  Leia com atenção os comentários em verde!

Option Compare Database
Dim attAnexo As Attachment
 
'----------------------------------------------------------------------------
 
Public Sub fncLoadImage(imageId As String, ByRef Image)
Dim strCaminho As String
'Verifica se o formulário fmImgRibbons está aberto.
If Not CurrentProject.AllForms("frmImgRibbons").IsLoaded Then
    'Abre formulário para somente leitura e oculto.
    DoCmd.OpenForm "frmImgRibbons", acNormal, , , acFormReadOnly, acHidden
    'Passa para variável attAnexo o campo tipo anexo do formulário.
    Set attAnexo = Forms("frmImgRibbons").Controls("Imagens")
End If

'Carrega imagens JPG, BMP ou GIF
'PictureDisp extrai a imagem do campo tipo anexo do formulário.
Set Image = attAnexo.PictureDisp(imageId)

End Sub

Está lembrado que não é possível o carregamento de imagens PNG e ICO direto na ribbon?  Continuamos aqui a ter que usar a função LoadImage , que transforma estas imagens em BMP.   Só que para usar a função LoadImage, a imagem tem que estar numa pasta local.  A alternativa encontrada foi copiar a imagem do campo tipo anexo da tabela para uma pasta temporária.  Esta imagem, salva na pasta temporária é passada então para a função LoadImage, que irá tratá-la e entregá-la à ribbon.  Após o tratamento da imagem pela função LoadImage a imagem é deletada da pasta temporária.

Observe o código utilizado para copiar uma imagem do campo tipo anexo de uma tabela, para uma pasta temporária:

Public Function fncExtrairImagem(strNomeImagem As String) As String
Dim strCaminho As String
Dim rsPai As DAO.Recordset
Dim rsFilho As DAO.Recordset2
Dim fld As Field2
Dim fld2 As Field2

strCaminho = CurrentProject.Path & "\temp"

Set rsPai = CurrentDb.OpenRecordset("tblImagensRibbons")
Set rsFilho = rsPai.Fields("imagemRibbon").Value
Set fld = rsFilho.Fields("filedata")
Set fld2 = rsFilho.Fields("Filename")

'Verifica se a pasta temporária temp existe. Se não existir cria a pasta
'e coloca no modo oculto.
If Len(Dir(strCaminho, vbDirectory + vbHidden) & "") = 0 Then
    FileSystem.MkDir (strCaminho)
    FileSystem.SetAttr strCaminho, vbHidden
End If
'Faz um loop procurando pela imagem.
Do While Not rsFilho.EOF
    If fld2.Value = strNomeImagem Then
        'Salva a imagem do campo tipo anexo para a pasta temporária.
        fld.SaveToFile (strCaminho)
        Exit Do
    End If
    rsFilho.MoveNext
Loop
Set fld2 = Nothing
Set fld = Nothing
Set rsFilho = Nothing
Set rsPai = Nothing

'A função retorna com o caminho e o nome do arquivo salvo, que será
'entregue à função LoadImage
fncExtrairImagem = strCaminho & "\" & strNomeImagem

End Function

Com a imagem salva na pasta temporária, será entregue à função LoadImage para o seu tratamento.

Observe a função fncLoadImage completa, como ficou!  Leia atentamente os comentários em verde!

Option Compare Database
Dim attAnexo As Attachment
 
'-----------------------------------------------------------------------
 
Sub fncLoadImage(imageId As String, ByRef Image)
Dim strCaminho As String

'Verifica se o formulário fmImgRibbons está aberto.
If Not CurrentProject.AllForms("frmImgRibbons").IsLoaded Then
    'Abre formulário para somente leitura e oculto.
    DoCmd.OpenForm "frmImgRibbons", acNormal, , , acFormReadOnly, acHidden
    'Passa para variável attAnexo o campo tipo anexo do formulário.
    Set attAnexo = Forms("frmImgRibbons").Controls("Imagens")
End If

'Verifica se a imagem tem extensão PNG ou ICO para aplicar a 
'função de transformação LoadImage
If InStr(imageId, ".png") > 0 Or InStr(imageId, ".ico") > 0 Then
    'Passa para a variável o local e nome da imagem PNG ou ICO, 
    'salva na pasta temporária.
    strCaminho = fncExtrairImagem(imageId)
    'Transforma imagem PNG ou ICO em BMP e passa para a ribbon.
    Set Image = LoadImage(strCaminho)
    'Deleta imagem da pasta temporária Temp
    FileSystem.Kill strCaminho
Else
    'Carrega imagens JPG, BMP ou GIF
    Set Image = attAnexo.PictureDisp(imageId)
End If
End Sub

Baixe o exemplo, que contém o código mostrado aqui e assista o vídeo para você ver mais detalhes.

Vídeo-aula

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


 

Faça o login aqui para ter acesso ao vídeo.

 

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 4


Uso de imagens externas (GIF, JPEG, PNG e ICO)
 

Vídeo-aula 6


Conheça o help dos controles que irá lhe proporcionar uma rápida curva de aprendizagem e poder de programação para construção dos seus projetos.
 

 


 

 


9 comentários

joao ricardo do prado andrade   12/05/2021 11:30:28

NAO BAIXA O EXEMPLO

Avelino Sampaio   13/05/2019 04:38:23

João,

obrigado pelo feedback. Já está resolvido.

Bom estudo!

Andrea   17/08/2014 21:05:03

Olá Avelino,

Desculpa a demora para responder.

Então utilizo o Office 32 e 64 Bits.

Obrigada.

Avelino Sampaio   03/08/2014 07:20:12

Andrea,

e o seu office é de 32 ou 64 bits ?

No aguardo

Andrea   02/08/2014 22:10:10

Olá Grande Avelino,

Gostaria de agradecer por compartilhar vários exemplos fantásticos.

E, gostaria de pedir uma ajuda, neste exemplo de adicionar imagens externas na ribbon é excelente, porém estou com um pequeno problema, ao abrir o sistema no Windows 64 Bits a função StrPtr não é mais suportada, você saberia me dizer como posso contornar este problema?

Obs.: essa função é usada em seu exemplo: Function LoadImage....
.....
If GdipCreateBitmapFromFile(StrPtr(strFName), hGdiImage) = 0 Then
.....

PAULO SERGIO DE FREITAS JUNIOR   13/01/2014 15:33:50

Avelino tenho uma duvida, estou querendo montar um cadastro da seguinte forma:

No formulário eu tenho um campo "imagem" e nele quero colocar 3 fotos "como anexo" e quando pressionar "Cadastrar" ele copia as imagens do campo "imagem" do formulário para o campo "imagem" da tabela, sem utilizar vinculo automático, mas não estou conseguindo fazer uma função que mantenha mais de um anexo no campo "imagem" do formulário e muito menos após apertar o botão "Cadastrar" ele salve na tabela.

Pode me dar uma mão?

meu email: paulosfjunior@hotmail.com

Obrigado

Avelino Sampaio   16/02/2012 17:52:26

Carlos,

aqui mesmo na seção tutoriais, acesse o artigo "segurança máxima, usando o OPEN" e não deixe de assistir a vídeo-aula.


Avelino   16/02/2012 17:42:23

Avelino, estou aposentado desde 2002, mas recentemente resolvi tentar voltar a ativa.
Minha idéia era montar um sistema para informatizar um pequeno escritório de advogados, pois, grandes sistemas já existem.
1. Fiquei como auxiliar de uma secretária no escritório, por 1 ano, e neste período comecei o desenvolvimento;
2. Agora tenho algo parecido com um sistema de advogados que atende aproximadamente 80% das tarefas de um escritório; Acho que já dá para começar.
3. O desenvolvimento, por ser de baixo custo, foi no MS Access.
4. Usei algumas dicas sua, como LockNavigation, Tecla Shift, Senha própria no Módulo e sistema;

Meu caro, imagino que não seja barato uma consultoria sua e nem mesmo tenho um capital para investir, pelo menos por enquanto.

Minha idéia: 1. A principio distribuir algumas cópias gratis para consistir o sistema; 2. Mais tarde, comercializar.

Pergunto: Dá para ter confiança que o sistema não será aberto e copiado, enquanto estou neste processo de consistência. O access mesmo sendo codificado para accde, pode ser, falando em termos mais popular, copiado e ...

Avelino, estarei atento e acompanhando nos seus comentários, ou digo, uma resposta, se possível para o meu problema.

De qualquer forma, muito obrigado.

Carlos Dal Secco

Tenho te acompanhado direto, e aproveitei muitas das suas dicas e orientações.

Flavio Nascimento    15/08/2010 12:43:37

Grande mestre.. avelino....

Ta muito manêro de verdade e com certeza irei usar alguma técnica.


Envie seu comentário: