Arquivos INI

Leitura e Configuração

Trabalhando constantemente em desenvolvimento de aplicações cliente/servidoras via dbExpress, verificou-se a necessidade de uma ferramenta que permitisse leitura e configuração de qualquer arquivo de parâmetros de configuração (arquivos INI). Haja vista que o trabalho de edição de determinados arquivos INI torna-se cansativo e muito perigoso em se trabalho de arquivos com mais de 30 (trinta) parâmetros de configuração.

Logo, a aplicação que questão (CONFIG_ARQ_INI) permite a leitura de qualquer arquivo INI e sua edição sem nenhum dano a estrutura do mesmo.

Interfase do Arquivo INI

A grande idéia desta aplicação é interpretar para o usuário em forma de objetos todos os parâmetros contidos em um arquivo INI. E, com este objetivo usamos os seguintes componentes:

p_banner: TPanel;

lbl_titulo: TLabel;

img: TImage;

vle_ini: TValueListEditor;

Label2: TLabel;

Msg: TMemo;

btTestar: TBitBtn;

btDatabase: TBitBtn;

btCancelar: TBitBtn;

btOk: TBitBtn;

lsb_secoes: TListBox;

vle_sec_values       : TValueListEditor;

Banco: TSQLConnection;

Abrir_Banco: TOpenDialog;

 

A disposição dos objetos no Form ficarão como mostra a Figura 1.

ini1.gif 

Figura 1.

É importante citar que o exemplo aqui exposto está utilizando como base a leitura e edição de um arquivo INI de uma determinada aplicação cliente/servidora. Mas a essência deste é a leitura de um determinado arquivo pela procedure FormCreate e a gravação da edição do mesmo pela procedure btOkClick, como mostra a Listagem 1.

 

Listagem 1. Unidade de Código

unit u_ler_ini;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, Grids, ValEdit, ExtCtrls, StdCtrls, Buttons, IniFiles, XPMan,

  DBXpress, DB, SqlExpr;

 

type

  Tfrm_configs = class(TForm)

    p_banner: TPanel;

    lbl_titulo: TLabel;

    img: TImage;

    vle_ini: TValueListEditor;

    Label2: TLabel;

    msg: TMemo;

    btTestar: TBitBtn;

    btDatabase: TBitBtn;

    btCancelar: TBitBtn;

    btOk: TBitBtn;

    lsb_secoes: TListBox;

    vle_sec_values: TValueListEditor;

    xp: TXPManifest;

    Banco: TSQLConnection;

    Abrir_Banco: TOpenDialog;

    procedure FormCreate(Sender: TObject);

    procedure btOkClick(Sender: TObject);

    procedure btCancelarClick(Sender: TObject);

    procedure btTestarClick(Sender: TObject);

    procedure btDatabaseClick(Sender: TObject);

  private

    { Private declarations }

    a_ini : TIniFile;

  public

    { Public declarations }

    property Configuracoes_INI : TIniFile read a_ini write a_ini;

  end;

 

var

  frm_configs: Tfrm_configs;

 

implementation

 

{$R *.dfm}

 

procedure Tfrm_configs.FormCreate(Sender: TObject);

var

  i,

  x : Integer;

begin

  x := 1;

  Configuracoes_INI := TIniFile.Create(ExtractFilePath(Application.ExeName) +

                       'Finance.ini');

  Configuracoes_INI.ReadSections(lsb_secoes.Items);

  for i := 0 to lsb_secoes.Items.Count - 1 do begin

    Configuracoes_INI.ReadSectionValues(lsb_secoes.Items. Strings[i],

                                        msg.Lines);

    vle_ini.Strings.AddStrings(msg.Lines);

    while x <= vle_ini.Strings.Count do begin

      vle_sec_values.Strings.Add(vle_ini.Keys[x] + '=' +

                                 lsb_secoes.Items. Strings[i]);

      Inc(x);

    end;

  end;

  msg.Lines.Clear;

end;

 

procedure Tfrm_configs.btOkClick(Sender: TObject);

var

  x : Integer;

begin

  for x := 1 to vle_ini.Strings.Count do begin

    Configuracoes_INI.WriteString(vle_sec_values.Values[vle_ini.Keys[x]],

                                  vle_ini.Keys[x],

                                  vle_ini.Values[vle_ini.Keys[x]]);

    Configuracoes_INI.UpdateFile;

  end;

  Application.MessageBox('Alterações no Arquivo INI Gravadas com Sucesso !!!',

                         'Configurações', MB_ICONINFORMATION);

  Close;

end;

 

procedure Tfrm_configs.btCancelarClick(Sender: TObject);

begin

  Close;

end;

 

procedure Tfrm_configs.btTestarClick(Sender: TObject);

begin

  try

    with Banco do begin

      Connected := not True;

      Params.Values['DriverName'] := vle_ini.Values['Drive'];

      Params.Values['Database']   := vle_ini.Values['Servidor'] + ':' +

                                     vle_ini.Values['Base'];

      Params.Values['User_Name']  := vle_ini.Values['Usuario'];

      Params.Values['Password']   := vle_ini.Values['Senha'];

      Params.Values['SQLDialect'] := vle_ini.Values['Dicionario'];

      Params.Values['RoleName']   := vle_ini.Values['Estacao'];

      Connected := True;

    end;

    lbl_titulo.Caption := 'Conecção Exefuada com Sucesso !!!';

    msg.Text           := 'Conecção Exefuada com Sucesso !!!';

    Application.MessageBox('Conecção Exefuada com Sucesso !!!',

                           'Banco', MB_ICONINFORMATION);

  except

    on E : Exception do begin

      msg.Text := E.Message;

      msg.Lines.Add('---------------------------------------' +

                    '---------------------------------------' +

                    '------------------');

      msg.Lines.Add('Erro na conecção !!!');

      msg.Lines.Add('---------------------------------------' +

                    '---------------------------------------' +

                    '------------------');

      lbl_titulo.Caption := 'Erro na conecção !!!';

    end;

  end;

end;

 

procedure Tfrm_configs.btDatabaseClick(Sender: TObject);

begin

  with vle_ini.Strings do begin

    Abrir_Banco.FileName := Values['Base'];

    if Abrir_Banco.Execute then

      Values['Base'] := Abrir_Banco.FileName;

  end;

end;

 

end.

 

 

Até o próximo artigo.

Obrigado.