Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduo
Os arquivos INI so arquivos de configurao, que podem ser facilmente vizualizados, modificados ou apagados. Antes de utilizarmos este tipo de arquivo com o Delphi iremos entender o funcionamento dele. Observe o exemplo abaixo: [seo1] variavel=valor nome=arquivoini [seo2] nome=outronome A seo deve estar sempre no comeo da linha e entre colchetes. Os nome de seo so case-sensitive ( ou seja, Seo diferente de seo). As sees podem conter varivaveis com nomes iguais. A variavel, assim como no delphi, pode conter valores do tipo texto (string), inteiros (integer), boleanos (bool), etc... Caso exista duas sees com o mesmo nome, ou duas variaveis com o mesmo nome dentro de uma mesma seo ento a ultima ocorrncia prevalece. Uma das desvantagens do arquivo INI que ele no muito seguro pois a pessoa pode modifica-lo facilmente com um editor de textos ( Exemplo: Bloco de Notas ). ;comentario ;comentario
Delphi
O Delphi tem uma classe chamada TiniFile que contm procedimentos e funes para trabalhar com arquivos INI. A classe TiniFile pode ser utilizada declarando-se a unit inifiles.pas na clausula uses. uses inifiles;
Para utilizar um arquivo ini, primeiro devemos definir uma variavel do tipo Tinifile. ( O codigo abaixo pode ser colocado em uma function ou em um procedure ( como no clique de um boto)).
Trabalhando com arquivos INI no Delphi 3 de 8 arquivo := Tinifile.Create('arquivoini.ini'); //Inicializa a variavel arquivo especificando o arquivo arquivoini.ini como o arquivo INI que vai ser utilizado. No cdigo acima, caso o arquivo arquivoini.ini no exista ele ser criado. Neste caso, o arquivo ser criado/procurado na pasta Windows, mas se voc quiser voc pode definir um diretrio. arquivo := Tinifile.Create('c:\arquivoini.ini'); Ou, para facilitar mais, colocar o arquivo INI no mesmo diretrio do executavel. var dir : string; begin dir := extractfilepath(application.exename); arquivo := Tinifile.Create(dir + 'arquivoini.ini'); end;
Funes de Escrita
As funes para escrever so simples, basta usar a variavel antes definida ( no nosso exemplo, a variavel arquivo) e aps ela colocar um ponto ( . ) e a funo desejada. Exemplo de funes: WriteString: Escreve uma variavel com valor string, exemplo abaixo: Arquivo.writeString('seo','variavel','valor');
WriteInteger: Escreve uma variavel com valor integer, exemplo abaixo: Arquivo.writeInteger('seo','variavel',123456); //Aonde 123456 o valor a ser gravado ( valor numrico) WriteBool: Escreve uma variavel com valor boleano ( true ou false ), exemplo abaixo: Arquivo.writeBool('seo','variavel',true); //Aonde true o valor a ser gravado ( valor boleano) Existem tambm outros formatos de variaveis que podem ser gravadas no arquivo INI ( Float, Time, Date, DateTime ).
Funes de Leitura
Assim como as funes de escrita, as funes de leitura so faceis de usar, e tem a utilidade de pegar um valor escrito em uma variavel do arquivo INI. Antes vamos declarar algumas variaveis que sero utilizadas para receber o valor lido do arquivo INI. var rstr : string; rint : Integer; rbool : bool;
//variavel que //para receber //variavel que //para receber //variavel que //para receber
ser utilizada um valor string ser utilizada um valor integer ser utilizada um valor bool
ReadString: L uma variavel de valor string, caso voc use o ReadString para ler uma variavel que contenha um valor Integer, este valor sera retornado como um texto. Exemplo abaixo: rstr := arquivo.readString('seo','variavel', 'valor padro'); //passa para variavel rstr o valor da variavel //variavel contida na seo seo. //Caso a variavel lida no exista ela retorna o valor //padro ReadInteger: L uma variavel de valor integer. Exemplo abaixo: rint := arquivo.readString('seo','variavel', 54321); //passa para variavel rint o valor da variavel //variavel contida na seo seo. //Caso a variavel lida no exista ela retorna o valor //padro definido acima como 54321 ( voc pode definir o //valor que quiser) ReadBool: L uma variavel de valor bool ( true ou false). Exemplo abaixo: rbool := arquivo.readString('seo','variavel', false); //passa para variavel rint o valor da variavel //variavel contida na seo seo. //Caso a variavel lida no exista ela retorna o valor //padro definido acima como false ( voc pode definir //true ou o valor que quiser)
Outras funes
Tambm existem outras funes que nos ajudam bastante a lidar com um arquivo INI. EraseSection Deleta uma seo inteira ( todas as suas variaveis ) arquivo.eraseSection('exemplo'); //deleta a seo exemplo SectionExists Retorna True caso a seo exista e False caso ela no exista. If arquivo.SectionExists('exemplo') then showmessage('Existe'); //verifica a existencia da seo exemplo Existem tambm outras funes que no foram faladas aqui.
Exemplos
Exemplo 1: Exemplo de contador de visitas( conta quantas vezes voc entro no programa). No formulrio coloque uma Label e nomeie ela como visitas.(fig1)
Trabalhando com arquivos INI no Delphi 6 de 8 A lgica a seguinte, quando a pessoa abrir o programa, o programa consultara no arquivo visitas.ini o nmero de visitas, se a pessoa visitou j 1 vez, ento esta a 2 visita. Coloque o cdigo abaixo no onShow do formulrio. Obs.: No esquea de declarar a unit Inifiles na clausula Uses do formulrio. var arquivo : Tinifile; Nvisitas: integer; begin arquivo := Tinifile.Create('visitas.ini'); Nvisitas := arquivo.ReadInteger('exemplo1','visitas',0); //A variavel Nvisitas recebe o valor integer lido do arquivo ini //da variavel "visitas" contida na seo [exemplo1], sendo que o valor //padro definido ( o valor que passado para a variavel caso no seja //encontrada a variavel "visitas" na seo "exemplo1") 0 //Como o arquivo guarda o nmero de vezes que a pessoa ja visitou o programa //O numero dessa visita seria, o numero de visitas +1; //abaixo o codigo! Nvisitas := Nvisitas +1; visitas.Caption := 'Esta a '+inttostr(nvisitas)+' vez que voc usa o programa'; //agora vamos salvar a informao o n de visitas at agora arquivo.WriteInteger('exemplo1','visitas',Nvisitas); //guarda o numero contido na variavel NVisitas arquivo.Free; //Libera a variavel arquivo da memria! Compile o programa e veja o resultado:
Trabalhando com arquivos INI no Delphi 7 de 8 Feche o programa e abra ele denovo ( mesmo que voc recompile ele, observe o contador de visitas continuara funcionando ). Agora vamos fazer um botao para limpar o nmero de visitas. Adicione um boto e mude o caption dele para Limpar o n de visitas.( Na figura abaixo eu mudei um pouco o layout para deixa-lo so com o espao nescessrio para o boto e o label)
No evento OnClick deste boto, coloque o cdigo abaixo: var arquivo : Tinifile; begin arquivo := Tinifile.Create('visitas.ini'); //inicializa a variavel arquivo com o arquivo visitas.ini arquivo.WriteInteger('exemplo1','visitas',0); //escreve 0 na variavel visitas dentro da seo exemplo1, //limpando assim o n de visitas arquivo.Free; //libera a variavel arquivo da memria end;
Rode o programa e clique no boto. Agora feche e abra denovo! Pronto, agora apareceu que esta a primeira vez que voc entra. O arquivo visitas.ini foi criado no diretrio Windows ( pois no definimos nenhum diretrio ) Fim do Exemplo. O cdigo de fonte deste exemplo pode ser encontrado no link abaixo: http://www.bestsharing.com/files/ms00171936/exemplo1.zip.html
Danilo Rodrigues, danilod100@terra.com.br
Trabalhando com arquivos INI no Delphi 8 de 8 Exemplo 2: Exemplo de como salvar as posies top e left, e o tamanho width e height do formulrio. Este exemplo pode ser encontrado no link abaixo http://www.bestsharing.com/files/ms00171957/exemplo2.zip.html
Notas finais
Observao: Sempre que terminar de usar a variavel que tem acesso ao arquivo INI libere ela da memria. Exemplo abaixo: var arquivo : Tinifile; begin arquivo := Tinifile.Create('teste.ini'); //inicializa a variavel arquivo com o arquivo teste.ini arquivo.Free; //libera a variavel arquivo da memria end; A classe TRegIniFile foi introduzida para um fcil acesso ao Registro do sistema sem ter que conhecer a estrutura do registro. TRegIniFile tem funcionalidade de acesso ao Registro igual a TIniFile tem aos arquivos .INI. Limitaes: A classe TIniFile usa a API do Windows que impe um limite de 64kb nos arquivos INI. Se voc precisar armazenar mais de 64kb de dados, voc precisar usar o TMemIniFile ao invs da TInifile, que no possui o limite de 64kb.
Sobre
Tutorial desenvolvido por Danilo Rodrigues. Este tutorial no pode ser comercializado de nenhuma forma, pois o seu contedo livre e de livre acesso a qualquer usurio. Se voc tiver alguma critica, duvida, comentario, problema com o tutorial ou com os exemplos, problema com links quebrados envie um e-mail para: danilod100@terra.com.br