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