A maioria dos aplicativos do Windows possui seus próprios arquivos de inicialização, como PowerBuilder, Office e Cstar. Portanto, ler e gravar arquivos de inicialização é uma tecnologia que todo programador sênior deve dominar. Embora a leitura e gravação de arquivos de inicialização também possam ser feitas usando Object Arquivos de texto em Pascal são lidos e gravados da mesma maneira, mas como o arquivo de inicialização é diferente dos arquivos de texto comuns, ele tem seu próprio formato fixo (veja o arquivo de inicialização abaixo, o arquivo rdfnt.ini fornecido em ucdos). usar um arquivo de texto para ler a escrita, a conversão de formato não é apenas muito tediosa, mas também sujeita a erros. Para facilitar aos programadores a leitura e gravação de dados no arquivo de inicialização, o Delphi fornece aos usuários uma classe TIniFile, por meio da qual o arquivo de inicialização. pode ser lido e escrito de forma muito conveniente.
O conteúdo do arquivo rdfnt.ini em Ucdos é:
[Diretório de fontes True Type]
Dir=C:SISTEMA WINDOWS
[Lista de fontes True Type]
ARIAL.TTF=64
ARIALBD.TTF=65
ARIALI.TTF=66
ARIALBI.TTF=67
TEMPOS.TTF=68
TEMPOSBD.TTF=69
TIMESI.TTF=70
TIMESBI.TTF=71
TRIBUNAL.TTF=72
COURBD.TTF=73
COURI.TTF=74
COURBI.TTF=75
[Use todas as fontes True Type]
Todos=0
A classe TiniFile não é um componente Delphi, portanto não pode ser encontrada no modelo VCL do Delphi. Ela é definida na unidade inifiles do sistema Delphi. Portanto, para usar a classe TiniFile, você deve usar explicitamente a diretiva Uses inifiles na unidade. arquivo que usa esta classe ilustra.
Existem muitas funções-membro definidas na classe TiniFile. Aqui estão algumas funções-membro usadas com mais frequência:
⑴Criar()
A função é definida como: construtor Create(const FileName: string);
Esta função cria um objeto da classe TiniFile. O parâmetro FileName é o nome do arquivo de inicialização a ser lido e escrito.
Se o arquivo a ser lido e gravado estiver no diretório do Windows (como o arquivo system.ini), você pode escrever diretamente o nome do arquivo sem especificar o caminho, caso contrário, você deve especificar o caminho (como d:ucdos dfnt.ini ).
Se o arquivo existir no diretório especificado de acordo com as regras a seguir, abra o arquivo de inicialização, caso contrário, crie o arquivo de inicialização no diretório especificado.
⑵LerSeções()
O processo é definido como: PRocedure ReadSections(Strings: TStrings);
Este processo lerá todos os nomes de nós (ou seja, a parte entre colchetes [], como [fontes True Type] no arquivo rdfnt.ini) do objeto de classe TiniFile criado (ou seja, o arquivo de inicialização associado a ele) list]) é armazenado na lista de strings. O parâmetro Strings é o nome da variável da lista de strings.
⑶ LerSeçãoValores()
O procedimento é definido como: procedimento ReadSectionValues(const Section: string; Strings: TStrings);
Este processo converte cada palavra-chave (como ARIALBI.TTF) no nó correspondente ao valor do parâmetro Seção (como [lista de fontes True Type] no arquivo rdfnt.ini) e o valor que ela contém (como o ARIALBI. O valor da palavra-chave TTF é 67) é lido na lista de strings especificada pelo parâmetro Strings.
⑷ LerSeção()
O procedimento é definido como: procedimento ReadSection(const Section: string; Strings: TStrings);
Este processo lê cada palavra-chave no nó correspondente ao valor do parâmetro Section na lista de strings especificada pelo parâmetro Strings. A diferença com ReadSectionValues() é que ele não lê o valor correspondente de cada palavra-chave.
⑸LeituraString()
A função é definida como: function ReadString(const Section, Ident, Default: string): string;
Esta função retorna o valor da palavra-chave correspondente ao nome do nó com o valor do parâmetro Section e o nome da palavra-chave com o valor do parâmetro Ident (por exemplo, o valor da palavra-chave ARIALBI.TTF na seção [Lista de fontes True Type] é 67). Quando a palavra-chave no nó ou seção especificada não existe, a função retorna o valor padrão do parâmetro Default. O valor retornado é uma string de dados.
Quando o tipo de dados do valor da palavra-chave no nó especificado não é uma string, você pode usar a função membro ReadInteger() para ler um valor inteiro e a função membro ReadBool() para ler um valor booleano.
⑹ WriteString()
O procedimento é definido como: procedimento WriteString(const Section, Ident, Value: string);
Este processo define o valor da palavra-chave em que o valor do parâmetro Section é o nome do nó e o valor do parâmetro Ident é o nome da palavra-chave para o valor do parâmetro Value. Este processo define dados de string.
Quando o nó e a palavra-chave especificados existem, o valor de Value é usado para substituir o valor original, se o nó especificado não existir, um nó é adicionado automaticamente ao arquivo de inicialização associado e o valor do nó é o valor de; a seção de parâmetro e na palavra-chave A é adicionada automaticamente sob o nó. O nome da palavra-chave é o valor do parâmetro Ident e o valor correspondente à palavra-chave é o valor do parâmetro Valor. não existir, uma palavra-chave é automaticamente adicionada ao nó. O nome da palavra-chave é o valor do parâmetro Ident e o valor correspondente a esta palavra-chave é o valor do parâmetro Valor.
Para definir um valor inteiro, chame a função de membro WriteInteger(); use a função de membro WriteBool() para definir um valor booleano.
Conhecendo as funções das funções acima, não é difícil criar ou ler e escrever um arquivo de inicialização. A seguir é utilizado um exemplo prático para ilustrar o método de leitura do arquivo de inicialização.
⒈ Coloque duas caixas de listagem combinadas chamadas SectionComboBox e IdentComboBox no formulário que precisa ler e gravar o arquivo de inicialização. O SectionComboBox armazena o nome do nó e o IdentComboBox armazena o nome da chave do nó selecionado. Uma caixa de entrada chamada IdentValueEdit armazena o valor da palavra-chave correspondente. O botão de comando de modificação denominado CmdChang pode ser usado para modificar o valor da palavra-chave. Após a modificação, use o botão de comando de armazenamento denominado CmdSave para salvar o valor da palavra-chave modificada no arquivo de inicialização associado. O nome da unidade correspondente ao formulário é definido como IniUnit, o nome do formulário é definido como IniForm e o layout do formulário é mostrado na Figura 1 abaixo:
⒉ Na parte de interface da unidade IniUnit, use inifiles para indicar o nome da unidade definida pela classe TiniFile a ser referenciada. E defina o objeto da classe TiniFile na parte de descrição da variável, como
var IniFile: TiniFile;
⒊ Estabeleça o procedimento de evento OnCreate do formulário. Use a função de membro Create da classe TIniFile para criar um objeto TIniFile, use este objeto para ler e gravar o arquivo de inicialização rdfnt.ini no diretório d:ucdos e leia todos os nós no arquivo de inicialização na caixa de listagem de combinação SectionComboBox por meio da função de membro ReadSections(), use a função de membro ReadSection() para ler todas as palavras-chave no primeiro nó no IdentComboBox. Na caixa de listagem combinada, use a função membro ReadString() para enviar o valor da primeira palavra-chave para a caixa de entrada IdentValueEdit.
⒋ Crie o processo de evento OnChange da caixa de listagem combinada SectionComboBox. Ao selecionar itens diferentes na caixa de listagem (ou seja, nomes de nós diferentes), use a função de membro ReadSection() para ler todas as palavras-chave no nó selecionado na caixa de listagem combinada IdentComboBox e use a função de membro ReadString() para ler o primeiro O valor da palavra-chave é enviado para a caixa de entrada IdentValueEdit.
⒌ Estabeleça o processo de evento OnChange da caixa de listagem de combinação IdentComboBox. Ao selecionar itens diferentes (ou seja, nomes de palavras-chave diferentes) na caixa de listagem, use a função membro ReadString() para enviar o valor da palavra-chave para a caixa de entrada IdentValueEdit.
⒍ Crie o processo de evento OnClick do botão de comando CmdChang. Torne o conteúdo da caixa de entrada IdentValueEdit modificável (a caixa de entrada IdentValueEdit não pode ser modificada sem pressionar o botão de comando) e defina o botão de comando CmdSave como válido, para que o valor da palavra-chave modificada possa ser armazenado no arquivo de inicialização associado.
⒎ Crie o processo de evento OnClick do botão de comando CmdSave. Se o valor da palavra-chave tiver sido alterado, chame a função membro WriteString() para salvar o valor da palavra-chave modificado no disco.
⒏ Crie o procedimento de evento OnDestroy do formulário. Quando o formulário falha, o objeto TIniFile criado é liberado para liberar os recursos do sistema utilizados pelo objeto.
Neste ponto, após a execução do projeto, a leitura e gravação do arquivo de inicialização podem prosseguir sem problemas. Claro, você também pode usar a função de membro EraseSection() para excluir a seção especificada e também pode usar a função de membro DeleteKey() para excluir a palavra-chave especificada. Devido ao espaço limitado, não irei apresentá-la em detalhes aqui. Se estiver interessado, você pode consultar a ajuda de uso do Delphi.
A seguir está o código fonte desta unidade:
unidade IniUnit;
interface
usa
Windows, Mensagens, SysUtils, Classes, Gráficos, Controles, Formulários, Diálogos,
StdCtrls, arquivos iniciais;
tipo
TIniForm = classe(TForm)
SeçãoComboBox: TComboBox;
Rótulo1: TLabel;
CmdSalvar: TButton;
CmdChang: TButton;
IdentComboBox: TComboBox;
IdentValueEdit: TEdit;
Etiqueta2: TLabel;
Rótulo3: TLabel;
procedimento FormCreate(Remetente: TObject);
procedimento SectionComboBoxChange(Sender: TObject);
procedimento FormDestroy(Remetente: TObject);
procedimento CmdChangClick(Remetente: TObject);
procedimento CmdSaveClick(Remetente: TObject);
procedimento IdentComboBoxChange(Remetente: TObject);
privado
{Declarações privadas}
público
{Declarações públicas}
fim;
var
IniForm: TIniForm;
{Ler e gravar arquivos de inicialização do Windows por meio da classe TIniFile no Delphi}
ArquivoIni: TIniFile;
implementação
{$R *.DFM}
procedimento TIniForm.FormCreate(Sender: TObject);
começar
{ Use a função de membro Create da classe TIniFile para criar um par TIniFile
Objeto, este objeto é usado para ler e gravar o arquivo rdfnt.ini no diretório d:ucdos.
Se o arquivo a ser lido e gravado estiver no diretório do Windows (como system.ini),
Você pode escrever o nome do arquivo diretamente sem especificar o caminho}
IniFile:=TIniFile.Create('d:ucdos dfnt.ini');
{ Todo o conteúdo do arquivo de inicialização system.ini associado ao objeto TIniFile
Os nomes das seções com seções (ou seja, a parte entre colchetes []) são enviados para o grupo suspenso
Caixa de listagem combinada SectionComboBox}
SeçãoComboBox.Clear;
IniFile.ReadSections(SectionComboBox.Items);
{Selecione o nome da primeira seção do arquivo system.ini}
SectionComboBox.ItemIndex:=0;
SectionComboBoxChange(Remetente);
CmdSave.Enabled:=Falso;
fim;
{Os itens correspondentes na seção selecionada na caixa de lista de combinação IniComboBox
As variáveis e os valores correspondentes são enviados para o editor de texto multilinha IniMemo}
procedimento TIniForm.SectionComboBoxChange(Sender: TObject);
começar
IdentComboBox.Clear;
IniFile.ReadSection(SectionComboBox.Text,
IdentComboBox.Items);
IdentComboBox.ItemIndex:=0;
IdentComboBoxChange(Remetente);
fim;
procedimento TIniForm.IdentComboBoxChange(Sender: TObject);
começar
IdentValueEdit.Enabled:=Falso;
{Leia o valor da palavra-chave selecionada}
IdentValueEdit.Text:=
IniFile.ReadString(SectionComboBox.Text,
IdentComboBox.Text,');
fim;
procedimento TIniForm.CmdChangClick(Remetente: TObject);
começar
CmdSave.Enabled:=Verdadeiro;
IdentValueEdit.Enabled:=True;
IdentValueEdit.SetFocus;
fim;
procedimento TIniForm.CmdSaveClick(Remetente: TObject);
começar
se IdentValueEdit.Modified então comece
IniFile.WriteString(SectionComboBox.Text,
IdentComboBox.Text,
IdentValueEdit.Text);
fim;
IdentValueEdit.Enabled:=Falso;
CmdSave.Enabled:=Falso;
fim;
procedimento TIniForm.FormDestroy(Sender: TObject);
começar
IniFile.Free; {libere o objeto criado}
fim;
fim.
O método acima passou na depuração usando Delphi 3.0 no Windows 95.