FondoAccess.dll com as imagens em 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é 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Confesso que em termos de designer sou um desastre. Este foi um dos principais motivos que me fez migrar rapidamente para o Access 2007. O uso de ribbons, formulários contínuos zebrados, campos com rich text, fundo em azul, cores suavizadas e muitos outros benefícios visuais, foram um alento para mim, haja vista que requerem o mínimo de esforço para implementá-los.
Uma artifício visual que eu usava bastante no Access 2003 era o uso de uma dll, chamada de FondoAccess, pois com praticamente nenhuma programação, era possível alterar o fundo de tela (cinza feioso) por um que fizesse sentido visual para o aplicativo. Esta dll, no Access 2007, apresentou uma falha de não recompor a imagem de fundo, ao fechar formulários, e acabei tendo que abandoná-la.
No início de 2009, um cliente havia me perguntado se era possível introduzir a sua logomarca, substituindo o fundo azul do Access, e loucamente afirmei que sim. Fui pra casa me perguntando por que raios havia feito tal afirmativa, sabendo que o recurso que tinha para isso havia falhado no Access 2007.
Depois de muito pensar e realizar alguns testes, descobri uma solução para continuar fazendo o uso do FondoAccess no Access 2007. A solução que criei foi a de montar um formulário nas dimensões de um ponto que ficasse em movimento constante, forçando a dll a recompor a tela de fundo. Esta solução tem funcionado para os clientes que presto serviço, sem apresentar problema algum. Por isso, então, resolvi divulgá-la aqui.
Veja na lista abaixo algumas das propriedades que foram alteradas para que o formulário (frmFoco) tenha as dimensões de um ponto.
Largura = 0,051 cm
Estilo de borda = nenhum
Altura = 0,1 cm
Para gerar um movimento constante do formulário, criei a seguinte rotina no evento "No timer":
Private Sub Form_Timer()
Randomize
'Posiciono no canto esquerdo superior e acrescento um pequeno
'movimento no sentido vertical com o rnd() Me.Move Left:=0, Top:=(50 * Rnd()) End Sub
Para fazer uso desta dll é necessário registrá-la no Windows e depois referenciá-la no Access.
Utilize o executar do Windows para registrar a dll com o comando regsvr32.exe. Exemplo:
regsvr32.exe c:\fundo\fondoaccess.dll
Usando /u você desinstala a dll, se desejar.
regsvr32.exe c:\fundo\fondoaccess.dll /u
Para referenciar a dll no Access, abra o VBA e no menu ferramenta escolha referências. Clique no botão procurar e selecione fondoAccess.dll na pasta fundo.
Veja abaixo como são poucas as funções utilizadas para manipular a imagem de fundo com a dll FondoAccess:
Option Compare Database Public fundo As New FondoAccess.CMDIWindow
------------------------------------------------------------------- Function fncCarregaFundo(NomeImagem As String)
on error resume next fundo.DrawMode = 1 fundo.ImagePath = fncLocalFundo & NomeImagem fundo.Hook (Application.hWndAccessApp) End Function
------------------------------------------------------------------- Public Function fncDescarregaFundo() fundo.Unhook End Function
------------------------------------------------------------------- Public Function fncLocalFundo() As String fncLocalFundo = CurrentProject.Path & "\imagens\fundo\" End Function
No evento "Ao Abrir" do formulário frmFoco, carregamos a imagem de fundo.
Private Sub Form_Open(Cancel As Integer) Call fncCarregaFundo(DLookup("NomeImg", "tblImagensDeFundo")) End Sub
E no evento "Ao Fechar" do formulário, descarregamos a imagem de fundo.
Private Sub Form_Close() Call fncDescarregaFundo End Sub
Como são poucas as imagens de fundo, resolvi armazená-las numa tabela , usando um novo tipo de campo do Access 2007/2010, chamado de anexo. Neste campo, podemos armazenar vários tipos de arquivos, dentre eles, imagens de diversos tipos (bmp, gifs, jpeg e png).
No formulário, que seleciona o fundo a ser exibido (frmImgFundo), usei o novo controle anexo, com origem no campo anexo da tabela de imagens, proporcionando um mecanismo nativo de inclusão, exclusão e visualização das imagens, sem programação. Observe:
A questão mais complicada foi como usar a imagem do arquivo anexo, pois não é possível o uso direto, devido ao mecanismo de compactação utilizado pelo Access. A solução encontrada foi a de extrair, através de programação, a imagem selecionada e gravá-la numa pasta chamada fundo. A dll então carrega a imagem desta pasta.
veja abaixo o código utilizado para a extração e gravação da imagem na pasta fundo:
Private Function fncGravaFundo()
Dim rsfrm As DAO.Recordset2 Dim rsFilho As DAO.Recordset2 Dim fld As Field2 Set rsfrm = Me.Recordset Set rsFilho = rsfrm.Fields("imgFundo").Value Set fld = rsFilho.Fields("filedata")
'percorre a lista de imagens do quadro de imagens Do While Not rsFilho.EOF
'compara a posição absoluta com o valor do campo idimg If rsFilho.AbsolutePosition = Idimg Then
'verifica se existe uma imagem já gravada na pasta fundo
'Se existir DELETA If Len(Dir(fncLocalFundo, vbArchive) & "") > 0 Then Kill fncLocalFundo & "*.gif" End If
'salva a imagem escolhida do quadro de imagens, na pasta fundo fld.SaveToFile (fncLocalFundo) End If rsFilho.MoveNext Loop
Set fld = Nothing Set rsFilho = Nothing Set rsfrm = Nothing
End Function
Veja na figura, o exemplo do fundo modificado:
Download
Sobre o vídeo
Este vídeo tem duração total de 5 minutos. Porém, aqui pela página, você terá acesso apenas aos 2 minutos iniciais. Caso queira assistir o vídeo na íntegra, basta adquirir o kit UsandoAccess. Veja os detalhes da compra, clicando aqui.
Para saber mais sobre campo anexo clique aqui
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Adquira o kit UsandoAccess e aprenda em alta velocidade
40 comentário(s) Milton Nunes 30/01/2024 05:58:26 queria baixar o arquivo fundo.zip, mas toda vez que clico nele me envia para pagina de login, faço login e clico novamente no link e me manda de novo para tela de login. assim sucessivamente Avelino Sampaio 21/11/2022 06:31:09 Francisco, esqueça este projeto para versão 2010 ou superior. A DLL não está devidamente adaptada para atender estas versões superiores. FRANCISCO SANTOS 18/11/2022 17:45:30 Alguém saber como gravar fundo access no access2010, tentei tudo até com a DLL. Adriano 04/09/2022 16:42:57 Nao consigo achar esse arquivo de dll por nada DANIEL FERNANDO FRANCISCO 21/07/2022 08:26:10 Parabéns pelo seu trabalho! Muito bom mesmo... Passar o conhecimento adquirido é um dom e reflete com imensidão o nível de sua humildade. Paulo Maia 22/04/2022 12:03:58 Meu Access é 2010 x32 e meu W10 x64 Não Funciona Aqui ! ....... Rafael Uehara 02/02/2022 19:09:52 Como colocar imagem de fundo na tela da Ribbon com access 2010? Andre Luiz Goulart 16/12/2021 11:32:07 Avelino, consegui fazer o processo normalmente, mais dependendo do tamanho da imagem ela aparece lado a lado na tela ou então corta uma parte da imagem, como posso resolver isso? Elias Rodrigues 07/11/2021 16:47:17 Avelino Porque você não cria um Exemplo para o Office 2003, 90% dos Usuários access usam o 2003! Por Favor aguardamos... Daniel Petralanda Santos 20/08/2021 21:37:49 Amigo Avelino, Achei muito interessante o seu exemplo, mas não gosto muito da idéia de utilizar DLLs. Achei alguns exemplos na internet com muitas API's e mesmo assim costumam dar erros... Fiz um exemplo utilizando apenas uma API do windows em cima de um form com a imagem, o único problema de minha solução é que preciso utilizar a mesma no evento ontimer do form. segue uma humilde dica. Meu e-mail para enviar este exemplo caso seja do seu gosto. petralanda@gmail.com Sds, Daniel Petralanda Santos Fábio 21/04/2021 10:32:34 Avelino, onde escrevo a "Private Function fncGravaFundo()" ? Angelo 20/04/2021 15:21:26 Avelino, Parabéns pelo seu trabalho tenho certeza que como eu, muitos já tirarão muitas dúvidas em seu fórum. Bem... Gostaria de saber se é possível criar um campo do tipo Attachement via código. Já pesquisei em vários fóruns e não consegui uma resposta que resolvesse meu problema. A resposta mais próxima de resolver o que eu preciso é utilizar o Alter table definindo o tipo de campo como longbinary. Mas desta forma não consigo anexar mais de um documento no memo registro. Criar um campo em uma tabela definindo este como Anexo e copiar Anexos de uma tabela remota (em outro BD) para a tabela criada é possível? Avelino Sampaio 23/03/2021 16:25:49 Alexandre, aqui mesmo no site, na seção Tutorias, tem artigos sobre ribbons para vc estudar e aplicar. Bom estudo! Alexandre Magno 23/03/2021 15:38:37 Amigo, Gostaria de saber se tem como modificar a ribbon do access 2010 com XML, mas sem programa adicional algum, só com office. É para um projeto que eu estou tentando desenvolver na escola. Desde já agradeço a sua atenção. Obrigado. Avelino Sampaio 10/03/2021 09:26:44 Leonardo, registrou a DLL no windows ? Se registrou, ativou a a dll na lista de referênvias do VBA ? Qual erro o Access informa? Leonardo Ramalho 08/03/2021 22:25:29 Avelino, Já tenho um BD praticamente pronto, como faço para utilizar este seu exemplo? Colei as tabelas e os forms, mas não deu certo. Obrigada! Walter 01/02/2021 00:16:28 Avelino, Parabéns pelo seu maravilhoso trabalho e muitíssimo obrigado pelo Telemax. Fis os passos conforme disse, mas não muda a imagem, ainda fica com o fundo azul. Criei uma pasta "Fundo" dentro de C:\Telemax\Fundo e coloquei todas as imagens juntamente com a "FondoAccess.dll". Registrei a dll no windows e referenciei para C:\Telemax\Fundo mas não funciona. Albani Wilian 21/01/2021 16:03:45 Avelino, mais uma vez parabéns meu caro... Gostaria de saber se funciona no access 2013? Avelino Sampaio 03/01/2021 07:11:54 Gilson, funciona somente para janela sobreposta. Neste outro caso acredito que o melhor seja inserir a imagem direto nos formulários. Sucesso! Gilson Batista 02/01/2021 18:32:14 Avelino, o fundo accesso funciona normalmente em janela Sobreposta, mas quando mudo para Guia na Opção Janela o formulario não muda nem monstra a imagem. Como faço para resolver??? jamisson vieira 05/12/2020 02:34:18 cara vc não é de mais vc é de menos, porque tudo o que é de menos é raro e vc........ sem explicações. vc me ajudou de maisssssssssssssssssssssssssssssssssssss da conta Avelino Sampaio 23/11/2020 08:02:01 Sero, Pida ayuda en el siguiente sitio. http://www.mvp-access.com/foro/ Sero 22/11/2020 23:11:44 He realizado los pasos que me ha indicado pero no tuve suerte... seguiré intentando para ver donde se encuentra la falla. Nota: cabe destacar que en una pc de escritorio con win xp la dll funciona de maravilla. Avelino Sampaio 22/11/2020 07:12:50 Hola Copia el archivo "fondoaccess.dll" a la carpeta SysWOW64. Desactivar UAC en Windows (reiniciar). Utilice la línea de comando. regsvr32.exe c:\windows\SysWow64\fondoaccess.dll Si el Access es de 64 bits no funcionará debido a cambios en APIs. Éxito Sero 22/11/2020 03:43:40 Estimado Avelino, felicitarlo y agradecerle por los ejemplos brindados en vuestra pagina. NO estoy pudiendo registrar la dll en la version de mi SO, la cual es Windows 7 Home Premium de 64 bits- El error que me tira al intentar registrar es: "Es posible que FondoAccess.dll no sea compatible con el sistema operativo el cual esta ejecutando..." Sabe cual puede ser el problema con mi pc? Paulo Machado 06/11/2020 23:39:00 Avelino o seu site é muito bom, tenho uma grande admiração por pessoas que tem uma grande experiência em programação de access e compartilha o conhecimento para usuários que nem eu que está engatinhando neste universo (programador de Access). Abraço Avelino Sampaio 06/07/2020 08:03:00 Zé Maria, Vc pode utilizar o campo tipo Anexo, conforme mostrado no artigo. Se a quantidade de imagens for numerosa, o melhor é armazená-las numa pasta e então carregá-las através do comando PICTURE, para um campo tipo "imagem" do formulário. me!CampoImagem.picture ="c:\suaPasta\nomeImagem.gif" Sucesso! Zé maria 01/07/2020 11:47:54 Eu gostaria de saber como faço para inserir um campo que eu possa carregar imagens, obrigado a quem m e ajudar. Avelino Sampaio 26/05/2020 15:35:58 Víctor, Estoy muy feliz de ayudar. Gracias Victor Hugo Peña 26/05/2020 06:58:05 Exelente video y ejemplo , hace mucho buscaba un ejemplo asi, de antemano muchas gracias- Saludos Avelino Sampaio 26/04/2020 07:24:32 David, entre em contato pelo link "contato" e me passe mais informações. no aguardo Avelino Sampaio 25/04/2020 07:19:32 Márcio, Valeu pela ótima observação. Estarei alterando o exemplo, utilizando um tempo maior. Sucesso Márcio Melo - RJ 24/04/2020 17:39:41 Boa páscoa! só um comentário sobre essa técnica, observei que ela toma boa parte do processador e amenizei o efeito ao colocar o tempo no [intervalo do cronômetro] de 50 para 500, surtiu um ótimo efeito que pode ser verificador no gerenciador de tarefas do windows na guia processos (CPU) e performace. Gostei muito da idéia, mais acho importante observar se não vai comprometer o desempenho do banco de dados. Montei minha primeira Ribbon que ficou tão linda que procurei analisar esse fundo para completar o conjunto, o monta Ribbons ta muito show e em conjunto com o maestro esta imbátivel. Avelino muito obrigado por suas aulas, vim aprendendo na insistência e agora tenho a oportunidade do profissionalismo, parabéns! david 23/04/2020 19:20:41 estou com duvidas referente a a dll não consigo fazer, o erro que ocorre que a dll é um arquivo me help Avelino Sampaio 11/02/2020 11:24:49 Leonardo, está no arquivo exemplo que eu ofereço, nesta mesma página. Bom estudo Leonardo Costa 11/02/2020 06:45:40 Onde eu acho esse arquivo fundo.dll? Avelino Sampaio 19/01/2020 07:22:32 Adélio, Acho que isso seria viável no fundo de um formulário e não no fundo do Access. Tem colegas de fórum que fazem maravilhas, usando imagens criadas em programas de designer. A Microsoft promete esta revolução para o Access 2010 Grato Adélio da Costa Gonzaga 18/01/2020 22:57:05 Cada vez você se supera mais! Já disse: quando crescer quero ser igual a você (rsss)... Mas, amigo, tive uma idéia e quero saber sua opinião: se, em vez de uma imagem, colocássemos uma página de internet (html)... como poderíamos fazer isso? Na verdade a idéia não é minha. Os sistemas que uso em meu escritório (Alterdata) possuem essa funcionalidade. Isso deixa o sistema SEMPRE com um visual inovador, já que basta alterar a página da internet e o sistema também estará de cara nova. Tá lançado o desafio!!! Daniel Augusto 13/01/2020 21:04:27 Avelino Parabéns pelo dica, era exatemente isso que estava precisando. Mais uma vez, Parabéns. Abraços Avelino Sampaio 13/01/2020 14:47:49 Se o Windows Vista estiver com a UAC ativa, ocorrerá um erro (0x080004005) ao tentar registrar a dll. Procure no google como desabiltar a UAC Após registrar a dll volte a ativar a UAC Sucesso |