La mayoría de las aplicaciones de Windows tienen sus propios archivos de inicialización, como PowerBuilder, Office y Cstar. Por lo tanto, leer y escribir archivos de inicialización es una tecnología que todo programador senior debe dominar. Aunque la lectura y escritura de archivos de inicialización también se pueden realizar utilizando Object Los archivos de texto en Pascal se leen y escriben de la misma manera, pero debido a que el archivo de inicialización es diferente de los archivos de texto normales, tiene su propio formato fijo (consulte el archivo de inicialización a continuación, que es el archivo rdfnt.ini proporcionado en ucdos). use un archivo de texto para leer Escritura, la conversión de formato no solo es muy tediosa, sino que también es propensa a errores. Para facilitar a los programadores leer y escribir datos en el archivo de inicialización, Delphi proporciona a los usuarios una clase TIniFile a través de la cual el archivo de inicialización. Se puede leer y escribir muy cómodamente.
El contenido del archivo rdfnt.ini en Ucdos es:
[Directorio de fuentes True Type]
Dir=C:SISTEMA WINDOWS
[Lista de fuentes True Type]
ARIAL.TTF=64
AARIALBD.TTF=65
ARALI.TTF=66
ARIALBI.TTF=67
VECES.TTF=68
TIMESBD.TTF=69
TIEMPOSSI.TTF=70
TIEMPOSBI.TTF=71
CORTE.TTF=72
CORBD.TTF=73
COURI.TTF=74
COURBI.TTF=75
[Usar todas las fuentes True Type]
Todo=0
La clase TiniFile no es un componente de Delphi, por lo que no se puede encontrar en la plantilla VCL de Delphi. Está definida en la unidad inifiles del sistema Delphi. Por lo tanto, para usar la clase TiniFile, debe usar explícitamente la directiva Uses inifiles en la unidad. archivo que utiliza esta clase ilustra.
Hay muchas funciones miembro definidas en la clase TiniFile. A continuación se muestran algunas funciones miembro más utilizadas:
⑴Crear()
La función se define como: constructor Create(const FileName: string);
Esta función crea un objeto de la clase TiniFile. El parámetro FileName es el nombre del archivo de inicialización que se leerá y escribirá.
Si el archivo que se va a leer y escribir está en el directorio de Windows (como el archivo system.ini), puede escribir directamente el nombre del archivo sin especificar la ruta; de lo contrario, debe especificar la ruta (como d:ucdos dfnt.ini ).
Si el archivo existe en el directorio especificado de acuerdo con las siguientes reglas, abra el archivo de inicialización; de lo contrario, cree el archivo de inicialización en el directorio especificado.
⑵LeerSecciones()
El proceso se define como: PRocedure ReadSections(Strings: TStrings);
Este proceso leerá todos los nombres de nodos (es decir, la parte encerrada entre corchetes [], como [fuentes True Type] en el archivo rdfnt.ini) del objeto de clase TiniFile creado (es decir, el archivo de inicialización asociado con él). list]) se almacena en la lista de cadenas. El parámetro Cadenas es el nombre de la variable de la lista de cadenas.
⑶ Leer valores de sección ()
El procedimiento se define como: procedimiento ReadSectionValues(const Sección: cadena; Cadenas: TStrings);
Este proceso convierte cada palabra clave (como ARIALBI.TTF) en el nodo correspondiente al valor del parámetro Sección (como [lista de fuentes True Type] en el archivo rdfnt.ini) y el valor que contiene (como ARIALBI. El valor de la palabra clave TTF es 67) se lee en la lista de cadenas especificada por el parámetro Cadenas.
⑷ Leer sección ()
El procedimiento se define como: procedimiento ReadSection(const Sección: cadena; Cadenas: TStrings);
Este proceso lee cada palabra clave en el nodo correspondiente al valor del parámetro Sección en la lista de cadenas especificada por el parámetro Cadenas. La diferencia con ReadSectionValues() es que no lee el valor correspondiente de cada palabra clave.
⑸ Leer cadena ()
La función se define como: función ReadString(const Sección, Ident, Predeterminado: cadena): cadena;
Esta función devuelve el valor de la palabra clave correspondiente al nombre del nodo con el valor del parámetro Sección y el nombre de la palabra clave con el valor del parámetro Ident (por ejemplo, el valor de la palabra clave ARIALBI.TTF en la sección [lista de fuentes True Type] es 67). Cuando la palabra clave en el nodo o sección especificada no existe, la función devuelve el valor predeterminado del parámetro Predeterminado. El valor devuelto es una cadena de datos.
Cuando el tipo de datos del valor de la palabra clave en el nodo especificado no es una cadena, puede usar la función miembro ReadInteger() para leer un valor entero y la función miembro ReadBool() para leer un valor booleano.
⑹ Escribir cadena()
El procedimiento se define como: procedimiento WriteString(const Sección, Ident, Valor: cadena);
Este proceso establece el valor de la palabra clave en el que el valor del parámetro Sección es el nombre del nodo y el valor del parámetro Ident es el nombre de la palabra clave al valor del parámetro Valor. Este proceso establece datos de cadena.
Cuando existen tanto el nodo especificado como la palabra clave, el valor de Valor se utiliza para reemplazar el valor original; si el nodo especificado no existe, se agrega automáticamente un nodo al archivo de inicialización asociado y el valor del nodo es el valor de; la Sección de parámetros, y en la Una palabra clave se agrega automáticamente debajo del nodo. El nombre de la palabra clave es el valor del parámetro Ident, y el valor correspondiente a la palabra clave es el valor del parámetro Valor. no existe, se agrega automáticamente una palabra clave debajo del nodo. El nombre de la palabra clave es el valor del parámetro Ident y el valor correspondiente a esta palabra clave es el valor del parámetro Valor.
Para establecer un valor entero, llame a la función miembro WriteInteger(); utilice la función miembro WriteBool() para establecer un valor booleano.
Conociendo las funciones de las funciones anteriores, no es difícil crear o leer y escribir un archivo de inicialización. A continuación se utiliza un ejemplo práctico para ilustrar el método de lectura del archivo de inicialización. Los pasos son los siguientes:
⒈ Coloque dos cuadros de lista combinados llamados SecciónComboBox e IdentComboBox en el formulario que necesita leer y escribir el archivo de inicialización. SecciónComboBox almacena el nombre del nodo y IdentComboBox almacena el nombre clave del nodo seleccionado. Un cuadro de entrada llamado IdentValueEdit almacena el valor de la palabra clave correspondiente. El botón de comando de modificación llamado CmdChang se puede usar para modificar el valor de la palabra clave. Después de la modificación, use el botón de comando de almacenamiento llamado CmdSave para guardar el valor de la palabra clave modificada en el archivo de inicialización asociado. El nombre de la unidad correspondiente al formulario se establece en IniUnit, el nombre del formulario se establece en IniForm y el diseño del formulario se muestra en la Figura 1 a continuación:
⒉ En la parte de la interfaz de la unidad IniUnit, use inifiles para indicar el nombre de la unidad definida por la clase TiniFile a la que se hará referencia. Y defina el objeto de la clase TiniFile en la parte de descripción de la variable, como
var IniFile: TiniFile;
⒊ Establecer el procedimiento del evento OnCreate del formulario. Use la función miembro Crear de la clase TIniFile para crear un objeto TIniFile, use este objeto para leer y escribir el archivo de inicialización rdfnt.ini en el directorio d: ucdos y lea todos los nodos en el archivo de inicialización en el cuadro de lista de combinación de SectionComboBox. A través de la función miembro ReadSections(), utilice la función miembro ReadSection() para leer todas las palabras clave en el primer nodo en IdentComboBox. En el cuadro de lista combinado, utilice la función miembro ReadString() para enviar el valor de la primera palabra clave al cuadro de entrada IdentValueEdit.
⒋ Cree el proceso de evento OnChange del cuadro de lista combinado SectionComboBox. Al seleccionar diferentes elementos en el cuadro de lista (es decir, diferentes nombres de nodos), use la función miembro ReadSection() para leer todas las palabras clave en el nodo seleccionado en el cuadro de lista combinado IdentComboBox y use la función miembro ReadString() para leer el primero El valor de la palabra clave se envía al cuadro de entrada IdentValueEdit.
⒌ Establezca el proceso de evento OnChange del cuadro de lista combinado de IdentComboBox. Al seleccionar diferentes elementos (es decir, diferentes nombres de palabras clave) en el cuadro de lista, use la función miembro ReadString() para enviar el valor de la palabra clave al cuadro de entrada IdentValueEdit.
⒍ Cree el proceso de evento OnClick del botón de comando CmdChang. Haga que el contenido del cuadro de entrada IdentValueEdit sea modificable (el cuadro de entrada IdentValueEdit no se puede modificar sin presionar el botón de comando) y configure el botón de comando CmdSave para que sea válido, de modo que el valor de la palabra clave modificada se pueda almacenar en el archivo de inicialización asociado.
⒎ Cree el proceso de evento OnClick del botón de comando CmdSave. Si el valor de la palabra clave ha cambiado, llame a la función miembro WriteString() para guardar el valor de la palabra clave modificado en el disco.
⒏ Cree el procedimiento de evento OnDestroy del formulario. Cuando el formulario falla, el objeto TIniFile creado se libera para liberar los recursos del sistema utilizados por el objeto.
En este punto, después de ejecutar el proyecto, la lectura y escritura del archivo de inicialización puede continuar sin problemas. Por supuesto, también puede usar la función miembro EraseSection () para eliminar la sección especificada, y también puede usar la función miembro DeleteKey () para eliminar la palabra clave especificada. Debido al espacio limitado, no lo presentaré en detalle aquí. Si está interesado, puede consultar la ayuda de uso de Delphi.
El siguiente es el código fuente de esta unidad:
unidad IniUnit;
interfaz
usos
Windows, Mensajes, SysUtils, Clases, Gráficos, Controles, Formularios, Cuadros de diálogo,
StdCtrls, archivos iniciales;
tipo
TIniForm = clase(TForm)
SecciónComboBox: TComboBox;
Etiqueta1: TLabel;
CmdGuardar: TButton;
CmdChang: TButton;
IdentComboBox: TComboBox;
IdentValueEdit: TEdit;
Etiqueta2: TLabel;
Etiqueta3: TLabel;
procedimiento FormCreate(Remitente: TObject);
procedimiento SecciónComboBoxChange(Remitente: TObject);
procedimiento FormDestroy(Remitente: TObject);
procedimiento CmdChangClick (Remitente: TObject);
procedimiento CmdSaveClick(Remitente: TObject);
procedimiento IdentComboBoxChange(Remitente: TObject);
privado
{Declaraciones privadas}
público
{Declaraciones públicas}
fin;
var
IniForm: TIniForm;
{Leer y escribir archivos de inicialización de Windows a través de la clase TIniFile en Delphi}
ArchivoIni: TIniFile;
implementación
{$R *.DFM}
procedimiento TIniForm.FormCreate(Remitente: TObject);
comenzar
{ Utilice la función miembro Crear de la clase TIniFile para crear un par TIniFile
Objeto, este objeto se utiliza para leer y escribir el archivo rdfnt.ini en el directorio d:ucdos.
Si el archivo que se va a leer y escribir está en el directorio de Windows (como system.ini),
Puede escribir el nombre del archivo directamente sin especificar la ruta}
IniFile:=TIniFile.Create('d:ucdos dfnt.ini');
{ Todo el contenido del archivo de inicialización system.ini asociado con el objeto TIniFile
Los nombres de las secciones con secciones (es decir, la parte encerrada entre corchetes []) se envían al grupo desplegable
Cuadro de lista combinado SecciónComboBox}
SecciónComboBox.Clear;
IniFile.ReadSections(SectionComboBox.Items);
{Seleccione el nombre de la primera sección del archivo system.ini}
SecciónComboBox.ItemIndex:=0;
SecciónComboBoxChange(Remitente);
CmdSave.Enabled:=Falso;
fin;
{Los elementos correspondientes en la sección seleccionada en el cuadro de lista combinada IniComboBox
Las variables y los valores correspondientes se envían al editor de texto multilínea IniMemo}
procedimiento TIniForm.SectionComboBoxChange(Remitente: TObject);
comenzar
IdentComboBox.Claro;
IniFile.ReadSection(SectionComboBox.Text,
IdentComboBox.Artículos);
IdentComboBox.ItemIndex:=0;
IdentComboBoxChange(Remitente);
fin;
procedimiento TIniForm.IdentComboBoxChange(Remitente: TObject);
comenzar
IdentValueEdit.Enabled:=Falso;
{Lea el valor de la palabra clave seleccionada}
IdentValueEdit.Texto:=
IniFile.ReadString(SectionComboBox.Text,
IdentComboBox.Texto,');
fin;
procedimiento TIniForm.CmdChangClick (Remitente: TObject);
comenzar
CmdSave.Enabled:=Verdadero;
IdentValueEdit.Enabled:=Verdadero;
IdentValueEdit.SetFocus;
fin;
procedimiento TIniForm.CmdSaveClick(Remitente: TObject);
comenzar
si IdentValueEdit.Modified entonces comienza
IniFile.WriteString(SectionComboBox.Text,
IdentComboBox.Texto,
IdentValueEdit.Texto);
fin;
IdentValueEdit.Enabled:=Falso;
CmdSave.Enabled:=Falso;
fin;
procedimiento TIniForm.FormDestroy(Remitente: TObject);
comenzar
IniFile.Free; {liberar el objeto creado}
fin;
fin.
El método anterior pasó la depuración usando Delphi 3.0 en Windows 95.