ملفات INI هي ملفات نصية تُستخدم لتخزين بيانات تكوين التطبيق.
على الرغم من شبابيك توصي باستخدام سجل Windows لتخزين بيانات التكوين الخاصة بالتطبيق ، في كثير من الحالات ، ستجد أن ملفات INI توفر طريقة أسرع للوصول إلى إعدادات البرنامج. يستخدم Windows نفسه حتى ملفات INI ؛ desktop.ini و boot.ini كونها مثالين فقط.
أحد الاستخدامات البسيطة لملفات INI كآلية لحفظ الحالة هو حفظ حجم النموذج وموقعه إذا كنت تريد إعادة ظهور النموذج في موضعه السابق. بدلا من البحث من خلال الكل قاعدة بيانات المعلومات للعثور على الحجم أو الموقع ، يتم استخدام ملف INI بدلاً من ذلك.
تنسيق ملف INI
ملف إعدادات التهيئة أو التهيئة (.INI) هو ملف نصي بحد 64 كيلوبايت مقسم إلى أقسام ، يحتوي كل منها على صفر أو أكثر من المفاتيح. يحتوي كل مفتاح على قيم صفرية أو أكثر.
إليك مثال:
[اسم القسم]
keyname1 = القيمة
؛تعليق
keyname2 = القيمة
أسماء الأقسام محاطة بأقواس مربعة ويجب أن تبدأ في بداية السطر. أسماء الأقسام والمفاتيح غير حساسة لحالة الأحرف (لا يهم الحالة) ، ولا يمكن أن تحتوي على أحرف تباعد. ال اسم المفتاح متبوعًا بعلامة يساوي ("=") ، محاطة اختياريًا بأحرف تباعد ، والتي يتم تجاهلها.
إذا ظهر نفس القسم أكثر من مرة في نفس الملف ، أو إذا ظهر نفس المفتاح أكثر من مرة في نفس القسم ، فإن آخر ظهور يسود.
يمكن أن يحتوي المفتاح على خيطأو عدد صحيح أو منطقيالقيمة.
دلفي يستخدم IDE تنسيق ملف INI في كثير من الحالات. فمثلا، ملفات .DSK (إعدادات سطح المكتب) تستخدم تنسيق INI.
فئة TIniFile
يوفر دلفي TIniFile صنف، أعلن في inifiles.pas وحدة ، مع طرق لتخزين واسترداد القيم من ملفات INI.
قبل العمل باستخدام أساليب TIniFile ، تحتاج إلى إنشاء مثيل للفئة:
الاستخدامات انفيليسس.
...
فار
IniFile: TIniFile ؛
ابدأ
IniFile: = TIniFile. إنشاء ('myapp.ini') ؛
يقوم الكود أعلاه بإنشاء كائن IniFile ويعين 'myapp.ini' إلى الخاصية الوحيدة للفئة - the خاصية FileName —تُستخدم لتحديد اسم ملف INI الذي ستستخدمه.
رمز كما هو مكتوب أعلاه يبحث عن myapp.ini ملف في \شبابيك الدليل. توجد طريقة أفضل لتخزين بيانات التطبيق في مجلد التطبيق - ما عليك سوى تحديد اسم المسار الكامل للملف خلق طريقة:
// ضع INI في مجلد التطبيق ،
// السماح لها باسم التطبيق
// و 'ini' للتمديد:
iniFile: = TIniFile. إنشاء (ChangeFileExt (التطبيق. ExeName ، '. ini')) ؛
القراءة من INI
تحتوي فئة TIniFile على العديد من طرق "القراءة". يقرأ ReadString أ قيمة السلسلة من مفتاح ، ReadInteger. يتم استخدام ReadFloat وما يماثله لقراءة رقم من مفتاح. جميع طرق "القراءة" لها قيمة افتراضية يمكن استخدامها إذا لم يكن الإدخال موجودًا.
على سبيل المثال ، يتم التصريح عن ReadString كما يلي:
وظيفة قراءة سلسلة (مقدار ثابت المقطع ، التعريف ، الافتراضي: سلسلة): سلسلة؛ تجاوز;
اكتب إلى INI
يحتوي TIniFile على طريقة "كتابة" مقابلة لكل طريقة "قراءة". هم WriteString ، WriteBool ، WriteInteger ، إلخ.
على سبيل المثال ، إذا أردنا أن يتذكر البرنامج اسم آخر شخص استخدمه ، ومتى كان ، وما هي إحداثيات النموذج الرئيسية ، فقد ننشئ قسمًا يسمى المستخدمون، كلمة رئيسية تسمى الاخير, تاريخ لتتبع المعلومات ، ودعا قسم تحديد مستوى مع مفاتيح أعلى, اليسار, عرضو ارتفاع.
project1.ini
[المستعمل]
الأخير = Zarko Gajic
التاريخ = 01/29/2009
[تحديد مستوى]
أعلى = 20
اليسار = 35
العرض = 500
الارتفاع = 340
لاحظ أن المفتاح المسمى الاخير يحمل قيمة سلسلة ، تاريخ يحمل قيمة TDateTime ، وجميع المفاتيح في تحديد مستوى القسم يحمل قيمة عددية.
يعد حدث OnCreate الخاص بالنموذج الرئيسي المكان المثالي لتخزين التعليمات البرمجية المطلوبة للوصول إلى القيم في ملف التهيئة الخاص بالتطبيق:
إجراء TMainForm. FormCreate (المرسل: TObject) ؛
فار
appINI: TIniFile ؛
LastUser: سلسلة؛
LastDate: TDateTime ؛
ابدأ
appINI: = TIniFile. إنشاء (ChangeFileExt (التطبيق. ExeName ، '. ini')) ؛
محاولة
// إذا لم يكن هناك مستخدم آخر يُرجع سلسلة فارغة
LastUser: = appINI.ReadString ('User'، 'Last'، '')؛
// إذا لم يكن هناك تاريخ آخر يعود إلى تاريخ اليوم
LastDate: = appINI.ReadDate ('User'، 'Date'، Date) ؛
// إظهار الرسالة
ShowMessage ('تم استخدام هذا البرنامج سابقًا بواسطة' + LastUser + 'على' + DateToStr (LastDate)) ؛
الأعلى: = appINI.ReadInteger ('Placement'، 'Top'، Top) ؛
اليسار: = appINI.ReadInteger ("الموضع" ، "اليسار" ، اليسار) ؛
العرض: = appINI.ReadInteger ("الموضع" ، "العرض" ، العرض) ؛
الارتفاع: = appINI.ReadInteger ("الموضع" ، "الارتفاع" ، الارتفاع) ؛
أخيرا
appINI.Free ؛
النهاية;
النهاية;
يعتبر الحدث OnClose الخاص بالنموذج الرئيسي مثاليًا لـ حفظ INI جزء من المشروع.
إجراء TMainForm. FormClose (المرسل: TObject ؛ فار العمل: TCloseAction) ؛
فار
appINI: TIniFile ؛
ابدأ
appINI: = TIniFile. إنشاء (ChangeFileExt (التطبيق. ExeName ، '. ini')) ؛
محاولة
appINI.WriteString ('User'، 'Last'، 'Zarko Gajic')؛
appINI.WriteDate ('User'، 'Date'، Date) ؛
مع appINI ، MainForm فعل
ابدأ
WriteInteger ("الموضع" ، "الأعلى" ، الأعلى) ؛
WriteInteger ("موضع" ، "يسار" ، يسار) ؛
WriteInteger ("الموضع" ، "العرض" ، العرض) ؛
WriteInteger ("الموضع" ، "الارتفاع" ، الارتفاع) ؛
النهاية;
أخيرا
appIni. مجانا؛
النهاية;
النهاية;
أقسام المعهد
ال EraseSection يمحو قسمًا كاملاً من ملف INI. قراءة القسم و اقرأ الأقسام املأ كائن TStringList بأسماء جميع الأقسام (وأسماء المفاتيح) في ملف INI.
قيود وسلبيات INI
يستخدم فئة TIniFile واجهة برمجة تطبيقات Windows والذي يفرض حدًا يصل إلى 64 كيلوبايت على ملفات INI. إذا كنت بحاجة إلى تخزين أكثر من 64 كيلوبايت من البيانات ، فيجب استخدام TMemIniFile.
قد تنشأ مشكلة أخرى إذا كان لديك قسم بأكثر من 8 كيلو قيمة. تتمثل إحدى طرق حل المشكلة في كتابة نسختك الخاصة من طريقة ReadSection.