ParamStr
Estou fazendo um Tocador.
Já fiz tudo só a um problema
Quero que quando a pessoa clicar no arquivo exemplo
Musica.avi
E se a pessoa selecionou mais de um arquivo para ouvir exemplo
Musica1.avi
Musica2.avi
Musica3.avi
ele abrir meu programa e rodar as músicas.
Como faço isso??
--------------------------------
Já fiz tudo só a um problema
Quero que quando a pessoa clicar no arquivo exemplo
Musica.avi
E se a pessoa selecionou mais de um arquivo para ouvir exemplo
Musica1.avi
Musica2.avi
Musica3.avi
ele abrir meu programa e rodar as músicas.
Como faço isso??
--------------------------------
Rudá
Curtidas 0
Respostas
Rodc
26/01/2006
Você tem que gravar no registro do windows que a extenção .avi é sua e não do MediaPlayer.
Tem dicas na Net falando como fazer isto, dá uma procurada melhor.
Tem dicas na Net falando como fazer isto, dá uma procurada melhor.
GOSTEI 0
Michael
26/01/2006
Olá!
[url=http://delphi.about.com/cs/adptips2001/a/bltip0801_3.htm]Neste link[/url] vc encontrará uma procedure que registra uma aplicação com uma determinada extensão de arquivo.
Porém, isso apenas não é o suficiente para que seu aplicativo execute os arquivos passados via linha de comando. Como vc mesmo disse no título do post, vc deve usar [b:b137432028]ParamStr [/b:b137432028]para pegar os ´parâmetros´ informados, e tbm [b:b137432028]ParamCount[/b:b137432028], para saber se mais de um arquivo está na linha de comando. Veja um exemplo:
[]´s
[url=http://delphi.about.com/cs/adptips2001/a/bltip0801_3.htm]Neste link[/url] vc encontrará uma procedure que registra uma aplicação com uma determinada extensão de arquivo.
Porém, isso apenas não é o suficiente para que seu aplicativo execute os arquivos passados via linha de comando. Como vc mesmo disse no título do post, vc deve usar [b:b137432028]ParamStr [/b:b137432028]para pegar os ´parâmetros´ informados, e tbm [b:b137432028]ParamCount[/b:b137432028], para saber se mais de um arquivo está na linha de comando. Veja um exemplo:
var I: Integer; Arquivos: TStringList; begin Arquivos := TStringList.Create; try for I := 1 to ParamCount - 1 do if FileExists(ParamStr(I)) then Arquivos.Add(ParamStr(I)); // Faz alguma coisa com Arquivos finally Arquivos.Free; end; end;
[]´s
GOSTEI 0
Rudá
26/01/2006
Fiz a alteração no registro e coloquei e a função para mostrar todos os parâmetros só que não mostrou nenhum parâmentro.
Ai mudei o código para isso para ele mostrar o primeiro parâmentro.
Ai ele mostrou o caminho do programa.
Ai mudei o código para isso para ele mostrar o primeiro parâmentro.
var I: Integer; Arquivos: TStringList; begin Arquivos := TStringList.Create; try for I := 0 to ParamCount - 1 do if FileExists(ParamStr(I)) then Arquivos.Add(ParamStr(I)); // Faz alguma coisa com Arquivos finally Arquivos.Free; end; end;
Ai ele mostrou o caminho do programa.
GOSTEI 0
Michael
26/01/2006
Note que eu usei a função [b:44c4db0a0c]FileExists [/b:44c4db0a0c]para garantir que o(s) arquivo(s) informado(s) exista(m) no disco. Se vc testou informando Musica1.avi, Musica2.avi, etc, obviamente que o [b:44c4db0a0c]StringList [/b:44c4db0a0c]ficará vazio.
[]´s
[]´s
GOSTEI 0
Rudá
26/01/2006
Cara, vc não entendeu minha pergunta desde o começo.
Quando vc clica no arquivo musica.asf em uma pasta qualquer ele abre o windows media player ou qualquer outro programa, e ele abre logo a música, eu to querendo fazer isso, quando a pessoa clicar no arquivo musica.asf ele abre meu programa e toca a musica, mas eu fiz o que vc falou, registrei no registro tudo certo mas ele não mostra nada.
Não era para mostrar o arquivo musica.asf nos paramentros para eu poder tocar ele??
Quando vc clica no arquivo musica.asf em uma pasta qualquer ele abre o windows media player ou qualquer outro programa, e ele abre logo a música, eu to querendo fazer isso, quando a pessoa clicar no arquivo musica.asf ele abre meu programa e toca a musica, mas eu fiz o que vc falou, registrei no registro tudo certo mas ele não mostra nada.
Não era para mostrar o arquivo musica.asf nos paramentros para eu poder tocar ele??
GOSTEI 0
Rodc
26/01/2006
Rudá, entra no Registry do Windows e vai na pasta que ele guarda as informações sobre as extensões. Verifica se as informações da sua extensão são parecidas com de outra extensão.
Uma outra sugestão é, pelo Windows Explorer, ir em ferramentas/Opções e na guia ´tipos de arquivo´ selecionar a sua extensão e mandar ela abrir com o seu arquivo, daí você pode ver como o windows gravou as informações no registry.
Uma outra sugestão é, pelo Windows Explorer, ir em ferramentas/Opções e na guia ´tipos de arquivo´ selecionar a sua extensão e mandar ela abrir com o seu arquivo, daí você pode ver como o windows gravou as informações no registry.
GOSTEI 0
Michael
26/01/2006
Entendi sim sua pergunta desde o início, e lhe forneci informações suficientes para solucioná-la. Perdi meu tempo aqui testando minhas dicas, mesmo sabendo que elas funcionariam. E funcionam de fato.
[]´s
[]´s
GOSTEI 0
Rudá
26/01/2006
Fiz como vc falou e ficou assim no registro
´C:\player.exe´ ´¬1´
No meu sistema fiz assim no create
Apareceu um parâmetro que é o caminho do meu programa [b:32cca4b24f]C:\player.exe[/b:32cca4b24f]
Não apareceu nenhum outro parâmetro.
´C:\player.exe´ ´¬1´
No meu sistema fiz assim no create
ShowMessage(IntToStr(ParamCount)); for i:= 0 to ParamCount - 1 do ShowMessage(ParamStr(i));
Apareceu um parâmetro que é o caminho do meu programa [b:32cca4b24f]C:\player.exe[/b:32cca4b24f]
Não apareceu nenhum outro parâmetro.
GOSTEI 0
Michael
26/01/2006
Vc não prestou atenção no meu código. O loop deve começar em [b:419ee12e72]1[/b:419ee12e72], e não em [b:419ee12e72]0[/b:419ee12e72]. [b:419ee12e72]ParamStr(0) [/b:419ee12e72]retorna o path da aplicação.
Faço uma pequena correção tbm: o loop deve ir de 1 a [b:419ee12e72]ParamCount[/b:419ee12e72], e não a [b:419ee12e72]ParamCount - 1[/b:419ee12e72], como eu erroneamente postei acima.
[]´s
Faço uma pequena correção tbm: o loop deve ir de 1 a [b:419ee12e72]ParamCount[/b:419ee12e72], e não a [b:419ee12e72]ParamCount - 1[/b:419ee12e72], como eu erroneamente postei acima.
[]´s
GOSTEI 0
Rudá
26/01/2006
Blz deu certo.
Agora só mais uma coisa quando eu cliquei em dois arquivos e clique abrir no media player ele listava os dois arquivos, e no meu caso ele abriu duas vezes meu programa, como faço para ele abrir só uma vez??
Agora só mais uma coisa quando eu cliquei em dois arquivos e clique abrir no media player ele listava os dois arquivos, e no meu caso ele abriu duas vezes meu programa, como faço para ele abrir só uma vez??
GOSTEI 0
Rjun
26/01/2006
Para abrir somente uma instância da sua aplicação, faça uma pesquisa no fórum por [b:8bece4e45b]MUTEX[/b:8bece4e45b].
GOSTEI 0
Rodc
26/01/2006
Acho que o problema do Rudá não é abrir bloquear várias instâncias do mesmo programa e sim como fazer para que o windows explorer passe todos os caminhos no ParamStr() de apenas uma aplicação.
Acho que não vai funcionar, mas tenta colocar no registro do windows assim:
´C:\player.exe´ ´¬1´ ´¬2´
e veja se virá dois parâmetros.
Acho que não vai funcionar, mas tenta colocar no registro do windows assim:
´C:\player.exe´ ´¬1´ ´¬2´
e veja se virá dois parâmetros.
GOSTEI 0
Rudá
26/01/2006
Não funcionou não [b:3692aa2929]rodc[/b:3692aa2929]
GOSTEI 0
Michael
26/01/2006
Eu acreditava que usando o parâmetro [b:bb8754beec]¬L[/b:bb8754beec] ao invés de [b:bb8754beec]¬1[/b:bb8754beec] solucionaria o problema, pois é desta forma que arquivos como MP3 estão configurados no Windows para abrirem o Windows Media Player. Porém não funcionou.
Pesquisei rapidamente pela Web mas não achei nenhuma informação sobre máscaras que possam ser usadas nesse caso. Penso que haja uma forma, via [b:bb8754beec]DDE[/b:bb8754beec], de se fazer isso, mas este é um segmento de programação que não possuo muito conhecimento a respeito.
De qualquer forma, há uma solução: como o colega [b:bb8754beec]Rjun [/b:bb8754beec]disse, vc pode usar [b:bb8754beec]mutexes [/b:bb8754beec]para garantir que apenas uma única instância da sua aplicação estará rodando. E, nesse momento, vc passa uma mensagem para a outra instância contendo o caminho do arquivo a ser aberto.
Para controlar múltiplas cópias da sua aplicação, use, como já mencionado, mutexes. E para enviar mensagens entre elas, vc pode usar este componente: [url=http://subsimple.com/delphi.asp]InterAppComm[/url].
[]´s
Pesquisei rapidamente pela Web mas não achei nenhuma informação sobre máscaras que possam ser usadas nesse caso. Penso que haja uma forma, via [b:bb8754beec]DDE[/b:bb8754beec], de se fazer isso, mas este é um segmento de programação que não possuo muito conhecimento a respeito.
De qualquer forma, há uma solução: como o colega [b:bb8754beec]Rjun [/b:bb8754beec]disse, vc pode usar [b:bb8754beec]mutexes [/b:bb8754beec]para garantir que apenas uma única instância da sua aplicação estará rodando. E, nesse momento, vc passa uma mensagem para a outra instância contendo o caminho do arquivo a ser aberto.
Para controlar múltiplas cópias da sua aplicação, use, como já mencionado, mutexes. E para enviar mensagens entre elas, vc pode usar este componente: [url=http://subsimple.com/delphi.asp]InterAppComm[/url].
[]´s
GOSTEI 0