Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 Executando os sons do sistema em Qua Fev 16, 2011 7:45 am

mistiyoda

Membro
Membro

avatar
1 - Código Completo

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:

SystemDefault
SystemAsterisk
SystemExclamation
SystemExit
SystemHand
SystemQuestion
SystemStart

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.

http://www.portalmaker.co.cc

2 Re: Executando os sons do sistema em Qua Fev 16, 2011 8:07 am

Gustavo

Administrador
Administrador

avatar
Essa é uma dica para TODOS os seus tópicos, organize ele melhor com
Código:
COLOCANDO OS CÓDIGOS DESTA MANEIRA
E utilizando cores! Abraços e tudo de bom!


_______________________________________________


http://directon.forumeiros.com

3 Re: Executando os sons do sistema em Qua Fev 16, 2011 8:26 am

mistiyoda

Membro
Membro

avatar
pode deixar depois eu dou uma arrumadinha.

http://www.portalmaker.co.cc

4 Re: Executando os sons do sistema em Qua Fev 16, 2011 12:09 pm

racterianoo

Moderador Global
Moderador Global

avatar
Vlw cara ganhou meu + já estou enjoado dos barulhinhos xatos!

Dica: Como o Gustavo falow para dar um destaque com o spoiler, tem um jeito mais facil que é colocar de outra cor!


_______________________________________________

Obrigado Victor


Usa ae se você é e meu fan.



1º Lugar no 1ºCampeonato de GC da DirectOn!


Conteúdo patrocinado


Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum