Consigo gravar o arquivo ini, mas não consigo ler.
Galera blz?
Bom é o seguinte, estou desenvolvendo um player de áudio e vídeo e gostaria de gravar o conteúdo do listbox num arquivo ini.
Fiz esse código aqui:
Conseguindo gravar o conteúdo do listbox, veja ([b:690ab082e6][Frm_ListaFilmes]
Top=95
Left=407
Caption=Lista de Filmes/Musicas
[Frm_Princ]
Top=95
Left=0
[VIDEOS]
0=Aonde quer que eu vá.mp3
1=Marcelo D2 - Qual é.mp3
2=Ls Jack - Amanhã Não Se Sabe.mp3
3=Paralamas do Sucesso - Me Liga.mp3
4=Não olhe pra trás.mp3[/b:690ab082e6])
Mais não consigo ler.
Eu consegui fazer só essa parte do código
O meu listbox fica em outro formulário, e estou colocando esse código no formulario principal.
Se alguém puder me ajudar ficarei grato.
Bom é o seguinte, estou desenvolvendo um player de áudio e vídeo e gostaria de gravar o conteúdo do listbox num arquivo ini.
Fiz esse código aqui:
procedure TFrm_Princ.FormClose(Sender: TObject; var Action: TCloseAction); var Ini: TIniFile; X: Integer; begin Application.Terminate; Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, ´.ini´ ) ); try Ini.WriteInteger( ´Frm_Princ´, ´Top´, Top); Ini.WriteInteger( ´Frm_Princ´, ´Left´, Left); Ini.EraseSection(´VIDEOS´); for X := 0 to Frm_ListaFilmes.ListaFilmes.Items.Count -1 do Ini.WriteString(´VIDEOS´,´´ +IntToStr(X), Frm_ListaFilmes.ListaFilmes.Items[X]); finally Ini.Free; end; end;
Conseguindo gravar o conteúdo do listbox, veja ([b:690ab082e6][Frm_ListaFilmes]
Top=95
Left=407
Caption=Lista de Filmes/Musicas
[Frm_Princ]
Top=95
Left=0
[VIDEOS]
0=Aonde quer que eu vá.mp3
1=Marcelo D2 - Qual é.mp3
2=Ls Jack - Amanhã Não Se Sabe.mp3
3=Paralamas do Sucesso - Me Liga.mp3
4=Não olhe pra trás.mp3[/b:690ab082e6])
Mais não consigo ler.
Eu consegui fazer só essa parte do código
procedure TFrm_Princ.FormShow(Sender: TObject); var Ini: TIniFile; X: Integer; begin Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, ´.ini´ ) ); try Top := Ini.ReadInteger( ´Frm_Princ´, ´Top´, 100 ); Left := Ini.ReadInteger( ´Frm_Princ´, ´Left´, 100 ); finally Ini.Free; end; end; end;
O meu listbox fica em outro formulário, e estou colocando esse código no formulario principal.
Se alguém puder me ajudar ficarei grato.
Vitoreduardo
Curtidas 0
Respostas
Paullsoftware
20/03/2006
para saber se está granvando e lendo os valores corretamente de um arquivo ini, basta fazer uma nova aplicação e fazer um teste:
Cria o arquivo INI
para ler o mesmo arquivo ini:
eu acho que o seu único problema no código é que quando vc usa [b:0ff53702c4]LEFT[/b:0ff53702c4] e [b:0ff53702c4]TOP[/b:0ff53702c4] são do form ativo... :!:
Essa variável não está sendo usada pra nada em sua aplicação :!:
espero ter ajudado :wink:
Cria o arquivo INI
NomeArquivo := ExtractFilePath(ParamStr(0))+ChangeFileExt(ExtractFileName(ParamStr(0)),´.ini´); Try Ini := TIniFile.Create(NomeArquivo); With Ini do begin WriteBool(´Segurança´,´Desligar´,ckShutdown.Checked);//checkbox1 WriteBool(´Segurança´,´Cadastro´,ckCadastro.Checked);//checkbox2 WriteBool(´Segurança´,´Icones´,CkIcones.Checked);//checkbox3 WriteBool(´Opções´,´Iniciar´,ckIniciar.Checked);//checkbox4 WriteBool(´Opções´,´Gerenciador´,CkGerenciador.Checked);//checkbox5 WriteBool(´Opções´,´Barra de Tarefas´,chBarTarefas.Checked);//checkbox6 WriteFloat(´Opções´,´Hora´,EditValorDaHora.Value); end; Finally Ini.Free; end;
para ler o mesmo arquivo ini:
{
crie essas variaveis globais..
var
Form1 : TForm1;
vShutdown,
vCadastro,
vIcones,
vIniciar,
vGerenciador,
vBar:boolean;
vValorDaHora:Double;
}
procedure LerINIconfig;
var Ini:TIniFile;
NomeArquivo:String;
begin
NomeArquivo := ExtractFilePath(ParamStr(0))+ChangeFileExt(ExtractFileName(ParamStr(0)),´.ini´);
Try
Ini := TIniFile.Create(NomeArquivo);
With Ini do begin
vShutdown := ReadBool(´Security´,´Desligar´,vShutdown);
vCadastro := ReadBool(´Security´,´Cadastro´,vCadastro);
vIcones := ReadBool(´Security´,´Icones´,vIcones);
vIniciar := ReadBool(´Opções´,´Iniciar´,vIniciar);
vGerenciador := ReadBool(´Opções´,´Gerenciador´,vGerenciador);
vValorDaHora := ReadFloat(´Opções´,´Hora´,vValorDaHora);
vBar := ReadBool(´Opções´,´Barra de Tarefas´,vBar);
end;
Finally
Ini.Free;
end;// try
end;eu acho que o seu único problema no código é que quando vc usa [b:0ff53702c4]LEFT[/b:0ff53702c4] e [b:0ff53702c4]TOP[/b:0ff53702c4] são do form ativo... :!:
var X: Integer;
espero ter ajudado :wink:
GOSTEI 0
Massuda
20/03/2006
Para ler a seção VIDEOS, faça algo assim......todas as strings da seção VIDEOS vão estar em Lista. Para obter o valor do item 0 faça Lista.Values[´0´] (neste caso, ´0´ é a string 0).
var Lista: TStringList; ... Lista := TStringList.Create; Ini.ReadSection(´VIDEOS´, Lista); // faz alguma coisa com Lista ... Lista.Free;
GOSTEI 0
Vitoreduardo
20/03/2006
Só to apanhado.
O massuda, blz.
To tentando assim:
Não da erro, mais tb não lê.
A posição do Frm_Princ na tela quando fecho eu consigo ler normal, o problema é com a lista de vídeo mesmo.
Não sei se tem alguma coisa a ver, mais o meu listbox só mostra o nome do vídeo ou da musica Ex: Não olhe pra trás.mp3.
Ele não mostra a lista numerada tipo: 1:Não olhe pra trás.mp3.
O massuda, blz.
To tentando assim:
procedure TFrm_Princ.FormShow(Sender: TObject); var Ini: TIniFile; Lista: TStringList; begin Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, ´.ini´ ) ); try Top := Ini.ReadInteger( ´Frm_Princ´, ´Top´, 100 ); Left := Ini.ReadInteger( ´Frm_Princ´, ´Left´, 100 ); Lista := TStringList.Create; Ini.ReadSection(´VIDEOS´, Lista); Ini.ReadString(´Videos´,´Video´, Lista.Values[´0´]); finally Ini.Free; Lista.Free; end; end; end;
Não da erro, mais tb não lê.
A posição do Frm_Princ na tela quando fecho eu consigo ler normal, o problema é com a lista de vídeo mesmo.
Não sei se tem alguma coisa a ver, mais o meu listbox só mostra o nome do vídeo ou da musica Ex: Não olhe pra trás.mp3.
Ele não mostra a lista numerada tipo: 1:Não olhe pra trás.mp3.
GOSTEI 0
Massuda
20/03/2006
...
Lista := TStringList.Create;
Ini.ReadSection(´VIDEOS´, Lista);
...
finally
...
Lista.Free;
end;
....
Desse jeito, tudo que foi lido em Lista é jogado fora em seguida! O Ini.ReadSection carrega em Lista [b:9921bc5b11]todas[/b:9921bc5b11] as linhas contidas na seção VIDEOS....
Ini.ReadString(´Videos´,´Video´, Lista.Values[´0´]);
....
Não entendi o que você quer fazer com isso.Para carregar sua lista num ListBox, use no código ListBox.Items ao invés de Lista (ou seja, não precisa da variavel Lista).
GOSTEI 0
Vitoreduardo
20/03/2006
Ai Massuda, troquei o Lista pelo meu listbox, mais não deu não
Agora ta dando o erro na hora de compila
(Access violation at address 0046FED6 in Module).
Frm_ListaFilmes é o nome do Form que tem o listbox com o nome de ListaFilmes.
Ini.ReadString(´VIDEOS´,´´, Frm_ListaFilmes.ListaFilmes.Items.Values[´0´]);
Agora ta dando o erro na hora de compila
(Access violation at address 0046FED6 in Module).
Frm_ListaFilmes é o nome do Form que tem o listbox com o nome de ListaFilmes.
GOSTEI 0
Massuda
20/03/2006
procedure TFrm_Princ.FormShow(Sender: TObject); var Ini: TIniFile; Lista: TStringList; I: Integer; begin Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, ´.ini´)); try Top := Ini.ReadInteger(´Frm_Princ´, ´Top´, 100); Left := Ini.ReadInteger(´Frm_Princ´, ´Left´, 100); Lista := TStringList.Create; try Ini.ReadSection(´VIDEOS´, Lista); Frm_ListaFilmes.ListaFilmes.Items.Clear; for I := 0 to Lista.Count - 1 do begin Frm_ListaFilmes.ListaFilmes.Items.Add( Lista.Values[IntToStr(I)] ); end; finally Lista.Free; end; finally Ini.Free; end; end;
GOSTEI 0
Emerson Nascimento
20/03/2006
tente assim:[b:8e7b88065b]note que para esse procedimento funcionar será necessário ter o Frm_ListaFilmes criado, senão você receberá a mensagem de Access Violation em tempo de execução.[/b:8e7b88065b]
procedure TFrm_Princ.FormShow(Sender: TObject); var Ini: TIniFile; begin Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, ´.ini´ ) ); try Top := Ini.ReadInteger( ´Frm_Princ´, ´Top´, 100 ); Left := Ini.ReadInteger( ´Frm_Princ´, ´Left´, 100 ); Ini.ReadSection(´VIDEOS´, Frm_ListaFilmes.ListaFilmes.Items); finally Ini.Free; end; end;
GOSTEI 0
Vitoreduardo
20/03/2006
O emerson.en blz?
O código que o Massuda passo funcionou + ou -.
Eu coloquei o código no OnShow do Frm_ListaFilmes e alterei essa parte do código Para
Agora to conseguindo ler, só não ta executando o vídeo ou a musica quando eu dou um duplo click nela.
Será que eu tenho que salvar o caminho também.
O código que o Massuda passo funcionou + ou -.
Eu coloquei o código no OnShow do Frm_ListaFilmes e alterei essa parte do código
Ini.ReadSection(´VIDEOS/MUSICAS´, Lista)
Ini.ReadSectionValues(´VIDEOS/MUSICAS´, Lista);
Agora to conseguindo ler, só não ta executando o vídeo ou a musica quando eu dou um duplo click nela.
Será que eu tenho que salvar o caminho também.
GOSTEI 0
Massuda
20/03/2006
Será que eu tenho que salvar o caminho também.
Se os arquivos podem estar em qualquer pasta do micro, é melhor salvar o caminho também.GOSTEI 0