Descompacte o arquivo, temos uma pasta chamada som e outra chamada capas, 1 arquivo xml musicas.xml e 1 arquivo Flash mp3player.fla
Abra o mp3player.fla, temos o MP3 pronto só falta as Actions.
Vamos as Actions:
ActionScript
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.DropShadowFilter;
//Adicionando nossas variáveis
var getMusica:URLRequest;
var Musica:Sound = new Sound();
var PosProgresso:Number;
var soundChannel:SoundChannel;
var MusicaAtual:Sound = Musica;
var pos:Number;
var Atual:Number = 0;
var AtualP:Number;
var AtualA:Number;
var MusicaPlay:Boolean = false;
var xml:XML;
var ListaMusica:XMLList;
var MusicaVolume:SoundTransform = new SoundTransform();
var ProVolume:Number;
var VolumeLimite:Rectangle = VolumeBar.getBounds(VolumeBar);
var xPos:Number = VolumeLimite.x;
var yPos:Number = VolumeLimite.y;
var widthPos:Number = VolumeLimite.width - VolumeBar.VolumeDrag.width;
var heightPos:Number = 0;
var limites:Rectangle = new Rectangle(xPos,yPos,widthPos,heightPos);
var SeekLimite:Rectangle = SeekBar.getBounds(SeekBar);
var xSeekPos:Number = SeekLimite.x;
var ySeekPos:Number = SeekLimite.y;
var widthSeekPos:Number = 332;
var heightSeekPos:Number = 0;
var limitesSeek:Rectangle = new Rectangle(xSeekPos,ySeekPos,widthSeekPos,heightSeekPos);
var loadIMG:Loader = new Loader();
var loadIMGR:Loader = new Loader();
var loadIMGP:Loader = new Loader();
//usando uma máscara para a capa com reflexo
Imagem.load_imgr.cacheAsBitmap = true;
Imagem.mask_ref.cacheAsBitmap = true;
Imagem.load_imgr.mask = Imagem.mask_ref;
//carregando XML
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, CarregaXML);
var URLRe:URLRequest = new URLRequest("musicas.xml");
loader.load(URLRe);
//carregando música
function LoadProgress(e:Event){
var loadedPct:uint = Math.round(344 * (MusicaAtual.bytesLoaded/MusicaAtual.bytesTotal));
SeekBar.SeekBar_load.width = loadedPct;
}
//música carregada
function LoadComplete(e:Event){
SeekBar.SeekBar_load.width = 344;
stage.removeEventListener(Event.ENTER_FRAME, LoadProgress);
}
//apos carregamento do XML
function CarregaXML(e:Event){
xml = new XML(e.target.data);
ListaMusica = xml.som;
getMusica = new URLRequest(ListaMusica[0].url);
Musica.load(getMusica);
soundChannel = Musica.play();
//carrega as informções da música
musica_txt.text = ListaMusica[0].musica;
artista_txt.text = ListaMusica[0].artista;
album_txt.text = ListaMusica[0].album;
ProximaMc.musica_txtp.text = ListaMusica[1].musica;
ProximaMc.artista_txtp.text = ListaMusica[1].artista;
//carragando capas, normal, reflexo e miniatura da próxima
loadIMG.load(new URLRequest(ListaMusica[0].img));
loadIMGR.load(new URLRequest(ListaMusica[0].img));
loadIMGP.load(new URLRequest(ListaMusica[1].img));
Imagem.load_img.load_mc.addChild(loadIMG);
Imagem.load_imgr.load_mc.addChild(loadIMGR);
ProximaMc.load_imgp.load_mc.addChild(loadIMGP);
//quando a música acabar chamar função ProximaMusica
soundChannel.addEventListener(Event.SOUND_COMPLETE, ProximaMusica);
stage.addEventListener(Event.ENTER_FRAME, Atualiza);
stage.addEventListener(Event.ENTER_FRAME, LoadProgress);
Musica.addEventListener(Event.COMPLETE, LoadComplete);
}
//Atualiza e mostra o tempo da música
function AtualizaTempo(num:Number){
var TempoAtual:Number = num / 1000;
var TempoTotal:Number = MusicaAtual.length / 1000;
var Minutos:Number = 0;
var Segundos:Number = 0;
var MinutosTotal:Number = 0;
var SegundosTotal:Number = 0;
Minutos = Math.floor(TempoAtual / 60);
Segundos = Math.floor(TempoAtual) % 60;
MinutosTotal = Math.floor(TempoTotal / 60);
SegundosTotal = Math.floor(TempoTotal) % 60;
TempoAtualTxt.text = ((Minutos<10) ? "0"+Minutos : Minutos)+":"+((Segundos<10) ? "0"+Segundos : Segundos);
TempoTotalTxt.text = "de "+((MinutosTotal<10) ? "0"+MinutosTotal : MinutosTotal)+":"+((SegundosTotal<10) ? "0"+SegundosTotal : SegundosTotal);
}
//Atualiza SeekBar
function Atualiza(e:Event){
soundChannel.addEventListener(Event.SOUND_COMPLETE, ProximaMusica);
var MusicaProgresso:Number = soundChannel.position / MusicaAtual.length;
SeekBar.SeekDrag.x = SeekBar.SeekBar_bg.x + MusicaProgresso * 332;
SeekBar.SeekBarPro.width = SeekBar.SeekDrag.x + 14;
AtualizaTempo(soundChannel.position);
}
//Controles de próxima, anterior, pause
Controles.btnProxima.addEventListener(MouseEvent.CLICK, ProximaMusica);
Controles.btnAnterior.addEventListener(MouseEvent.CLICK, AnteriorMusica);
Controles.btnPause.addEventListener(MouseEvent.CLICK, PauseMusica);
//botão próxima com imagem
ProximaMc.btn_ProximaMc.buttonMode = true;
ProximaMc.btn_ProximaMc.addEventListener(MouseEvent.CLICK, ProximaMusica);
ProximaMc.btn_ProximaMc.addEventListener(MouseEvent.MOUSE_OVER, ProximaOver);
ProximaMc.btn_ProximaMc.addEventListener(MouseEvent.MOUSE_OUT, ProximaOut);
ProximaMc.btn_ProximaMc.addEventListener(MouseEvent.MOUSE_UP, ProximaOver);
ProximaMc.btn_ProximaMc.addEventListener(MouseEvent.MOUSE_DOWN, ProximaPress);
function ProximaOver(e:MouseEvent){
ProximaMc.gotoAndStop(2);
}
function ProximaOut(e:MouseEvent){
ProximaMc.gotoAndStop(1);
}
function ProximaPress(e:MouseEvent){
ProximaMc.gotoAndStop(3);
}
//ProximaMusica função para mudar para a próxima música
function ProximaMusica(e:Event){
if (Atual < (ListaMusica.length() - 1)){
Atual++;
}else{
Atual = 0;
}
if (Atual == ListaMusica.length() - 1){
AtualP = 0;
}else{
AtualP = Atual + 1;
}
var nextReq:URLRequest = new URLRequest(ListaMusica[Atual].url);
var Musica:Sound = new Sound(nextReq);
soundChannel.stop();
musica_txt.text = ListaMusica[Atual].musica;
artista_txt.text = ListaMusica[Atual].artista;
album_txt.text = ListaMusica[Atual].album;
ProximaMc.musica_txtp.text = ListaMusica[AtualP].musica;
ProximaMc.artista_txtp.text = ListaMusica[AtualP].artista;
loadIMG.load(new URLRequest(ListaMusica[Atual].img));
loadIMGR.load(new URLRequest(ListaMusica[Atual].img));
loadIMGP.load(new URLRequest(ListaMusica[AtualP].img));
soundChannel = Musica.play();
MusicaPlay = true;
MusicaAtual = Musica;
stage.addEventListener(Event.ENTER_FRAME, Atualiza);
stage.addEventListener(Event.ENTER_FRAME, LoadProgress);
MusicaAtual.addEventListener(Event.COMPLETE, LoadComplete);
}
//AnteriorMusica função para a música anterior
function AnteriorMusica(e:Event){
if (Atual > 0){
Atual--;
}else{
Atual = ListaMusica.length() - 1;
}
if (Atual == 0){
AtualA = 2;
}else{
AtualA = Atual - 1;
}
var prevReq:URLRequest = new URLRequest(ListaMusica[Atual].url);
var Musica:Sound = new Sound(prevReq);
soundChannel.stop();
musica_txt.text = ListaMusica[Atual].musica;
artista_txt.text = ListaMusica[Atual].artista;
album_txt.text = ListaMusica[Atual].album;
ProximaMc.musica_txtp.text = ListaMusica[AtualA].musica;
ProximaMc.artista_txtp.text = ListaMusica[AtualA].artista;
loadIMG.load(new URLRequest(ListaMusica[Atual].img));
loadIMGR.load(new URLRequest(ListaMusica[Atual].img));
loadIMGP.load(new URLRequest(ListaMusica[AtualA].img));
soundChannel = Musica.play();
MusicaPlay = true;
MusicaAtual = Musica;
stage.addEventListener(Event.ENTER_FRAME, Atualiza);
stage.addEventListener(Event.ENTER_FRAME, LoadProgress);
MusicaAtual.addEventListener(Event.COMPLETE, LoadComplete);
}
//Pausa a música
function PauseMusica(e:Event){
pos = soundChannel.position;
soundChannel.stop();
MusicaPlay = false;
stage.removeEventListener(Event.ENTER_FRAME, Atualiza);
Controles.btnPlay.addEventListener(MouseEvent.CLICK, PlayMusica);
}
//Reproduz a música
function PlayMusica(e:Event){
if (MusicaPlay == false){
soundChannel = MusicaAtual.play(pos);
soundChannel.addEventListener(Event.SOUND_COMPLETE, ProximaMusica);
MusicaPlay = true;
stage.addEventListener(Event.ENTER_FRAME, Atualiza);
Controles.btnPlay.removeEventListener(MouseEvent.CLICK, PlayMusica);
}
}
//SoundMixer.computeSpectrum - Equalizador
var ba:ByteArray = new ByteArray();
//Cria um Sprite e adiciona ao palco
var gr:Sprite = new Sprite();
gr.y = 85;
gr.x = 365;
gr.cacheAsBitmap = true;
addChild(gr);
//máscara para o equalizador
mask_gr.cacheAsBitmap = true;
mask_gr.y = 25;
mask_gr.x = 365;
gr.mask = mask_gr;
var Mtime:Timer = new Timer(70);
Mtime.addEventListener(TimerEvent.TIMER, Equalizador);
Mtime.start();
//função Equalizador
function Equalizador(e:TimerEvent){
SoundMixer.computeSpectrum(ba, true, 0);
var i:int;
//tamanho do width(Largura) das barras;
var w:uint = 5;
gr.graphics.clear();
//tamanho e cor da linha;
gr.graphics.lineStyle(0, 0x222222);
//cor das barras;
gr.graphics.beginFill(0x3079ED);
for (i=0; i<170; i+=w){
var t:Number = ba.readFloat();
var n:Number = (t * 50);
gr.graphics.drawRect(i, 0, w, -n);
}
}
//Volume
VolumeBar.VolumeDrag.x = widthPos;
VolumeBar.mouseEnabled = false;
VolumeBar.VolumeDrag.buttonMode = true;
VolumeBar.VolumeDrag.addEventListener(MouseEvent.MOUSE_OVER, overDrag);
VolumeBar.VolumeDrag.addEventListener(MouseEvent.MOUSE_OUT, outDrag);
VolumeBar.VolumeDrag.addEventListener(MouseEvent.MOUSE_DOWN, dragVolume);
//Quando mover o MC do Volume
function dragVolume(e:MouseEvent){
VolumeBar.VolumeDrag.startDrag(false,limites);
//chama a função Volume que atualiza o % do volume
addEventListener(Event.ENTER_FRAME, Volume);
stage.addEventListener(MouseEvent.MOUSE_UP, stopVolume);
}
//Quando soltar o MC do Volume
function stopVolume(e:MouseEvent){
VolumeBar.VolumeDrag.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP, stopVolume);
}
//atualiza o % do Volume e o Width da Barra do Volume
function Volume(e:Event){
ProVolume = VolumeBar.VolumeDrag.x / widthPos;
MusicaVolume.volume = ProVolume;
soundChannel.soundTransform = MusicaVolume;
VolumeBar.VolumeBarPro.width = VolumeBar.VolumeDrag.x + 14;
VolumeTxt.text = Math.round((VolumeBar.VolumeDrag.x)/(limites.right-limites.left)* 100) + "%";
}
//SeekBar
SeekBar.mouseEnabled = false;
SeekBar.SeekDrag.buttonMode = true;
SeekBar.SeekDrag.addEventListener(MouseEvent.MOUSE_OVER, overSeekDrag);
SeekBar.SeekDrag.addEventListener(MouseEvent.MOUSE_OUT, outSeekDrag);
SeekBar.SeekDrag.addEventListener(MouseEvent.MOUSE_DOWN, dragSeek);
SeekBar.SeekBar_m.addEventListener(MouseEvent.CLICK, ClickSeek);
SeekBar.SeekBar_m.buttonMode = true;
//Quando clicar em alguma area do SeekBar
function ClickSeek(e:MouseEvent){
PosProgresso = Math.round(MusicaAtual.length*(SeekBar.SeekBar_m.mouseX-7)/332);
SoundMixer.stopAll();
stage.addEventListener(Event.ENTER_FRAME, Atualiza);
soundChannel = MusicaAtual.play(PosProgresso);
}
//Quando mover o MC do SeekBar
function dragSeek(e:MouseEvent){
SeekBar.SeekDrag.startDrag(false,limitesSeek);
SoundMixer.stopAll();
stage.removeEventListener(Event.ENTER_FRAME, Atualiza);
//chama a função Seek que atualiza p Tempo
stage.addEventListener(Event.ENTER_FRAME, Seek);
stage.addEventListener(MouseEvent.MOUSE_UP, stopSeek);
}
//Quando soltar o MC do SeekBar
function stopSeek(e:MouseEvent){
SeekBar.SeekDrag.stopDrag();
SoundMixer.stopAll();
stage.addEventListener(Event.ENTER_FRAME, Atualiza);
stage.removeEventListener(Event.ENTER_FRAME, Seek);
stage.removeEventListener(MouseEvent.MOUSE_UP, stopSeek);
soundChannel = MusicaAtual.play(PosProgresso);
}
//atualiza o Tempo e o Width da Barra do SeekBar
function Seek(e:Event){
PosProgresso = Math.round(MusicaAtual.length*(SeekBar.SeekDrag.x)/332);
SeekBar.SeekBarPro.width = SeekBar.SeekDrag.x + 14;
AtualizaTempo(PosProgresso);
}
function overDrag(e:MouseEvent){
VolumeBar.VolumeDrag.gotoAndStop(2);
}
function outDrag(e:MouseEvent){
VolumeBar.VolumeDrag.gotoAndStop(1);
}
function overSeekDrag(e:MouseEvent){
SeekBar.SeekDrag.gotoAndStop(2);
}
function outSeekDrag(e:MouseEvent){
SeekBar.SeekDrag.gotoAndStop(1);
}
Exemplo:
Como sempre você pode usar para AIR
Bom é isso.
Bons estudos e até a próxima
Abraço
Autor: Thiago Bueno
Tags: Flash, ActionScript 3, AS3, MP3 player, MP3Player, Equalizador, XML, Música, Artista, Album, Imagem, SeekBar, Volume







Olá! Sou iniciante em flash mas gostaria muito de desenhar um player como esse. Descompactei a pasta e abri o flash copiando o codigo em action, mas infelizmente nada aconteceu. Nao sei se preciso acrecentar alguma coisa a mais dentro da action...realmente nao sei. Apenas copiei o codigo completo e salvei em meu flash CS4. Substitui as musicas por outras e as imagens e dados do album em XML.
Por favor, preciso muito da ajuda de voceis. Isso tem passado muito comigo, comprei varias revistas que sempre tem o tutorial escrito com as actions e quando eu copio nada acontece. Preciso de dicas de como aprender usar o tutorial.
Obrigada
Francesca
responder - útil - 29/04/2010 às 17:46
Como fazer pra que o player não toque automaticamente?
responder - útil - 01/05/2010 às 20:20
Bom tutorial.
O AS está perfeito...
O player está c/ muito bom aspecto. .
Parabens!
responder - útil - 16/05/2010 às 15:05
Oi, parabéns pelos TUTO's
Ajuda muito que esta começando nessa Área...
responder - útil - 17/05/2010 às 07:43
Boas eu fiz isso e correu bem ate a parte que adicionei mais do que 3 musicas eu meti 12 musicas e corre tudo bem menos p botao de prev.
Ao fazer prev. ele mete sempre a primeira musica a tocar e nao a anterior
Podes resolver este erro ???
responder - útil - 18/06/2010 às 05:08
cara de + esse seu player concerteza no proximo site que eu fizer eu vou colocar esse player la vlw.
responder - útil - 03/08/2010 às 16:36
olá pessoal...
eu sou novo aki nisso. .. gostaria d saber se tem como eu botar esse mp3 player junto com outra animação já feita . por exemplo
se eu tiver um menu no cabeçalho da pagina tem como eu botar o player assim dentro do menu num cantinho?
por favor, se tiver como dêm uma dika..
abraços...
responder - útil - 17/08/2010 às 01:04
baixei os arquivos mas quando vou abrir usando o flash cs3 dá a msg = Unexpected file format
e agora?
alguem pode me enviar o arquivo ?
xdamiel@gmail.com
Obrigado
responder - útil - 01/09/2010 às 20:26
Pow, tow com o mesmo problema do Damiel!!!
Eu tento abrir o .fla com o meu CS3 e dá exatamente a msma msg: Unexpected file format
Vlww... t+
responder - útil - 14/09/2010 às 13:54
Olá
Damiel e Victor esta dando a mensagem "Unexpected file format" pq o arquivo para download do "Romer Santos" esta em formato CS4
Obrigado
responder - útil - 14/09/2010 às 14:01
Thiago,
Imaginei q pudesse ser isso, mas fiquei na dúvida pq na descrição fala formato: Flash CS3.
Vou ter q ver oq q eu faço entaum, valeu!
Abraços....
responder - útil - 15/09/2010 às 08:53
ola estou com um problema pois os nomes de artista e musica só estao saindo algumas vogais alguem ai teve o mesmo erro ou pode me ajudar...
responder - útil - 25/12/2010 às 18:47
Como que faço para as musicas serem reproduzidas aleatoriamente.
responder - útil - 14/02/2011 às 15:38
Caros, Boa Tarde
Tenho uma duvida
Gostaria de colocar no site que estou criando so as barras do equalizador no centro do site para funcionar com o player que ja tenho tocando as minhas musicas como faço
exemplo: http://templates.entheosweb.com/template_number/27700.asp#/home/
Gostei mt desse e queira fazer bem parecido me ajudem
Grato...
responder - útil - 16/02/2011 às 14:49
Olá Pessoal!
Bom se vocês estão baixando o arquivo do Romer Santos e tiver dando erro vocês não estão seguindo o Tutorial e nem baixando o arquivo de inicio se tem erros não é no codigo do Tutorial e sim do arquivo baixado, o player de exemplo que tem no fim do Tutorial foi criado com o codigo do Tutorial se vocês seguirem com o arquivo de inicio e o codigo do Tutorial acho que não terão mais problemas
Abraço!
responder - útil - 22/03/2011 às 13:28
Como fazer pra que o player não toque automaticamente,
e como acrescentar um botão stop ?
responder - útil - 05/04/2011 às 10:36
quero um tocador como este ai mais que toque pelo menos 12 musicas
responder - útil - 15/05/2011 às 01:22
Olá nilton moreira damascena, então cara esse ai toca ate 50, 100, 150 se vc quiser só tem que editar o arquivo XML
responder - útil - 15/05/2011 às 21:47
Primeiramente parebéns pelo site, é excelente e mostra uma preocupação incomum com a pessoa que está acessando, não é apenas um site funcional, é um site inteligente. A parte de cadastro do usuário é absolutamente demais, muito bem desenvolvido.
Estou usando o Flash CS3.
Escrevi o código acima no primeiro frame do layer AS, salvei...cliquei em publish....ok...gerou o swf.....executei o swf....nada apareceu mesmo eu tendo congirado corretamente o XML e colocando músicas e imagens nas pastas corretas.
Entrei novamente no FLA para edição e testei o CTRL+ENTER para rodar diretamente por ali. Aparece então na janela de erro o seguinte:
"TypeError: Error #1010: A term is undefined and has no properties.
at mp3player_fla::MainTimeline/mp3player_fla::frame1()"
alguma idéia do que pode ser ?
responder - útil - 27/05/2011 às 12:15
Olá, muito bom o tuturial.
o problema é q o meu player nao esta exibindo as imagens . ele funciona normal soh as imagens q nao aparecem. c puder enviar um arquivo swf com tds os caminhos q ta aki no tuturial pra eu rodar e ve se da eu agradeço
responder - útil - 03/06/2011 às 15:25
ola eu reportei erros..
1120: Access of undefined property gr2
gr2.filters = filB;
ja redigitei tudo do zero enada....
sera que tem como me enviar por e-mail
obrigado
responder - útil - 02/07/2011 às 17:49
cara eu preciso de um player com esse spectrum analyser mas para uma web radio (streaming), como eu faço ?, e aproveitando tambem quero te perguntar como se faz um player que reproduz streaming em aacplus.
responder - útil - 08/07/2011 às 22:27
E aew thiago blz.... kra excelente player, gostei muito... soh um detalhe, eu vi q mais pessoas tmb tiveram esse problema de quando querem voltar uma musica ele volta pro começo, tipo ta tocando charie brown, de vez voltar pro nirvana e volta pro foo figther. tem alguma idéia do q seja isso?obg
responder - útil - 27/07/2011 às 23:24
Thiago, usando sua action dá erro no meu...o que pode ser errado? dá o seguinte aviso:
TypeError: Error #1009: Não é possível acessar uma propriedade ou um método de uma referência de objeto nula.
at mp3player_fla::MainTimeline/CarregaXML()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
responder - útil - 22/10/2011 às 15:13
verifique se o arquivo musicas.xml esta junto do arquivo .FLA ou seja na mesma pasta
responder - útil - 23/10/2011 às 16:04
Eu estava lendo o código antes de começar a fazer o player pra tentar entender um pouco, então encontrei um erro na função Seek:
SeekBar.SeekBarPro.width = SeekBar.SeekDrag.x 14;
...SeekDrag.x ?? 14;
No código não há nada especificando o que fazer depois do "x", apenas um espaço separando o 14.
responder - útil - 24/10/2011 às 18:52
valeu por ver isso cara é o caso do sinal de Mais
responder - útil - 24/10/2011 às 20:35
Entendi, tranquilo. ;)
responder - útil - 25/10/2011 às 14:29
Thiago Bueno, vc é show d+
Realmente curto muito flash, dreamweaver, firework, as, js, css, etc.
Achei o seu mp3player muito bonito, uma interface atraente, enfim, bem eleaborado. Parabéns!
Baixei, e não tive nenhuma dúvida, só alegria. Já procurei muito na internet esse projeto, mas até agora como o seu não. Valeu mesmo. Continue a nos ajudar, não só para baixar mais tambem para aprimorar nosso aprendizado.
Até a p´roxima amigo.
responder - útil - 08/11/2011 às 17:10
Obrigado volte sempre, faça um cadastro no site e vc podera criar tutoriais tbm
responder - útil - 08/11/2011 às 17:12
Ai ficou muito show, pow se desse pra vc colocar uma lista mostrando todas as musícas contidas no player iria muito legal tmb.
responder - útil - 11/11/2011 às 18:39
Olá Douglas ficaria legal mesmo seguindo outro tutorial que tem aqui no site para duplicar mc de uma lista XML daria para adaptar
responder - útil - 11/11/2011 às 21:53
Velho, muito bom o tutorial e o player , só ainda não descobri como colocar a lista no aleatório, tem como ?
responder - útil - 18/12/2011 às 14:21
Olá thiago tudo bem ?
Gostaria de saber se existe outro player igual este seu pq eu ja baixei um igual mas não consigo mas sncontra-lo....
se puder me ajudar..
responder - útil - 01/02/2012 às 02:28
Thiago, muito bom o seu trabalho, sempre uso alguns Scripts que vc desenvolve pois são muito bons. Será q tem como vc ensinar como faz essa barra de Download aí no Topo da postagem, onde tem o botão preto Download, se tiver como fico muito grato! Obrigado desde já e abraços!
responder - útil - 10/02/2012 às 15:35