La plupart des applications Windows possèdent leurs propres fichiers d'initialisation, tels que PowerBuilder, Office et Cstar. Par conséquent, la lecture et l’écriture de fichiers d’initialisation sont une technologie que tout programmeur senior doit maîtriser. Bien que la lecture et l'écriture de fichiers d'initialisation puissent également être effectuées à l'aide d'Object Les fichiers texte en Pascal sont lus et écrits de la même manière, mais comme le fichier d'initialisation est différent des fichiers texte ordinaires, il a son propre format fixe (voir le fichier d'initialisation ci-dessous est le fichier rdfnt.ini fourni dans ucdos si vous). En utilisant un fichier texte pour lire l'écriture, la conversion de format est non seulement très fastidieuse, mais également sujette aux erreurs. Afin de faciliter la lecture et l'écriture des données dans le fichier d'initialisation par les programmeurs, Delphi fournit aux utilisateurs une classe TIniFile, à travers laquelle le fichier d'initialisation. peut être lu et écrit très facilement.
Le contenu du fichier rdfnt.ini dans Ucdos est :
[Répertoire des polices True Type]
Dir=C:SYSTÈMEWINDOWS
[Liste des polices True Type]
ARIAL.TTF=64
ARIALBD.TTF=65
ARIALI.TTF=66
ARIALBI.TTF=67
TIMES.TTF=68
TIMESBD.TTF=69
TIMESI.TTF=70
TIMESBI.TTF=71
COUR.TTF=72
COURBD.TTF=73
COURI.TTF=74
COURBI.TTF=75
[Utiliser toutes les polices True Type]
Tout=0
La classe TiniFile n'est pas un composant Delphi, elle est donc introuvable dans le modèle VCL de Delphi. Elle est définie dans l'unité inifiles du système Delphi. Par conséquent, pour utiliser la classe TiniFile, vous devez utiliser explicitement la directive Uses inifiles dans l'unité. fichier qui utilise cette classe illustrer.
Il existe de nombreuses fonctions membres définies dans la classe TiniFile. Voici quelques fonctions membres plus fréquemment utilisées :
⑴Créer()
La fonction est définie comme : constructeur Create(const FileName: string);
Cette fonction crée un objet de la classe TiniFile. Le paramètre FileName est le nom du fichier d'initialisation à lire et à écrire.
Si le fichier à lire et à écrire se trouve dans le répertoire Windows (comme le fichier system.ini), vous pouvez écrire directement le nom du fichier sans préciser le chemin, sinon vous devez spécifier le chemin (comme d:ucdos dfnt.ini ).
Si le fichier existe dans le répertoire spécifié selon les règles suivantes, ouvrez le fichier d'initialisation ; sinon, créez le fichier d'initialisation dans le répertoire spécifié.
⑵LireSections()
Le processus est défini comme suit : PRocedure ReadSections(Strings: TStrings) ;
Ce processus lira tous les noms de nœuds (c'est-à-dire la partie entre crochets [], comme [polices True Type] dans le fichier rdfnt.ini) à partir de l'objet de classe TiniFile créé (c'est-à-dire le fichier d'initialisation qui lui est associé). list]) est stocké dans la liste de chaînes. Le paramètre Strings est le nom de variable de la liste de chaînes.
⑶ LireSectionValues()
La procédure est définie comme suit : procédure ReadSectionValues(const Section: string; Strings: TStrings);
Ce processus convertit chaque mot-clé (comme ARIALBI.TTF) dans le nœud correspondant à la valeur du paramètre Section (comme [Liste des polices True Type] dans le fichier rdfnt.ini) et la valeur qu'il contient (comme ARIALBI. La valeur du mot clé TTF est 67) est lue dans la liste de chaînes spécifiée par le paramètre Strings.
⑷ LireSection()
La procédure est définie comme suit : procédure ReadSection(const Section: string; Strings: TStrings);
Ce processus lit chaque mot-clé du nœud correspondant à la valeur du paramètre Section dans la liste de chaînes spécifiée par le paramètre Strings. La différence avec ReadSectionValues() est qu'il ne lit pas la valeur correspondante de chaque mot-clé.
⑸ LireChaîne()
La fonction est définie comme : function ReadString(const Section, Ident, Default: string): string;
Cette fonction renvoie la valeur du mot-clé correspondant au nom du nœud avec la valeur du paramètre Section et le nom du mot-clé avec la valeur du paramètre Ident (par exemple, la valeur du mot-clé ARIALBI.TTF dans la section [Liste des polices True Type] est 67). Lorsque le mot-clé dans le nœud ou la section spécifié n'existe pas, la fonction renvoie la valeur par défaut du paramètre Default. La valeur renvoyée est une chaîne de données.
Lorsque le type de données de la valeur du mot clé dans le nœud spécifié n'est pas une chaîne, vous pouvez utiliser la fonction membre ReadInteger() pour lire une valeur entière et la fonction membre ReadBool() pour lire une valeur booléenne.
⑹ WriteString()
La procédure est définie comme suit : procédure WriteString(const Section, Ident, Value: string);
Ce processus définit la valeur du mot-clé dans laquelle la valeur du paramètre Section est le nom du nœud et la valeur du paramètre Ident est le nom du mot-clé sur la valeur du paramètre Value. Ce processus définit les données de chaîne.
Lorsque le nœud et le mot-clé spécifiés existent, la valeur de Value est utilisée pour remplacer la valeur d'origine ; si le nœud spécifié n'existe pas, un nœud est automatiquement ajouté au fichier d'initialisation associé et la valeur du nœud est la valeur de le paramètre Section, et dans le mot-clé A est automatiquement ajouté sous le nœud. Le nom du mot-clé est la valeur du paramètre Ident, et la valeur correspondant au mot-clé est la valeur du paramètre Value Si le nœud existe mais le mot-clé existe. n'existe pas, un mot-clé est automatiquement ajouté sous le nœud. Le nom du mot-clé est la valeur du paramètre Ident, et la valeur correspondant à ce mot-clé est la valeur du paramètre Value.
Pour définir une valeur entière, appelez la fonction membre WriteInteger() ; utilisez la fonction membre WriteBool() pour définir une valeur booléenne.
Connaissant les fonctions des fonctions ci-dessus, il n'est pas difficile de créer ou de lire et d'écrire un fichier d'initialisation. Ce qui suit utilise un exemple pratique pour illustrer la méthode de lecture du fichier d'initialisation. Les étapes sont les suivantes :
⒈ Placez deux zones de liste combinées nommées SectionComboBox et IdentComboBox sur le formulaire qui doit lire et écrire le fichier d'initialisation. La SectionComboBox stocke le nom du nœud et la IdentComboBox stocke le nom de clé du nœud sélectionné. Une zone de saisie nommée IdentValueEdit stocke la valeur du mot-clé correspondant. Le bouton de commande de modification nommé CmdChang peut être utilisé pour modifier la valeur du mot-clé. Après modification, utilisez le bouton de commande de stockage nommé CmdSave pour enregistrer la valeur du mot-clé modifié dans le fichier d'initialisation associé. Le nom de l'unité correspondant au formulaire est défini sur IniUnit, le nom du formulaire est défini sur IniForm et la disposition du formulaire est celle illustrée dans la figure 1 ci-dessous :
⒉ Dans la partie interface de l'unité IniUnit, utilisez use infiles pour indiquer le nom de l'unité définie par la classe TiniFile à référencer. Et définissez l'objet de la classe TiniFile dans la partie description de la variable, comme
var IniFile : TiniFile ;
⒊ Etablir la procédure événementielle OnCreate du formulaire. Utilisez la fonction membre Create de la classe TIniFile pour créer un objet TIniFile, utilisez cet objet pour lire et écrire le fichier d'initialisation rdfnt.ini dans le répertoire d:ucdos et lisez tous les nœuds du fichier d'initialisation dans la zone de liste de combinaisons SectionComboBox via la fonction membre ReadSections(), utilisez la fonction membre ReadSection() pour lire tous les mots-clés du premier nœud dans IdentComboBox. Dans la zone de liste combinée, utilisez la fonction membre ReadString() pour envoyer la valeur du premier mot-clé à la zone de saisie IdentValueEdit.
⒋ Créez le processus événementiel OnChange de la zone de liste combinée SectionComboBox. Lors de la sélection de différents éléments dans la zone de liste (c'est-à-dire différents noms de nœuds), utilisez la fonction membre ReadSection() pour lire tous les mots-clés du nœud sélectionné dans la zone de liste combinée IdentComboBox et utilisez la fonction membre ReadString() pour lire le premier La valeur du mot-clé est envoyée à la zone de saisie IdentValueEdit.
⒌ Établissez le processus événementiel OnChange de la zone de liste de combinaison IdentComboBox. Lors de la sélection de différents éléments (c'est-à-dire différents noms de mots-clés) dans la zone de liste, utilisez la fonction membre ReadString() pour envoyer la valeur du mot-clé dans la zone de saisie IdentValueEdit.
⒍ Créez le processus événementiel OnClick du bouton de commande CmdChang. Rendez le contenu de la zone de saisie IdentValueEdit modifiable (la zone de saisie IdentValueEdit ne peut pas être modifiée sans appuyer sur le bouton de commande) et définissez le bouton de commande CmdSave pour qu'il soit valide, afin que la valeur du mot-clé modifiée puisse être stockée dans le fichier d'initialisation associé.
⒎ Créez le processus événementiel OnClick du bouton de commande CmdSave. Si la valeur du mot-clé a changé, appelez la fonction membre WriteString() pour enregistrer la valeur du mot-clé modifiée sur le disque.
⒏ Créez la procédure événementielle OnDestroy du formulaire. Lorsque le formulaire échoue, l'objet TIniFile créé est libéré pour libérer les ressources système utilisées par l'objet.
À ce stade, après l'exécution du projet, la lecture et l'écriture du fichier d'initialisation peuvent se dérouler sans problème. Bien sûr, vous pouvez également utiliser la fonction membre EraseSection() pour supprimer la section spécifiée, et vous pouvez également utiliser la fonction membre DeleteKey() pour supprimer le mot-clé spécifié. En raison de l'espace limité, je ne le présenterai pas en détail ici. Si vous êtes intéressé, vous pouvez vous référer à l'aide à l'utilisation de Delphi.
Voici le code source de cette unité :
unité IniUnit ;
interface
utilise
Windows, messages, SysUtils, classes, graphiques, contrôles, formulaires, boîtes de dialogue,
StdCtrls, fichiers inifi ;
taper
TIniForm = classe (TForm)
SectionComboBox : TComboBox ;
Étiquette1 : TLabel ;
CmdSave : TButton ;
CmdChang : TButton ;
IdentComboBox : TComboBox ;
IdentiValueEdit : TEdit ;
Étiquette2 : TLabel ;
Étiquette3 : TLabel ;
procédure FormCreate(Expéditeur : TObject);
procédure SectionComboBoxChange(Expéditeur : TObject);
procédure FormDestroy (Expéditeur : TObject);
procédure CmdChangClick(Expéditeur : TObject);
procédure CmdSaveClick(Expéditeur : TObject);
procédure IdentComboBoxChange(Expéditeur : TObject);
privé
{Déclarations privées}
publique
{Déclarations publiques}
fin;
var
IniForm : TIniForm ;
{Lire et écrire des fichiers d'initialisation Windows via la classe TIniFile dans Delphi}
IniFichier : TIniFichier ;
mise en œuvre
{$R *.DFM}
procédure TIniForm.FormCreate(Expéditeur : TObject);
commencer
{ Utilisez la fonction membre Create de la classe TIniFile pour créer une paire TIniFile
Objet, cet objet permet de lire et d'écrire le fichier rdfnt.ini dans le répertoire d:ucdos.
Si le fichier à lire et à écrire se trouve dans le répertoire Windows (comme system.ini),
Vous pouvez écrire le nom du fichier directement sans spécifier le chemin}
IniFile:=TIniFile.Create('d:ucdos dfnt.ini');
{ Tout le contenu du fichier d'initialisation system.ini associé à l'objet TIniFile
Les noms de section avec des sections (c'est-à-dire la partie entourée de crochets []) sont envoyés au groupe déroulant
Zone de liste déroulante SectionComboBox}
SectionComboBox.Clear;
IniFile.ReadSections(SectionComboBox.Items);
{Sélectionnez le nom de la première section du fichier system.ini}
SectionComboBox.ItemIndex:=0;
SectionComboBoxChange(Expéditeur);
CmdSave.Enabled:=False ;
fin;
{Les éléments correspondants dans la section sélectionnée dans la liste déroulante IniComboBox
Les variables et les valeurs correspondantes sont envoyées à l'éditeur de texte multiligne IniMemo}
procédure TIniForm.SectionComboBoxChange(Expéditeur : TObject);
commencer
IdentComboBox.Clear;
IniFile.ReadSection(SectionComboBox.Text,
IdentComboBox.Items);
IdentComboBox.ItemIndex:=0;
IdentComboBoxChange (expéditeur);
fin;
procédure TIniForm.IdentComboBoxChange(Expéditeur : TObject);
commencer
IdentValueEdit.Enabled:=False;
{Lire la valeur du mot clé sélectionné}
IdentiValueEdit.Text :=
IniFile.ReadString(SectionComboBox.Text,
IdentComboBox.Text,');
fin;
procédure TIniForm.CmdChangClick(Expéditeur : TObject);
commencer
CmdSave.Enabled :=True ;
IdentValueEdit.Enabled:=True;
IdentValueEdit.SetFocus ;
fin;
procédure TIniForm.CmdSaveClick(Expéditeur : TObject);
commencer
si IdentValueEdit.Modified alors commencez
IniFile.WriteString(SectionComboBox.Text,
IdentComboBox.Text,
IdentValueEdit.Text);
fin;
IdentValueEdit.Enabled:=False;
CmdSave.Enabled :=False ;
fin;
procédure TIniForm.FormDestroy(Expéditeur : TObject);
commencer
IniFile.Free ; {libérer l'objet créé}
fin;
fin.
La méthode ci-dessus a réussi le débogage à l'aide de Delphi 3.0 sous Windows 95.