Precisa de um freelancer, códigos-fonte e exemplos completos? Bem-vindo(a) ao meu site. Além de realizar alguns serviços como freelancer eu tenho alguns códigos-fonte e exemplos completos de Java, Delphi, PHP, Python, C/C++, Hibernate, JPA, Spring, JSP, Servlets, Ruby, Ruby On Rails e muitas outras linguagens e frameworks. Veja como falar comigo clicando aqui.
O Delphi oferece uma maneira bem conveniente de se executar
os sons do sistema (aqueles sons que ouvimos quando iniciamos
ou fechamos o Windows, os sons dos diálogos de mensagens,
etc). Para ver este exemplo em funcionamento, comece colocando
a unidade MMSystem no uses do seu formulário.
Coloque um botão no formulário e faça com
que seu evento onclick seja similar ao mostrado
a seguir:
procedure TForm1.Button1Click(Sender: TObject);
begin
PlaySound(PChar('SystemStart'),
0, SND_ASYNC);
end;
Execute o aplicativo e clique no botão. Você deverá
ouvir o som de inicialização do Windows. Funcionou?
Vamos entender o código agora:
2 - Entendendo a função PlaySound
A chave para a execução deste código é
a função PlaySound, presente
na unidade MMSystem.pas. Experimente abrir este arquivo (geralmente
localizado em "C:\Arquivo de programas\Borland\Delphi#\Source\Rtl\Win\MMSystem.pas")
e localizar esta função. Você deverá
encontrar o protótipo abaixo:
function PlaySound(pszSound: PChar; hmod: HMODULE; fdwSound:
DWORD): BOOL; stdcall;
O protótipo nos indica que esta função
retorna um valor boolean. Na prática este valor nunca
é testado. Mas você pode experimentar. Como você
deve se lembrar, stdcall especifica que os parâmetros
para a função serão passados da direita
para a esquerda. Veja ainda uma observação sobre
os parâmetros da função:
pszSound - Do tipo PChar (um ponteiro para
uma variável do tipo Char), este parâmetro receberá
o som a ser executado. O tamanho máximo desta string,
incluindo o caractere de final de linha (null terminator), é
de 256 caracteres. Se este parâmetro for 0
(NULL em C++) qualquer som do tipo wave que estiver sendo executado
será interrompido.
Três flags no parâmetro fdwSound
(SND_ALIAS, SND_FILENAME, and SND_RESOURCE) determinam se a
string de pszSound será interpretada
com um apelido para um evento do sistema, um nome de arquivo
ou um identificador de recurso. Se nenhuma destas flags for
especificada, a função PlaySound pesquisa o registro
ou o WIN.INI a fim de encontrar uma associação
com o nome do som especificado. Se uma associação
for encontrada, o evento de som é executado, do contrário,
a string fornecida é tratada como nome de arquivo.
hmod - Do tipo HMODULE (uma referência
ao módulo atual), este valor pode ser 0 em Delphi (e
NULL em C++), a menos que SND_RESOURCE seja definido no parâmtro
fdwSound.
fdwSound - Define as flags que controlam como
o som será executado. Os valores abaixo, extraídos
da referência da API do Windows podem ser usados:
Valor
Significado
SND_APPLICATION
O som é executado usando
uma associação específica com a aplicação
SND_ALIAS
O parâmetro pszSound deve ser um
apelido (alias) para um evento de sistema no registro
ou WIN.INI. Não use com SND_FILENAME ou SND_RESOURCE.
SND_ALIAS_ID
O parâmetro pszSound é um
identificador de som pré-definido.
SND_ASYNC
O som é executado de forma assíncrona
e a função PlaySound retorna imediatamente
após o início da execução.
Para finalizar um som no formato wave que está
sendo executado de forma assíncrona, chame PlaySound
com o parâmetro pszSound defininido como 0 (em Delphi)
e NULL (em C++).
SND_FILENAME
O parâmetro pszSound é um
nome de arquivo.
SND_LOOP
O som é executado repetidamente
até que PlaySound seja chamado novamente com o
parâmetro pszSound definido com 0 (Delphi) ou NULL
(C++). Você deverá também definir
a flag SND_ASYNC para indicar um evento
de som assíncrono.
SND_MEMORY
Um arquivo de eventos de som é carregado
na memória RAM. O parâmetro definido em pszSound
deve apontar para uma imagem de som na memória.
SND_NODEFAULT
Nenhum som padrão é executado.
Se o som não puder ser encontrado, PlaySound retorna
sileciosamente sem executar som algum.
SND_NOSTOP
O som definido cederá lugar para
outro som que já está executando. Se o som
não puder ser executado porque o recurso necessário
para geral tal som está ocupado executando outro
som, a função retornará imediatamente
com o valor FALSE sem executar o som desejado. Se este
flag não for definido, a função PlaySound
tentará parar o som atual, de forma a liberar o
dispositivo para que o novo som seja executado.
SND_NOWAIT
Se o driver estiver ocupado, a função
retorna imediatamente sem executar o som.
SND_PURGE
Todos os sons devem ser interrompidos.
Se pszSound não for nil (Delphi) ou NULL (C++),
todas as instâncias do som definido serão
interrompidos. Se pszSound for nil (Delphi) ou NULL (C++),
todos os sons que estarão sendo executados por
solicitação da tarefa atual serão
interrompidos. Você deve também defininir
a referência de instância para parar os eventos
SND_RESOURCE
SND_RESOURCE
O parâmetro pszSound é um
identificador de recurso; hmod deve identificar a instância
que contém o recurso.
SND_SYNC
A execução do som será
síncrona. A função PlaySound retornará
depois que a execução do som for finalizada.
Agora que vimos o protótipo da função PlaySound,
vamos rolar o arquivo MMSystem.pas e encontrar sua definição.
Veja:
function PlaySound;
external mmsyst name 'PlaySoundA';
Aqui podemos ver que a função PlaySound simplesmente
efetua uma chamada à função PlaySoundA
definida na winmm.dll. Como descobrimos isso? Basta verificar
o valor da constante mmsyst no arquivo MMSystem.pas:
mmsyst = 'winmm.dll';
E, como a função PlaySoundA está definida
em uma DLL do sistema, nossa análise acaba por aqui.
Mas não sem antes fornecer uma lista dos sons disponíveis:
Experimente trocar "SystemStart" por "SystemAsterisk"
e veja o resultado. Estranho como essa lista não está
disponível nos arquivos de ajuda do Win32. Um ponto a
menos para a Microsoft.
Todo o conteúdo deste site,
quando não devidamente observado, pertence a seus idealizadores
e não
poderá ser usado para outras finalidades senão estudo e
aprimoramento de técnicas de programação.
Certifique-se de ler asnotas legaisantes de proceder com
o acesso e leitura do
conteúdo disponibilizado nestas páginas.