Sons no Access ..... BINGO!!!
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, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Certa ocasião recebi um email questionando se seria possível criar um Bingo no Access e se haveria possibilidade, também, do sorteio dos números ser narrado. Sabendo da existência de uma API, que permite o uso de sons no Access, montei o projeto com uma programação relativamente simples.
Comecei a gravar, um por um, os números do sorteio, que totalizavam 75. No meio do caminho das gravações dos números, lembrei de outra API muito simples, que permite retardar o tempo entre a execução das linhas de código. Desta forma foi possível gravar uma quantidade menor de números e com estes montar a locução de outros. Para exemplificar, destaco o número 35: pronuncio o número 30, dou uma pequena pausa, pronuncio a letra E, dou uma pequena pausa e por fim pronuncio o número 5. Assim, precisei gravar, apenas, a seguinte seqüência:
1 ao 20, 30, 40, 50, 60, 70, letra "E" e a palavra "Número"
O que são APIs ?
API - Application Program Interface - é um conjunto de funções predefinidas e que são utilizadas para controlar a aparência e o comportamento de cada elemento do Windows. Estas funções ficam armazenadas em arquivos com extensão DLL. Um arquivo DLL do Windows pode armazenar centenas de funções. Quem procura estudar, entender e aplicar estas funções passa a ter um potencial de programação inacreditável! O VBA do Access pode manipular a maioria dessas funções.
Se desejar se aprofundar sobre as APIs, acesse o link: http://allapi.mentalis.org
Veja abaixo as duas APIs, usadas no exemplo:
Faça o login aqui para ter acesso ao código.
Para usarmos a API do som, basta indicarmos o local e o arquivo de som, conforme o exemplo:
Call PlaySound "c:\MinhaPasta\sons\meuArquivo.wav", 1, 1
Para usarmos a API de espera, basta indicarmos o tempo desejado, em milésimo de segundos.
Call Sleep(1000) ' Espera por 1 segundo
Call Sleep(10000) ' espera por 10 segundos
Para pronunciar o número 35, o código é escrito na seguinte seqüência:
Faça o login aqui para ter acesso ao código.
E quanto ao sorteio dos números, como é feito no Access ?
O Access tem uma função chamada Rnd(), que retorna com um número randômico.
Toda vez que se executa o Rnd() é gerado um número aleatório, que poderá se repetir. Exemplo:
rnd() > Resultado : 0,9963837
rnd() > Resultado : 0,7055475
rnd() > Resultado : 0,533424
rnd() > Resultado : 0,0095186
A função Rnd() retorna um valor menor que 1, mas maior ou igual a zero.
Agora, observe o seguinte: se multiplicarmos cada resultado por 100, teremos:
rnd() * 100 > Resultado : 99,63837
rnd() * 100 > Resultado : 70,55475
rnd() * 100 > Resultado : 53,3424
rnd() * 100 > Resultado : 0,95186
Podemos, então, ter valores sorteados que vão de 0 a 99,99999.
Percebeu que o número multiplicador é o limitador máximo do número sorteado? Se desejarmos sortear números de 0 a 999,9999, basta multiplicarmos o Rnd() por 1000.
O Bingo aqui apresentado tem 75 números. Se multiplicamos o Rnd() por 75, teremos o intervalo, que irá variar de 0 a 74,99999.
rnd() * 75 > Resultado : 74,72877
rnd() * 75 > Resultado : 52,91606
rnd() * 75 > Resultado : 40,0068
rnd() * 75 > Resultado : 0,71389
Para ficarmos com a parte inteira, basta usarmos a função Int().
Int(rnd() * 75) > Resultado : 74
int(rnd() * 75) > Resultado : 52
int(rnd() * 75) > Resultado : 40
int(rnd() * 75) > Resultado : 0
Assim, os sorteios irão de 0 a 74. Porém, no nosso caso, os sorteios devem ser de 1 a 75. Para isso, basta somarmos o valor 1 ao resultado para que fique no intervalo desejado.
Int(rnd() * 75) + 1 > Resultado : 75
Int(rnd() * 75) + 1 > Resultado : 53
Int(rnd() * 75) + 1 > Resultado : 41
Int(rnd() * 75) + 1 > Resultado : 1
Como armazenar o número sorteado no campo correto?
A sintaxe completa no VBA que representa o campo de um formulário é esta:
forms!NomeDoFormulário!NomeDoCampo
Se estivermos usando a área do VBA, pertencente ao formulário em questão, podemos substituir a sintaxe Forms!NomeDoFormulário pelo o auto-identificador Me, ficando a escrita reduzida da seguinte forma:
Me!NomeDoCampo
Quando desejamos passar um valor para o campo, basta usarmos o sinal de igualdade:
Me!NomeDoCampo = valor
Existe uma outra forma de sintaxe para representar o nome de um campo e que nos permite um grau de flexibilidade enorme, que é:
Me("NomeDoCampo") = valor
Para você entender a importância deste formato, quero que imagine a seguinte situação: um formulário com 30 campos em que precisamos limpar os 30 campos para receber novos valores. Teríamos então que escrever 30 linhas no VBA, conforme abaixo:
me!("NomeCliente")= null 'primeira linha me!("endereco")= null me!("Telefone")= null ... ... me!("observacao")= null 'trigésima linha
Então, resolvemos alterar o nome dos campos, seguindo a seguinte padronização:
campo1, campo2, campo3, ..., campo30
Observe que os campos foram numerados! Agora, veja como posso representar a sintaxe de um dos campos:
me("campo1") = null
A sintaxe de um dos campos pode ser escrita também da seguinte forma:
me("campo" & 1) = null
O símbolo "&" junta(concatena) as partes, formando um todo.
Agora que padronizamos os nomes dos campos e que sabemos que é possível usar a concatenação, podemos criar uma laço com o uso da instrução FOR, que reduzirá a escrita.
Faça o login aqui para ter acesso ao código.
Confira! Das 30 linhas, reduzimos a 4 linhas de código! Dê uma olhadinha na função fncLimpar(), do arquivo exemplo. Você verá exatamente este tipo de rotina sendo aplicado!
Os campos, que irão armazenar os 75 números do sorteio, padronizei com os seguintes nomes:
tx1, tx2, tx3, ..., tx74 e tx75
Vamos supor que o número 35 tenha sido sorteado! Veja como é simples o campo correspondente tx35 assumir este valor:
me("tx" & 35) = 35 Essa escrita é o mesmo que escrever me("tx35")=35
Observe o código para o preenchimento dos campos, sempre que houver o sorteio:
Dim intRnd as integer
'Número sorteado passado para variável intRnd intRnd = int(rnd() * 75) + 1
'Campo correspondente ao número sorteado, recebendo o número me("tx" & intRnd) = intRnd
E como saber se o número que está sendo sorteado já foi sorteado antes ?
É bem simples: basta verificar se o campo correspondente está preenchido. Se já estiver preenchido, forçamos um novo sorteio, através de em loop com a instrução DO WHILE, até se conseguir um número ainda não sorteado.
Acompanhe como ficou o código:
Faça o login aqui para ter acesso ao código.
Aonde ficam armazenados os arquivos de som ?
Arquivos de som e imagens são mais adequados que fiquem armazenados fora do aplicativo, pois tais arquivos geralmente consomem muito espaço da aplicação, o que é indesejável. Todos os detalhes sobre o uso de Caminho Relativo você tem aqui.
Testando sons em botões
Abrindo o formulário frmTestaSons você terá uma série de botões, conforme figura abaixo:
Teste todos os botões para se ter uma idéia das possibilidades.
Baixe o arquivo exemplo:
Bom jogo!
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
30 comentários Bruno 10/09/2023 08:34:36 Estou usado parte do seu exemplo do “UsandoAccess”, num projeto que reproduz sons atravez do botão, mas estou com problemas em reproduzir algumas faixas, alguma ideia? Será o tamanho? Nélio Lemos 30/12/2022 16:21:15 Caro Avelino Sampaio, já desenvolvi com base no seu sistema, algumas das funcionalidades que citei acima, e acrescentei a geração de cartelas com até 6 cartelas por página, acrescentei 400 cartelas ao banco de dados, o sistema acusa quem ganhou o sorteio, indicando o nome, endereço, telefone, vendedor e se a cartela foi paga e a personalização da cartela, como: Nome do bingo, local, data, valor, nome dos prêmio, imagens dos prêmios, acrescentar uma imagem de fundo na cartela e muitas outras, contudo eu ainda desejo que o sistema indique quantas cartelas estão próximas de ganhar o prêmio e outras ideias. Então, se puder me ajudar nesta empreitada eu não me importaria de pagar pelo serviço, até porque o projeto é seu. João Geadas 21/02/2022 20:52:58 Olá, o meu nome é João e vi este seu exemplo, muito bom, mas gostaria de fazer uma outra brincadeira para ajudar o meu filho nas tabuadas. Neste seu exemplo o programa gera um numero aleatoriamente e devolve o mesmo para uma caixa de texto que por sua vez está numerada. A minha duvida é a seguinte gostaria que o numero gerado fosse aleatório mas que a caixa de texto onde fosse escrito fosse também aleatória e não coloca-se o numero devolvido na caixa com o mesmo numero conforme neste exemplo. Dá para fazer isto? Obrigado desde já Avelino Sampaio 30/07/2021 08:16:41 Marcelo, muito obrigado por este importante feedback. Sucesso! Marcelo Souza 28/07/2021 15:51:17 Descobri o "x" da questão foi só mudar o valor do atributo no final da linha de comando de "0" zero para "1" e funcionou... De: Call sndPlaySound32("G:\Bingo\sons\globogirando.wav", 0) para: Call sndPlaySound32("G:\Bingo\sons\globogirando.wav", 1) Marcelo Souza 24/07/2021 10:56:14 Bom dia pessoal, inseri uma figura com movimento no Excel e gostaria de executar um som ao mesmo tempo que o comando "rotation" VBA é executado, tem como? Avelino Sampaio 19/07/2021 06:51:07 Marcelo, obrigado pelo feedback e sucesso! Marcelo Souza 18/07/2021 11:45:22 Obrigado Avelino, conseguir entender o código e já resolvi! Valeu camarada, abração! Marcelo Souza 17/07/2021 21:28:26 Desenvolvi um programinha de bingo eletrônico e gostaria de colocar os sons das bolinhas, mas não consegui usar o código... Marcelo Souza 17/07/2021 21:20:36 Tentei usar este código no Excel, mas não consegui. Poderi me ajudar? Avelino Sampaio 02/07/2021 05:19:14 Marcelo, o programa que tenho é somente este que está disponível no final do artigo, para o download. Sucesso! Marcelo Souza 01/07/2021 09:14:53 Seria pedir muito que me disponibilizasse o programa pronto? Desde já agradeço! Abraços Nelio Lemos 30/05/2021 22:01:31 Olá, achei excelente o programa, você é TOP, parabéns! Baixei o sistema de bingo e gostaria de ver nesse sistema alguns recursos, como: Colorir o número que foi sorteado. Indicar o último número sorteado. Informar quantas cartelas estão prestes a ganhar, por exemplo: cartelas restando 5 números. Informar além do número da cartela ganhadora, o nome do comprador da cartela. Tenho muitas outras ideias, mas, essas deixariam o programa ainda mais show. CARLOS ROGERIO 18/03/2021 20:32:26 show de boa amigo....... caraca...... MARCIO MELO - RJ 01/11/2020 20:25:03 Um programa super show de bola e mostrando como o access é maliável e pode ser usado em diversas ocasiões, basta criatividade... Parabéns por mais esse excelente aula, tutorial Sou mais Brasil! Roniscler - Juiz de Fora 31/10/2020 19:34:54 Olá Avelino. Me parece que a Microsoft quase deu um tiro letal no Delphi por causa das API's. Ela queria descontinuar essa forma de programação por causa do .net framework. Depois de muita pressão ela voltou atrás e o Win7 e vei com API. Você, ou alguem do site, sabe algo sobre isso? Marcelo - São Bento do Sul - SC 31/10/2020 10:23:02 Estou aguardando ancioso este curso de VBA ....Já sou cliente do MontaRibbons e definitivamente é a melhor ferramenta sobre o assunto e para aprendizagem em xml... Quem quizer adquirir eu recomendo.....A avelino da toda a atenção nos primeiros passos, ensinando várias dicas importantes e auxiliando no aprendizado...... Serei enterno cliente dele.....(risos).... Avelino Sampaio 31/10/2020 09:51:21 João, estou lutando muito aqui para criar um curso de VBA, para iniciantes, que valha apena. Assim que eu lançar estarie lhe informando. Vc será um dos meus primeiro avaliadores.(risos). Sucesso! Avelino Sampaio 31/10/2020 09:47:20 Johnny, isso mesmo, muito bem lembrado sobre a questão do Win64! Eu não abordei este detalhe, para não confundir os mais novos mas o arquivo exemplo foi com esta adaptação. Aqueles que quiserem se aprofundar sobre o tema, tem um tutorial que explico sobre o uso de APIs na versão de 64 bits. Grato Johnny-Blumenau/SC 31/10/2020 09:23:12 Muito bom Avelino. Apenas temos de implementar a PtrSafe pra rodar no Win64. João Ricardo - Miranda/MS 31/10/2020 09:20:24 Olá pessoal! Avelino, parabéns mais uma vez pelo excelente conteúdo e ótima didática. Vejo muitas possibilidades para este aplicativo em especial para poder trabalhar com crianças. Estou aguardando ansioso pelo curso de VBA para iniciantes. Avelino Sampaio 31/10/2020 05:38:38 Claudio, os menus foram substituidos por Ribbons, nas versões 2007 e 2010. Vc está no lugar certo para aprender sobre as ribbon. Conheça o MONTARIBBONS. Bom estudo! Avelino Sampaio 31/10/2020 05:35:24 Antonio Martins, estou preparando um curso de VBA para iniciantes que em breve estarei lançando. Cadastre-se aqui no site para receber meu comunicado sobre o lançamento. Gilson, obrigado pea sua dica Pessoal, fico muito agredecido pela participação de vocês. Sucesso! Marcelo David 30/10/2020 21:52:06 Mais uma vez, parabéns!!! Todos os seus artigos são ótimos!!! Gilson 30/10/2020 20:05:55 Deveria implementar com um número maior de cartelas e com a palavra BINCO nas cartelas e no formulario de sorteio. Gilson 30/10/2020 19:57:41 Excelente aplicativo, gostei bastante. Adilson Calixto 30/10/2020 17:38:08 Belo Tópico Avelino. Continue assim, precisamos destas criações que você nos disponibiliza. abs. Claudio 30/10/2020 15:47:46 Olá Amigos, Primeiro parabéns pelo sistema de bingo fantástico, gostaria de uma ajuda dos amigos montei um sistema simples em access para controlar lançamentos de processos, preciso criar um menu especifico porque vai rodar em rede e não gostaria que aparecesse aquele topo tradicional para o usuários. alguem poderia dar uma dica? abs. JBSR 30/10/2020 15:46:50 Parabens pelo tópico Avelino. São recursos que deixam o Access mais profissional e muitas vezes são mal aproveitados pelos programadores por falta de conhecimento das técnicas. O seu site tem mostrando um grande acervo de recursos access. Aonde você está tão bem escondido que a MS ainda não te achou???!?!?!?! Sds companheiro Antonio Martins dos Santos 30/10/2020 13:55:30 Excelente. Tenho muita vontade de aprender programação VBA com Access |