تحتوي معظم التطبيقات في Windows على ملفات التهيئة الخاصة بها، مثل PowerBuilder وOffice وCstar. ولذلك فإن قراءة وكتابة ملفات التهيئة هي تقنية يجب على كل مبرمج كبير أن يتقنها. على الرغم من أنه يمكن أيضًا إجراء قراءة وكتابة ملفات التهيئة باستخدام Object تتم قراءة وكتابة الملفات النصية في Pascal بنفس الطريقة، ولكن نظرًا لأن ملف التهيئة يختلف عن الملفات النصية العادية، فإن له تنسيقًا ثابتًا خاصًا به (انظر ملف التهيئة أدناه هو ملف rdfnt.ini المتوفر في ucdos). استخدام ملف نصي لقراءة الكتابة، وتحويل التنسيق ليس فقط مملاً للغاية، ولكنه أيضًا عرضة للأخطاء. من أجل تسهيل قراءة وكتابة البيانات في ملف التهيئة، توفر دلفي للمستخدمين فئة TIniFile، والتي من خلالها يمكن لملف التهيئة. يمكن قراءتها وكتابتها بشكل مريح للغاية.
محتويات ملف rdfnt.ini في Ucdos هي:
[دليل الخطوط من النوع الحقيقي]
دير=C:WINDOWSSYSTEM
[قائمة خطوط True Type]
ARIAL.TTF=64
ARIALBD.TTF=65
ARIALI.TTF=66
ARIALBI.TTF=67
الأوقات.TTF=68
TIMESBD.TTF=69
TIMESI.TTF=70
TIMESBI.TTF=71
المحكمة.TTF=72
COURBD.TTF=73
كوري.TTF=74
كوربي.TTF=75
[استخدم جميع خطوط True Type]
الكل=0
فئة TiniFile ليست مكون دلفي، لذلك لا يمكن العثور عليها في قالب VCL الخاص بـ Delphi، فهي محددة في وحدة inifiles في نظام دلفي. لذلك، لاستخدام فئة TiniFile، يجب عليك استخدام توجيه Uses inifiles بشكل صريح في الوحدة يوضح الملف الذي يستخدم هذه الفئة.
هناك العديد من وظائف الأعضاء المحددة في فئة TiniFile، فيما يلي بعض وظائف الأعضاء الأكثر استخدامًا:
⑴إنشاء ()
يتم تعريف الوظيفة على النحو التالي: إنشاء المُنشئ (const FileName: string)؛
تقوم هذه الوظيفة بإنشاء كائن من فئة TiniFile. المعلمة FileName هي اسم ملف التهيئة المراد قراءته وكتابته.
إذا كان الملف المراد قراءته وكتابته موجودًا في دليل Windows (مثل ملف system.ini)، فيمكنك كتابة اسم الملف مباشرة دون تحديد المسار، وإلا فيجب عليك تحديد المسار (مثل d:ucdos dfnt.ini) ).
إذا كان الملف موجودًا في الدليل المحدد وفقًا للقواعد التالية، فافتح ملف التهيئة؛ وإلا، فقم بإنشاء ملف التهيئة في الدليل المحدد.
⑵أقسام القراءة()
يتم تعريف العملية على النحو التالي: PROcedure ReadSections(Strings: TStrings);
ستقرأ هذه العملية جميع أسماء العقد (أي الجزء المحاط بين قوسين []، مثل [خطوط True Type] في ملف rdfnt.ini) من كائن فئة TiniFile الذي تم إنشاؤه (أي ملف التهيئة المرتبط به) list]) مخزنة في قائمة السلسلة. المعلمة Strings هي اسم المتغير لقائمة السلاسل.
⑶ قيم القراءة ()
يتم تعريف الإجراء على النحو التالي: الإجراء ReadSectionValues(قسم const: سلسلة; سلاسل: TStrings);
تقوم هذه العملية بتحويل كل كلمة رئيسية (مثل ARIALBI.TTF) في العقدة المقابلة لقيمة قسم المعلمة (مثل [قائمة خطوط True Type] في ملف rdfnt.ini) والقيمة التي تحتوي عليها (مثل ARIALBI. قيمة الكلمة الأساسية TTF هي 67) تتم قراءتها في قائمة السلاسل المحددة بواسطة سلاسل المعلمة.
⑷ قسم القراءة()
يتم تعريف الإجراء على النحو التالي: الإجراء ReadSection(قسم const: سلسلة; سلاسل: TStrings);
تقرأ هذه العملية كل كلمة رئيسية في العقدة المقابلة لقيمة قسم المعلمة في قائمة السلاسل المحددة بواسطة سلاسل المعلمة. الفرق مع ReadSectionValues() هو أنه لا يقرأ القيمة المقابلة لكل كلمة رئيسية.
⑸ سلسلة القراءة()
يتم تعريف الوظيفة على النحو التالي: function ReadString(const section, Ident, Default: string): string;
تقوم هذه الدالة بإرجاع قيمة الكلمة الأساسية المقابلة لاسم العقدة بقيمة قسم المعلمة واسم الكلمة الأساسية بقيمة معرف المعلمة (على سبيل المثال، قيمة الكلمة الأساسية ARIALBI.TTF في القسم [قائمة خطوط True Type] هو 67). في حالة عدم وجود الكلمة الأساسية في العقدة أو القسم المحدد، تقوم الدالة بإرجاع القيمة الافتراضية للمعلمة Default. القيمة التي تم إرجاعها هي بيانات سلسلة.
عندما لا يكون نوع بيانات قيمة الكلمة الأساسية في العقدة المحددة سلسلة، يمكنك استخدام وظيفة العضو ReadInteger() لقراءة قيمة عددية ووظيفة العضو ReadBool() لقراءة قيمة منطقية.
⑹ سلسلة الكتابة ()
يتم تعريف الإجراء على النحو التالي: الإجراء WriteString(const section, Ident, Value: string);
تقوم هذه العملية بتعيين قيمة الكلمة الأساسية حيث تكون قيمة المعلمة القسم هي اسم العقدة وقيمة معرف المعلمة هي اسم الكلمة الأساسية إلى قيمة قيمة المعلمة. تقوم هذه العملية بتعيين بيانات السلسلة.
عند وجود كل من العقدة والكلمة الأساسية المحددة، يتم استخدام قيمة القيمة لاستبدال القيمة الأصلية؛ إذا كانت العقدة المحددة غير موجودة، تتم إضافة العقدة تلقائيًا إلى ملف التهيئة المرتبط، وتكون قيمة العقدة هي قيمة في قسم المعلمة، تتم إضافة الكلمة الأساسية تلقائيًا تحت العقدة. اسم الكلمة الأساسية هو قيمة معرف المعلمة، والقيمة المقابلة للكلمة الأساسية هي قيمة قيمة المعلمة غير موجود، تتم إضافة الكلمة الأساسية تلقائيًا ضمن العقدة. اسم الكلمة الأساسية هو قيمة معرف المعلمة، والقيمة المقابلة لهذه الكلمة الأساسية هي قيمة قيمة المعلمة.
لتعيين قيمة عددية، قم باستدعاء دالة العضو WriteInteger()؛ واستخدم دالة العضو WriteBool() لتعيين قيمة منطقية.
بمعرفة وظائف الوظائف المذكورة أعلاه، ليس من الصعب إنشاء ملف تهيئة أو قراءته وكتابته. فيما يلي مثال عملي لتوضيح طريقة قراءة ملف التهيئة، والخطوات هي كما يلي:
⒈ ضع مربعي قائمة مدمجين باسم sectionComboBox وIdentComboBox في النموذج الذي يحتاج إلى قراءة وكتابة ملف التهيئة. يقوم sectionComboBox بتخزين اسم العقدة ويقوم IdentComboBox بتخزين اسم المفتاح للعقدة المحددة. يقوم مربع الإدخال المسمى IdentValueEdit بتخزين قيمة الكلمة الأساسية المقابلة. يمكن استخدام زر أمر التعديل المسمى CmdChang لتعديل قيمة الكلمة الأساسية. بعد التعديل، استخدم زر أمر التخزين المسمى CmdSave لحفظ قيمة الكلمة الأساسية المعدلة في ملف التهيئة المرتبط. يتم تعيين اسم الوحدة المطابق للنموذج على IniUnit، ويتم تعيين اسم النموذج على IniForm، ويكون تخطيط النموذج كما هو موضح في الشكل 1 أدناه:
⒉ في جزء الواجهة من وحدة IniUnit، استخدم inifiles للإشارة إلى اسم الوحدة المحدد بواسطة فئة TiniFile المراد الرجوع إليها. وقم بتعريف كائن فئة TiniFile في جزء وصف المتغير، مثل
فار IniFile: TiniFile;
⒊ قم بإنشاء إجراء حدث OnCreate للنموذج. استخدم وظيفة إنشاء عضو من فئة TIniFile لإنشاء كائن TIniFile، واستخدم هذا الكائن لقراءة وكتابة ملف تهيئة rdfnt.ini في دليل d:ucdos، وقراءة جميع العقد الموجودة في ملف التهيئة في مربع قائمة مجموعة sectionComboBox من خلال وظيفة العضو ReadSections()، استخدم وظيفة العضو ReadSection() لقراءة كافة الكلمات الأساسية في العقدة الأولى في IdentComboBox في مربع القائمة المدمج، استخدم الدالة العضو ReadString() لإرسال قيمة الكلمة الأساسية الأولى إلى مربع الإدخال IdentValueEdit.
⒋ قم بإنشاء عملية حدث OnChange لمربع القائمة المدمج في sectionComboBox. عند تحديد عناصر مختلفة في مربع القائمة (أي أسماء العقد المختلفة)، استخدم وظيفة العضو ReadSection() لقراءة كافة الكلمات الأساسية في العقدة المحددة في مربع القائمة المدمج IdentComboBox، واستخدم وظيفة العضو ReadString() للقراءة الأول يتم إرسال قيمة الكلمة الأساسية إلى مربع الإدخال IdentValueEdit.
⒌ قم بتأسيس عملية حدث OnChange لمربع قائمة المجموعة IdentComboBox. عند تحديد عناصر مختلفة (أي، أسماء كلمات أساسية مختلفة) في مربع القائمة، استخدم الدالة العضو ReadString() لإرسال قيمة الكلمة الأساسية إلى مربع الإدخال IdentValueEdit.
⒍ قم بإنشاء عملية حدث OnClick لزر الأمر CmdChang. اجعل المحتوى الموجود في مربع إدخال IdentValueEdit قابلاً للتعديل (لا يمكن تعديل مربع إدخال IdentValueEdit دون الضغط على زر الأمر)، وقم بتعيين زر الأمر CmdSave ليكون صالحًا، بحيث يمكن تخزين قيمة الكلمة الأساسية المعدلة في ملف التهيئة المرتبط.
⒎ قم بإنشاء عملية حدث OnClick لزر الأمر CmdSave. إذا تغيرت قيمة الكلمة الأساسية، قم باستدعاء دالة العضو WriteString() لحفظ قيمة الكلمة الأساسية المعدلة على القرص.
⒏ قم بإنشاء إجراء حدث OnDestroy للنموذج. عند فشل النموذج، يتم تحرير كائن TIniFile الذي تم إنشاؤه لتحرير موارد النظام التي يستخدمها الكائن.
عند هذه النقطة، بعد تشغيل المشروع، يمكن متابعة قراءة ملف التهيئة وكتابته بسلاسة. بالطبع، يمكنك أيضًا استخدام وظيفة العضو EraseSection () لحذف القسم المحدد، ويمكنك أيضًا استخدام وظيفة العضو RemoveKey () لحذف الكلمة الأساسية المحددة، نظرًا للمساحة المحدودة، لن أعرضها بالتفصيل هنا. إذا كنت مهتمًا، يمكنك الرجوع إلى تعليمات استخدام دلفي.
وفيما يلي الكود المصدري لهذه الوحدة:
وحدة إينيوت؛
واجهة
الاستخدامات
Windows، الرسائل، SysUtils، الفئات، الرسومات، عناصر التحكم، النماذج، مربعات الحوار،
ستدكترلس، إينيفيلز؛
يكتب
TIniForm = فئة (TForm)
قسمComboBox: TComboBox؛
التسمية 1: TLabel؛
كمدساف: تيبوتون؛
كمدتشانغ: تيبوتون؛
IdentComboBox: TComboBox;
IdentValueEdit: TEdit;
التسمية 2: TLabel؛
التسمية 3: TLabel؛
الإجراء FormCreate(Sender: TObject);
الإجراء sectionComboBoxChange(Sender: TObject);
إجراء FormDestroy(Sender: TObject);
الإجراء CmdChangClick(Sender: TObject);
الإجراء CmdSaveClick(Sender: TObject);
الإجراء IdentComboBoxChange(Sender: TObject);
خاص
{تصريحات خاصة}
عام
{التصريحات العامة}
نهاية؛
فار
إينيفورم: تينيفورم؛
{قراءة وكتابة ملفات تهيئة Windows من خلال فئة TIniFile في دلفي}
إينيفيل: تينيفيل؛
تطبيق
{$R *.DFM}
الإجراء TIniForm.FormCreate(Sender: TObject);
يبدأ
{ استخدم وظيفة إنشاء عضو لفئة TIniFile لإنشاء زوج TIniFile
Object، يتم استخدام هذا الكائن لقراءة وكتابة ملف rdfnt.ini في الدليل d:ucdos.
إذا كان الملف المراد قراءته وكتابته موجودًا في دليل Windows (مثل system.ini)،
يمكنك كتابة اسم الملف مباشرة دون تحديد المسار }
IniFile:=TIniFile.Create('d:ucdos dfnt.ini');
{جميع محتويات ملف التهيئة system.ini المرتبط بكائن TIniFile
يتم إرسال أسماء الأقسام التي تحتوي على أقسام (أي الجزء المحاط بأقواس []) إلى المجموعة المنسدلة
مربع قائمة التحرير والسرد
System.SectionComboBox.Clear;
IniFile.ReadSections(SectionComboBox.Items);
{اختر اسم القسم الأول من ملف system.ini}
sectionComboBox.ItemIndex:=0;
SectionComboBoxChange(Sender);
CmdSave.Enabled:=False;
نهاية؛
{العناصر المقابلة في القسم المحدد في مربع قائمة التحرير والسرد IniComboBox
يتم إرسال المتغيرات والقيم المقابلة إلى محرر النصوص متعدد الأسطر IniMemo}
الإجراء TIniForm.SectionComboBoxChange(Sender: TObject);
يبدأ
IdentComboBox.Clear;
IniFile.ReadSection(SectionComboBox.Text,
IdentComboBox.Items);
IdentComboBox.ItemIndex:=0;
IdentComboBoxChange(Sender);
نهاية؛
الإجراء TIniForm.IdentComboBoxChange(Sender: TObject);
يبدأ
IdentValueEdit.Enabled:=False;
{اقرأ قيمة الكلمة الرئيسية المحددة}
IdentValueEdit.Text:=
IniFile.ReadString(SectionComboBox.Text،
IdentComboBox.Text,');
نهاية؛
الإجراء TIniForm.CmdChangClick(Sender: TObject);
يبدأ
CmdSave.Enabled:=True;
IdentValueEdit.Enabled:=True;
IdentValueEdit.SetFocus;
نهاية؛
الإجراء TIniForm.CmdSaveClick(Sender: TObject);
يبدأ
إذا IdentValueEdit.Modified ثم تبدأ
IniFile.WriteString(SectionComboBox.Text،
إيدينت كومبو بوكس. نص،
IdentValueEdit.Text);
نهاية؛
IdentValueEdit.Enabled:=False;
CmdSave.Enabled:=False;
نهاية؛
الإجراء TIniForm.FormDestroy(Sender: TObject);
يبدأ
IniFile.Free {تحرير الكائن الذي تم إنشاؤه}
نهاية؛
نهاية.
لقد نجحت الطريقة المذكورة أعلاه في تصحيح الأخطاء باستخدام Delphi 3.0 ضمن نظام التشغيل Windows 95.