Como retirar a Extensão e o Diretório

Delphi

22/06/2011

Olá amigos,
Estou seguindo um exemplo de Player em:https://www.devmedia.com.br/post-6324-Desenvolvendo-um-Media-Player.html
Onde tem a parte para não mostrar a Extensão e nem o diretório. Não estou usando o TStringGrid do tutorial estou usando um ListBox.

 Adicione estas funções, nesta ordem:


function Arquivo(Entrada:String):STring;


var


  I, P: Integer;


Begin


  for I := length(Entrada) downto 0 do


    if Entrada[i] = . then begin


      P:= I;


      Break;


    end;


  Result:= copy(Entrada, 1, I-1);


end;
 



Estava dando erro nesta linha:
if Entrada[i] = . then

Então coloquei o ponto entre aspas simples. Rodou mas não ta tirando a extensão.

 e 



 e 

Gostaria que ficasse como na imagem abaixo:

Jore

Jore

Curtidas 0

Respostas

Adilson Rumao

Adilson Rumao

22/06/2011

Se Entrada[i] = . ????   é isso mesmo?  
GOSTEI 0
Adilson Rumao

Adilson Rumao

22/06/2011

Se Entrada[i] = . ????   é isso mesmo?  
Para retirarmos a extensão de um arquivo, por exemplo: Arquivo.BMP
Dai vai ficar só Arquivo, use assim:

var
len: integer
nome, extensao, aux: string
begin
nome := ExtractFileName(endereco e nome do arquivo);
extensao := ExtractFileExt(endereco e nome do arquivo);
aux := Copy(1, Length(nome) - Length(Extensao), Nome);
end;
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

22/06/2011

  arqnmext := ExtractFileName(arquivo);
  arqext := ExtractFileExt(arquivo);
  arqnm := LeftStr(arqnmext, Length(arqnmext)-Length(arqext));

  showmessage('nome completo: "'+arqnmext+'"'#13'nome: "'+arqnm+'"'#13'extensão: "'+arqext+'"');



acrescente StrUtils para poder usar a função LeftStr().


GOSTEI 0
Jore

Jore

22/06/2011

Rumaoem onde eu coloco este código? No ListBox não deu...

Emerson o seu também eu não soube onde colocar.

Desculpe o trabalho e Obrigado amigos...Mas preciso da ajuda de vocês.
GOSTEI 0
Jore

Jore

22/06/2011

oLá amigos estou quase conseguindo o código. O código abaixo retira o diretório agora só preciso da ajuda de vocês para ele retirar a extensão da música também.

Obrigado!



Ponha no botão adicionar músicas:

 

var i: integer;

begin

        { esse código
pega todas as musicas selecionadas o opendialog }

        if opendialog1.Execute then

        begin

                for i:=0 to
opendialog1.Files.Count-1 do

               
begin

                       
//ListBox1.Items.Add(opendialog1.Files[i]); //adiciona na lista que o usuário
ira ver

                       
ListBox1.Items.Add(ExtractFileName(opendialog1.Files[i])); //esse add na
lista que fica com o caminho dos arquivos

                       
ListBox1.ItemIndex :=
0;

 

                end;

        end;

end;



GOSTEI 0
Jore

Jore

22/06/2011

Alguém?
GOSTEI 0
Jore

Jore

22/06/2011

Por favor alguém pode me ajudar?!
GOSTEI 0
Junior Viesa

Junior Viesa

22/06/2011

Colegsa, você pode usar uma junção de dois comandos..
Como só falta a extensão do arquivo, vc pode utilizar o Pos para verificar a posição onde inicia a extensão, por exemplo :
Copy(string com o nome do arquivo, 1, Length(string com o nome do arquivo) - Pos('.'+ExtractExtFile, string com o nome do aqruivo));
GOSTEI 0
Jore

Jore

22/06/2011

Olá Junior Viesa,
Obrigado por responder!!
Tentei de dois jeitos e nada. Veja:

 

var i: integer;

begin

        { esse código
pega todas as musicas selecionadas o opendialog }

        if opendialog1.Execute then

        begin

                for i:=0 to
opendialog1.Files.Count-1 do

               
begin

                   listbox1:=Copy(ExtractFileName(MediaPlayer1.FileName),0,Length(ExtractFileName(MediaPlayer1.FileName))-4);
                       
ListBox1.ItemIndex :=
0;

 

                end;

        end;

end;




depois tentei assim:


var i: integer;

begin

        { esse código
pega todas as musicas selecionadas o opendialog }

        if opendialog1.Execute then

        begin

                for i:=0 to
opendialog1.Files.Count-1 do

               
begin

      listbox1:= Copy(string MediaPlayer1, 1, Length(string com o nome do arquivo) - Pos('.'+ExtractExtFile, string MediaPlayer1));
                       
ListBox1.ItemIndex :=
0;

 

                end;

        end;

end;




Pode dar uma olhada para mim?!

Obrigado!
GOSTEI 0
Wilson Junior

Wilson Junior

22/06/2011

Me explique melhor o que você quer para mim poder lhe ajudar.

- Onde é armazenado o caminho dos arquivos?
- Como quer que apareça no listbox?

Coloque o código fonte e alguns exemplos de como quer que apareça.

Aguardo retorno.
GOSTEI 0
Jore

Jore

22/06/2011

Me explique melhor o que você quer para mim poder lhe ajudar.

- Onde é armazenado o caminho dos arquivos?
- Como quer que apareça no listbox?

Coloque o código fonte e alguns exemplos de como quer que apareça.

Aguardo retorno.


Olá Wilson,

- Onde é armazenado o caminho dos arquivos?

No botão Adicionar músicas

- Como quer que apareça no listbox?
Quero que retire o caminho do diretório e a extensão.

Se houver o número da música pode ficar;
Se houver o nome do artista ou grupo também pode ficar.

Igual ao exemplo abaixo.

16. Pra Toda a Vida - Part. Esp. Juliana Paes

GOSTEI 0
Wilson Junior

Wilson Junior

22/06/2011

Teste assim:
var
  x: integer;
  NomeArquivo: string;
begin
  if  opendialog1.Execute then
    begin
      ListBox1.Clear; { Para limpar a lista }
      for x := 0 to opendialog1.Files.Count - 1 do
      begin
        NomeArquivo := ExtractFileName( opendialog1.Files[x] )
        NomeArquivo := Copy( NomeArquivo, 1, Length(NomeArquivo) - Length(ExtractFileExt(NomeArquivo)) );

        ListBox1.Items.Add( NomeArquivo );
      end;
    end
  ;
end;


Espero ter colaborado.
GOSTEI 0
Wilson Junior

Wilson Junior

22/06/2011

Ah, não cheguei a testar...qualquer coisa pergunte.
GOSTEI 0
Jore

Jore

22/06/2011

Olá Wilson,
Tenho boas noticias evoluimos graças a você.
A boa notícia é que já retirou o caminho do diretório e a extensão.
As más noticas são:

Vamos ao seu código:

var
  x: integer;
  NomeArquivo: string;
begin
  if  opendialog1.Execute then
    begin
      ListBox1.Clear; { Para limpar a lista }
      for x := 0 to opendialog1.Files.Count - 1 do
      Begin
        NomeArquivo := ExtractFileName( opendialog1.Files[x] ) <-- Aui faltou ; Já OK
        NomeArquivo := Copy( NomeArquivo, 1, Length(NomeArquivo) - Length(ExtractFileExt(NomeArquivo)) );

        ListBox1.Items.Add( NomeArquivo );
        ListBox1.ItemIndex := 0; <-- Coloquei essa parte pois não selecionava a música automaticamente.
      end;
    end
  ; <-- Essa parte serve para que?
end;

1 - Não sei porque mais se eu adicionar uma unica música e se depois clicar novamente em adicionar para por outra música esta substitui a musica que já esta na lista. Entendeu? não tá adicionando esta substituindo.

2 - Com o seu comando da erro ao dar Play. Eu uso o seguinte comando no botão Play:




begin

// caso algum item do listbox estiver selecionado

  if
(Listbox1.ItemIndex > -1) then

    begin

      // abrir o
arquivo caso o nome selecionado seja diferente

      if not
(ListBox1.Items[Listbox1.ItemIndex] = MediaPlayer1.FileName) then

      begin

        MediaPlayer1.FileName :=
ListBox1.Items[Listbox1.ItemIndex];

        MediaPlayer1.Open;

      end;

    end

  else

    begin

      ShowMessage('Selecione um arquivo
de som');

      // se não
estiver tocando um som então sair

      if not (MediaPlayer1.Mode =
mpPlaying) then

      begin

        Exit;

      end;

    end;

        
end;





Mais uma vez obrigado!



GOSTEI 0
Jore

Jore

22/06/2011

Não sei se ajuda mais segue abaixo o meu player:




No Botão Stop tem este código:


begin
if ListBox1.Items.Count <> 0 then begin
if MediaPlayer1.Position = MediaPlayer1.Length then begin
if ListBox1.ItemIndex = ListBox1.Items.Count -1 then
ListBox1.ItemIndex := 0
else ListBox1.ItemIndex := ListBox1.ItemIndex +1;
MediaPlayer1.FileName := ListBox1.Items[ListBox1.ItemIndex];
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
    end;
end;



No timer deixei a opção Enabled como False para passar a música sozinho. Um ListBoxUm MediaPlayerNão sei se ajuda...Obrigado!
GOSTEI 0
Wilson Junior

Wilson Junior

22/06/2011


1 - Não sei porque mais se eu adicionar uma unica música e se depois clicar novamente em adicionar para por outra música esta substitui a musica que já esta na lista. Entendeu? não tá adicionando esta substituindo.

Retire a linha
ListBox1.Clear; { Para limpar a lista }



O utilizo como minha padronização de código.
A atribuição do ItemIndex pode ser fora do FOR, pois não tem lógica fazer a cada passagem do LOOP
var
  x: integer;
  NomeArquivo: string;
begin
  if  opendialog1.Execute then
    begin
      for x := 0 to opendialog1.Files.Count - 1 do
      Begin

        NomeArquivo := ExtractFileName( opendialog1.Files[x] ) <-- Aui faltou ; Já OK
        NomeArquivo := Copy( NomeArquivo, 1, Length(NomeArquivo) - Length(ExtractFileExt(NomeArquivo)) );

        ListBox1.Items.Add( NomeArquivo );
      end;
      ListBox1.ItemIndex := 0;
    end
  ;
end;



Bom, assim como comentei contigo em um tópico anterior, onde era salvo o caminho dos arquivos, e você não me respondeu, estou lhe informando agora o que está acontecendo.
1° passo: Você seleciona os arquivos. ex.: C:\Musica_1.mp3, C:\Musica_2.mp3 e C:\Musica_3.mp3;
2° passo: Você quer que mostre somente o nome do arquivo no ListBox. Ex.: Musica_1, Musica_2, Musica_3;
3° passo: Você quer executar o arquivo e ocorre o erro. Este erro ocorre porque você pede para abrir o seguinte arquivo Musica_1 e não C:\Musica_1.mp3, logo você terá que ter armazenado o caminho dos arquivos.

Sugestão: você pode utilizar um TStringList para armazenar o caminho dos arquivos.
Como fazer:
No private do Form declare
stlCaminho: TStringList;


No Create do Form coloque
stlCaminho := TStringList.Create;


No procedimento de carregar os arquivos faça asim:
var
  x: integer;
  NomeArquivo: string;
begin
  if  opendialog1.Execute then
    begin
      for x := 0 to opendialog1.Files.Count - 1 do
      Begin

        NomeArquivo := ExtractFileName( opendialog1.Files[x] );
        NomeArquivo := Copy( NomeArquivo, 1, Length(NomeArquivo) - Length(ExtractFileExt(NomeArquivo)) );

        ListBox1.Items.Add( NomeArquivo );
        stlCaminho.Add( opendialog1.Files[x] );
      end;
      ListBox1.ItemIndex := 0;
    end
  ;
end;



E no seu evento Play substitua a linha:
MediaPlayer1.FileName := stlCaminho[Listbox1.ItemIndex];


OBS.: Sempre que quiser saber o caminho do arquivo selecionado, acesse o stlCaminho.

Espero ter colaborado.
GOSTEI 0
Jore

Jore

22/06/2011

Amigo Wilson,
Primeiro Muito Obrigado!

1º - Desculpe o transtorno!
2º - Desculpe pois agora vi que não entendi sua pergunta sobre o caminho dos arquivos.

Bom esta quase agora.
Só ta com um pequeno probleminha.

Após fazer todas as modificações que você recomendou o Player já não mostra o erro.

Só que ao Clicar em Play a música não esta rodando. O que esta acontecendo é que o MediaPlayer esta sendo ativado.

E agora vi que a culpe é minha pois coloquei para você que o Botão Stop tinha o comando:

begin
if ListBox1.Items.Count <> 0 then begin
if MediaPlayer1.Position = MediaPlayer1.Length then begin
if ListBox1.ItemIndex = ListBox1.Items.Count -1 then
ListBox1.ItemIndex := 0
else ListBox1.ItemIndex := ListBox1.ItemIndex +1;
MediaPlayer1.FileName := ListBox1.Items[ListBox1.ItemIndex];
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
    end;
end;



Na verdade este comando esta no botão Timer

O Stop esta assim:

MediaPlayer1.FileName := stlCaminho[Listbox1.ItemIndex];
MediaPlayer1.Open;
MediaPlayer1.Stop;
Timer1.Enabled := False;


Talvez seja por culpa desse meu erro.

Obrigado!
GOSTEI 0
Wilson Junior

Wilson Junior

22/06/2011

Na linha de comando que selecionei deve ser utilizado o stlCaminho, até coloquei uma observação no post anterior.


begin
if ListBox1.Items.Count <> 0 then begin
if MediaPlayer1.Position = MediaPlayer1.Length then begin
if ListBox1.ItemIndex = ListBox1.Items.Count -1 then
ListBox1.ItemIndex := 0
else ListBox1.ItemIndex := ListBox1.ItemIndex +1;
MediaPlayer1.FileName := ListBox1.Items[ListBox1.ItemIndex];
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
    end;
end;



Espero ter colaborado, e precisando, estamos aí sempre para colaborarmos.
GOSTEI 0
Jore

Jore

22/06/2011

Na linha de comando que selecionei deve ser utilizado o stlCaminho, até coloquei uma observação no post anterior.


begin
if ListBox1.Items.Count <> 0 then begin
if MediaPlayer1.Position = MediaPlayer1.Length then begin
if ListBox1.ItemIndex = ListBox1.Items.Count -1 then
ListBox1.ItemIndex := 0
else ListBox1.ItemIndex := ListBox1.ItemIndex +1;
MediaPlayer1.FileName := ListBox1.Items[ListBox1.ItemIndex];
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
    end;
end;



Espero ter colaborado, e precisando, estamos aí sempre para colaborarmos.



Olá Wilson,
Mesmo trocando a linha como você recomenda o problema continua.

Ao Clicar em Play a música não esta rodando. O que esta acontecendo é que o MediaPlayer esta sendo ativado.
GOSTEI 0
Wilson Junior

Wilson Junior

22/06/2011

Seu código está assim?
begin
  if  ListBox1.Items.Count <> 0 then
    begin
      if  MediaPlayer1.Position = MediaPlayer1.Length then 
        begin
          if  ListBox1.ItemIndex = ListBox1.Items.Count -1 then
              ListBox1.ItemIndex := 0
          else
              ListBox1.ItemIndex := ListBox1.ItemIndex +1;

          MediaPlayer1.FileName := stlCaminho[ListBox1.ItemIndex];
          MediaPlayer1.Stop;
          MediaPlayer1.Open;
          MediaPlayer1.Play;
        end;
    end;
end;


Espero ter colaborado.
GOSTEI 0
Jackson Veiga

Jackson Veiga

22/06/2011

http://www.4shared.com/file/KAV0QbJq/KVMediaplayer.html

Eu upei um Player que eu fiz a algum tempo no 4shared, o link é esse aí de cima.
é um player com playlist passa musica automaticamente, pode escolher para repetir, volume (do sistema), busca por arquivos de audio em uma pasta e etc..

Pode baixar que tem bastante coisa interessante nele.
GOSTEI 0
Jore

Jore

22/06/2011

Seu código está assim?
begin
  if  ListBox1.Items.Count <> 0 then
    begin
      if  MediaPlayer1.Position = MediaPlayer1.Length then 
        begin
          if  ListBox1.ItemIndex = ListBox1.Items.Count -1 then
              ListBox1.ItemIndex := 0
          else
              ListBox1.ItemIndex := ListBox1.ItemIndex +1;

          MediaPlayer1.FileName := stlCaminho[ListBox1.ItemIndex];
          MediaPlayer1.Stop;
          MediaPlayer1.Open;
          MediaPlayer1.Play;
        end;
    end;
end;


Espero ter colaborado.


Olá Wilson,
Obrigado por estar me ajudando!
Já estou com vergonha de te pedir ajuda, mais esta na mesma.
Se você ou alguém puder ver onde estou errando segue o Player no link abaixo.

http://www.megaupload.com/?d=78QGF9P8
GOSTEI 0
Jore

Jore

22/06/2011

http://www.4shared.com/file/KAV0QbJq/KVMediaplayer.html

Eu upei um Player que eu fiz a algum tempo no 4shared, o link é esse aí de cima.
é um player com playlist passa musica automaticamente, pode escolher para repetir, volume (do sistema), busca por arquivos de audio em uma pasta e etc..

Pode baixar que tem bastante coisa interessante nele.


Cara muito bom o seu player... vou estudá-lo e fico muito agradecido.
GOSTEI 0
Jackson Veiga

Jackson Veiga

22/06/2011

Esqueci de dizer antes, o player que postei utiliza o VCLSkin (componente de skin).
Caso de erro ao compilar, apenas remova o componente!

Jore, Se você quizer, posso lhe enviar um outro player, bem melhor, onde utilizo a biblioteca BASS.dll.
Ele possui playList, reconhecimento de comandos por tecla[mesmo fora do aplicativo], volume independente, equalizador e etc...

Caso seja de interrese seu ou de alguem, avisa que daí eu posto ele.

e-mail: jackson_eduardo_da_veiga@hotmail.com
GOSTEI 0
Gustavo Bretas

Gustavo Bretas

22/06/2011


Esqueci de dizer antes, o player que postei utiliza o VCLSkin (componente de skin).
Caso de erro ao compilar, apenas remova o componente!

Jore, Se você quizer, posso lhe enviar um outro player, bem melhor, onde utilizo a biblioteca BASS.dll.
Ele possui playList, reconhecimento de comandos por tecla[mesmo fora do aplicativo], volume independente, equalizador e etc...

Caso seja de interrese seu ou de alguem, avisa que daí eu posto ele.

e-mail: jackson_eduardo_da_veiga@hotmail.com

 
 

Opa, e ae Jackson, posta aí pra nós!
Uma vez eu fiz um com o componente MediaPlayer nativo do Delphi (Paleta System), além dos comandos de player padrão eu havia adicionado a opção minimizar na bandeja, de enviar enviar a música para outras pastas, pen drive que fosse, e apagar a música com um clique só, pq eu tinha pego uma lista muito grande com amigos, e tava tudo misturado, mas aí o Média Player do Windows evoluiu muito, e eu abandonei o projeto... rs!
Na época todo mundo do escritório adotou ele, pq quando minimizava ele ocupava pouquíssima memória, mas isso foi numa época que se preocupava muito com uso de pouco recurso do PC, hoje essa preocupação é menor!
GOSTEI 0
Jore

Jore

22/06/2011

Esqueci de dizer antes, o player que postei utiliza o VCLSkin (componente de skin).
Caso de erro ao compilar, apenas remova o componente!

Jore, Se você quizer, posso lhe enviar um outro player, bem melhor, onde utilizo a biblioteca BASS.dll.
Ele possui playList, reconhecimento de comandos por tecla[mesmo fora do aplicativo], volume independente, equalizador e etc...

Caso seja de interrese seu ou de alguem, avisa que daí eu posto ele.

e-mail: jackson_eduardo_da_veiga@hotmail.com


Aceito sim! E fico muito agradecido por você compartilhar o seu projeto e conhecimento comigo. Obrigado!
GOSTEI 0
Jackson Veiga

Jackson Veiga

22/06/2011

http://www.4shared.com/file/6e4aIMLE/PLAYER_By_Jackson.html

Ta aí, esse é sem duvida um ótimo player para estudo, estou deixando ele aí com vocês para verem.
Esta com todo o codigo fonte incluso, inclusive uma unit de funções que eu fiz, peguei na internet e com amigos,
e fui montando.

Vejam e deixem um comentário qualquer coisa.

No player, eu utilizo a biblioteca Bass.dll.

OBS.: É IMPORTANTE O PLEYER ESTAR NA PASTA= "C:\PLAYER\" PARA
QUE A ASSOCIAÇÃO COM O SISTEMA FUNCIONE!

Para integrar o KSPlayer com o menu de contexto do sistema, basta executar
o arquivo "Associar MP3 com KSPLAYER.reg" Contido neste rar.
Teclas de Atalho:
CTRL + F1   = Diminui o Volume
CTRL + F2   = Aumenta o Volume
CTRL + F3   = Ativa/Desativa a repetição
CTRL + F4   = Ativa o Modo Compacto
CTRL + F5   = Musica Anterior
CTRL + F6   = Play/Pause
CTRL + F7   = Stop
CTRL + F8   = Proxima Musica
CTRL + F9   = Mostra/Esconde PlayList

As teclas de atalho podem ser usadas tanto no programa como fora dele,
na area de trabalho, outros programas, e até mesmo em jogos/Programas de tela
Cheia.

Recursos:
¬Não utiliza o arquivo aberto
¬Biblioteca [Passagem automatica de musica, Verificação de arquivos]
¬Integração com o sistema
¬Aplicativo permite apenas uma janela aberta (caso seja acionado pelo sistema
 ele usa a janela aberta)
¬Equalizador de 6 Bandas
¬Controle de Volume
¬Controle de Balanço
¬PlayList [Passagem automatica de musica]
 |_Arraste arquivos da biblioteca para montar a playlist
¬Compativel com MP3, WAV, OGG, MID
¬Possibilidade de arrastar arquivos do explorer para a biblioteca

Aproveitando a oportunidade, mesmo não tendo nada a ver deixo aqui o link, para divulgar, de duas musicas que eu gravei com a minha banda.
MINHA BANDA= MUSICAL EMBALO DA SERRA
CIDADE= RIO DOS CEDROS, SC
MUSICA= CASO NOVO [San Marino]
http://www.4shared.com/audio/379zOgbH/Caso_Novo_-_Musical_Embalo_da_.html
MUSICA= SÓ UM DE NÓS [Terceira Dimensão]
http://www.4shared.com/audio/1hiFxyY8/So_um_de_ns_-_Musical_Embalo_d.html


Qualquer coisa, Contato E-mail ou MSN:
jackson_eduardo_da_veiga@hotmail.com
GOSTEI 0
Jore

Jore

22/06/2011

Muito bom mesmo! Obrigado por compartilhar e em breve eu posto as dúvidas. Hoje não pois vou ver a namorada rs rs rs

Obrigado!
GOSTEI 0
José

José

22/06/2011

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0
POSTAR