[DELPHI] TRABALHANDO COM ARQUIVOS .INI


Podemos utilizar aquivos .INI para guardar algumas configuração da aplicação, por exemplo, a pasta para armazenamento dos relatórios como "C:\Aplicativo\DirRelatório", o endereço de IP para acesso a base de dados ou qualquer outra informação.

Por armazenar um conteúdo de configuração, os arquivos .INI possuem uma estrutura padrão constituída de Seções, Propriedades e Valores.

Seções -> representam agrupamentos de valores, ou seja, o assunto no qual se destina os valores armazenados.
Propriedades -> são os nomes das configurações que deseja-se armazenar.
Valores -> armazenam os dados.

Exemplo da estrutura do arquivo .INI:

[Seção 1]
Propriedade1=Valor1
Propriedade2=Valor2
Propriedade3=Valor3

[Configuracao]
DirRelatorio=C:\Aplicativo\Relatorio
DirFoto=C:\Aplicativo\Foto

No nosso exemplo usaremos um arquivo .ini para guardar o nome da empresa, Ip do Servidor e a Parta utilizada para conexão.

Abra o Delphi e crie um novo projeto através do menu File -> New -> VCL Forms Application - Delphi, e altere as propriedade do Form:

Caption = TRABALHANDO COM ARQUIVO .INI
Name = Frm_Principal
Position = poDesktopCenter

Adicione ao formulário 3 TLabel, 3 TEdit, 1 TButton disponível na paleta Standard do Delphi (Tool Palette -> Standard) e altere suas propriedades conforme abaixo:

PROPERTIES TLABEL1:
Caption  = Empresa

PROPERTIES TLABEL2:
Caption  = Ip Servidor

PROPERTIES TLABEL3:
Caption  = Porta

PROPERTIES TEDIT1:
Name  = edtEmpresa

PROPERTIES TEDIT2:
Name  = edtIpServidor

PROPERTIES TEDIT3:
Name  = edtPorta

PROPERTIES TBUTTON:
Caption  = Gravar
Name = btnGravar

Posicione os componentes de forma a ficar parecido com a imagem abaixo:


Dê um duplo-clique no btnGravar e deixe seu código igual abaixo:

procedure TFrm_Principal.btnGravarClick(Sender: TObject);
var
  ArqINI: TIniFile;
begin
  // Cria o arquivo "Configuracao.ini" no mesmo diretório da aplicação, com o nome Config.ini
  ArqINI := TIniFile.Create(ExtractFilePath(Application.ExeName) +
    'Config.ini');
  try
    // Grava os dados no arquivo "Config.ini"
    ArqINI.WriteString('PARAMETROS', 'Empresa', edtEmpresa.Text);
    ArqINI.WriteString('PARAMETROS', 'IpServidor', edtIpServidor.Text);
    ArqINI.WriteString('PARAMETROS', 'Porta', edtPorta.Text);
  finally
    // Liberar a referência do arquivo da memória
    ArqINI.Free;
  end;
  // Apresenta a mensagem
  ShowMessage('Configuração gravada com sucesso!');
end;

Declare na Uses da Unit a referência IniFiles, só assim o Delphi reconhecerá os métodos que usaremos para manipular o arquivo .INI.

Exemplo:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, IniFiles;
  
Execute a aplicação (F9), preencha os TEdit's e clique no botão btnGravar.

Se ocorreu como esperado, você recebeu a mensagem "Configuração gravada com sucesso!", vá até a pasta onde foi salvo nossa aplicação, nessa pasta foi criado o arquivo Config.ini que contem o texto informado nos TEdit's, abra-o para ver como ficou.


Volte ao Delphi, clique na barra de título do formulário para selecioná-lo, acesse o evento onCreate do formulário (Object Inspector -> Guia Events: onCreate), e adicione o código abaixo:

procedure TFrm_Principal.FormCreate(Sender: TObject);
var
  ArqINI: TIniFile;
begin
  // Cria o objeto do tipo TIniFile
  ArqINI := TIniFile.Create(ExtractFilePath(Application.ExeName) +
    'Config.ini');
  try
    // Lê o conteúdo gravado no arquivo conforme parametros informados
    edtEmpresa.Text := ArqINI.ReadString('PARAMETROS', 'Empresa', '');
    edtIpServidor.Text := ArqINI.ReadString('PARAMETROS', 'IpServidor', '');
    edtPorta.Text := ArqINI.ReadString('PARAMETROS', 'Porta', '');
  finally
    // Liberar a referência do arquivo da memória
    ArqINI.Free;
  end;
end;

Ao executar a aplicação já será efetuada a leitura do arquivo "Config.ini" e os valores das chaves carregados nos respectivos TEdits, execute a aplicação (F9) e veja o resultado.

Até o momento só utilizamos o método "ReadString" para gravação e leitura de valores. Para manipular outros tipos de dados, basta utilizar as respectivos metodos/funções disponibilizadas pelo Delphi, como WriteInteger e ReadInteger para número inteiro, WriteFloat e ReadFloat para números reais ou WriteDate e ReadDate para datas.Conforme o exemplo abaixo:

Leitura:
function ReadString(const Section, Ident, Default: string): string;
function ReadInteger(const Section, Ident: string; Default: Longint): Longint;
function ReadBool(const Section, Ident: string; Default: Boolean): Boolean;
function ReadBinaryStream(const Section, Name: string; Value: TStream): Integer;
function ReadDate(const Section, Name: string; Default: TDateTime): TDateTime;
function ReadDateTime(const Section, Name: string; Default: TDateTime): TDateTime;
function ReadFloat(const Section, Name: string; Default: Double): Double;
function ReadTime(const Section, Name: string; Default: TDateTime): TDateTime;

Gravação:
procedure WriteString(const Section, Ident, Value: String);
procedure WriteInteger(const Section, Ident: string; Value: Longint);
procedure WriteBool(const Section, Ident: string; Value: Boolean);
procedure WriteBinaryStream(const Section, Name: string; Value: TStream);
procedure WriteDate(const Section, Name: string; Value: TDateTime);
procedure WriteDateTime(const Section, Name: string; Value: TDateTime);
procedure WriteFloat(const Section, Name: string; Value: Double);
procedure WriteTime(const Section, Name: string; Value: TDateTime);

Também temos as funções para:

Apagar valores: Tentar apagar um valor de uma seção ou tentar apagar dados de uma chave.
ArqIni.DeleteKey('Seção', 'Chave');

Apagando Seções: Caso a seção não possa ser removida, uma exceção é gerada.
ArqIni.EraseSction('Seção');

Lendo uma seção: ReadSection recupera os nomes de todas as chaves dentro de uma seção, e os grava em um objeto do tipo Tstrings.
ArqIni.ReadSection('Seção', TStrings);

Lendo todas as seções:
ArqIni.ReadSections(TStrings);

Lendo todas os valores de uma seção: ReadSectionValues retorna o nome e o valor de todas as chaves de uma seção.
ArqIni.ReadSectionValues('Seção', TStrings);

Verificando se uma seção existe: O retorno de SectionExistis é booleano.
ArqIni.SectionExists('Seção');

Gostou? Deixe seu comentário... Convido você a seguir meu blog, sua presença é bem vinda!【ツ】

Nenhum comentário:

Postar um comentário