مثير للإعجاب

كيفية تحرير ملفات INI في دلفي

كيفية تحرير ملفات INI في دلفي

ملفات INI هي ملفات نصية تستخدم لتخزين بيانات تكوين التطبيق.

على الرغم من أن Windows يوصي باستخدام "سجل Windows" لتخزين بيانات التكوين الخاصة بالتطبيق ، في كثير من الحالات ، ستجد أن ملفات INI توفر طريقة أسرع للبرنامج للوصول إلى إعداداته. ويندوز نفسه حتى يستخدم ملفات INI؛desktop.ini و BOOT.INIكونه مجرد مثالين.

يتمثل أحد الاستخدامات البسيطة لملفات INI كآلية لحفظ الحالة في حفظ حجم النموذج وموقعه إذا كنت تريد أن يظهر النموذج مرة أخرى في موضعه السابق. بدلاً من البحث من خلال قاعدة بيانات كاملة من المعلومات للعثور على الحجم أو الموقع ، يتم استخدام ملف INI بدلاً من ذلك.

تنسيق ملف INI

ملف التهيئة أو إعدادات التكوين (.INI) هو ملف نصي به حد 64 كيلو بايت مقسم إلى أقسام ، يحتوي كل منها على صفر أو أكثر من المفاتيح. يحتوي كل مفتاح على قيم صفرية أو أكثر.

إليك مثال:

اسم القسم
keyname1 = قيمة
؛تعليق
keyname2 = قيمة

أسماء الأقسام محاط بأقواس مربعة ويجب أن يبدأ في بداية السطر. أسماء الأقسام والمفاتيح غير حساسة لحالة الأحرف (لا يهم الحالة) ، ولا يمكن أن تحتوي على أحرف تباعد. ال اسم المفتاح متبوعًا بعلامة مساوية ("=") ، محاطة اختياريًا بمسافات تباعد ، يتم تجاهلها.

إذا ظهر نفس القسم أكثر من مرة في نفس الملف ، أو إذا ظهر نفس المفتاح أكثر من مرة في نفس القسم ، فحينئذٍ يسود الحدث الأخير.

يمكن أن يحتوي المفتاح على سلسلة أو عدد صحيح أو منطقية القيمة.​

يستخدم دلفي IDE تنسيق ملف INI في العديد من الحالات. على سبيل المثال ، تستخدم ملفات .DSK (إعدادات سطح المكتب) تنسيق INI.

فئة TIniFile

دلفي يوفر TIniFile الطبقة ، أعلن في inifiles.pas وحدة ، مع طرق لتخزين واسترداد القيم من ملفات INI.

قبل العمل مع أساليب TIniFile ، تحتاج إلى إنشاء مثيل للفئة:

الاستخدامات inifiles.

فار
IniFile: TIniFile؛
ابدأ
IniFile: = TIniFile.Create ('myapp.ini')؛

تقوم التعليمة البرمجية أعلاه بإنشاء كائن IniFile وتعيين "myapp.ini" للخاصية الوحيدة للفئة - خاصية FileName - تستخدم لتحديد اسم ملف INI الذي ستستخدمه.

الرمز كما هو مكتوب أعلاه يبحث عن myapp.ini ملف في شبابيك دليل. توجد طريقة أفضل لتخزين بيانات التطبيق في مجلد التطبيق - ما عليك سوى تحديد اسم المسار الكامل للملف الخاص بـ خلق طريقة:

// ضع INI في مجلد التطبيق ،
/ / اسمح لها اسم التطبيق
// و "ini" للتمديد:

iniFile: = TIniFile.Create (ChangeFileExt (Application.ExeName، '. ini'))؛

قراءة من INI

لدى فئة TIniFile عدة طرق "للقراءة". يقرأ ReadString قيمة سلسلة من مفتاح ، ReadInteger. يستخدم ReadFloat وما شابه ذلك لقراءة عدد من مفتاح. تحتوي جميع أساليب "القراءة" على قيمة افتراضية يمكن استخدامها في حالة عدم وجود الإدخال.

على سبيل المثال ، يتم الإعلان عن ReadString كـ:

وظيفة ReadString (CONST القسم ، الهوية ، الافتراضي: السلسلة): السلسلة ؛ تجاوز;

الكتابة إلى INI

لدى TIniFile أسلوب "الكتابة" المطابق لكل أسلوب "قراءة". هم WriteString ، WriteBool ، WriteInteger ، إلخ.

على سبيل المثال ، إذا أردنا أن يتذكر برنامج ما اسم آخر شخص استخدمه ، ومتى كان ، وما هو إحداثيات النموذج الرئيسي ، فقد نقوم بإنشاء قسم يسمى المستخدمين، الكلمة التي تسمى الاخير, تاريخ لتتبع المعلومات ، وقسم يسمى تحديد مستوى مع المفاتيح أعلىاليسارعرضو ارتفاع.

project1.ini
المستعمل
الأخير = زاركو جاجيتش
تاريخ = 01/29/2009
تحديد مستوى
أعلى = 20
اليسار = 35
عرض = 500
ارتفاع = 340

لاحظ أن المفتاح اسمه الاخير يحمل قيمة سلسلة ، تاريخ يحمل قيمة TDateTime ، وجميع المفاتيح في تحديد مستوى قسم عقد قيمة عدد صحيح.

يعد حدث OnCreate في النموذج الرئيسي هو المكان المثالي لتخزين الكود المطلوب للوصول إلى القيم في ملف تهيئة التطبيق:

إجراء TMainForm.FormCreate (المرسل: TObject) ؛
فار
appINI: TIniFile؛
LastUser: string؛
LastDate: TDateTime؛
ابدأ
appINI: = TIniFile.Create (ChangeFileExt (Application.ExeName، '. ini')))؛
  محاولة
    // إذا لم يقم أي مستخدم آخر بإرجاع سلسلة فارغة
LastUser: = appINI.ReadString ('المستخدم' ، 'الأخير' ، ") ؛
    // إذا لم يكن هناك تاريخ أخير ، فاسترجع اليوم
LastDate: = appINI.ReadDate ('المستخدم' ، 'التاريخ' ، التاريخ) ؛
    // اظهر الرسالة
ShowMessage ('تم استخدام هذا البرنامج مسبقًا بواسطة' + LastUser + 'on' + DateToStr (LastDate)) ؛
أعلى: = appINI.ReadInteger ('الموضع' ، 'أعلى' ، أعلى) ؛
يسار: = appINI.ReadInteger ('الموضع' ، 'يسار' ، يسار) ؛
العرض: = appINI.ReadInteger ('الموضع' ، 'العرض' ، العرض) ؛
الارتفاع: = appINI.ReadInteger ('الموضع' ، 'الارتفاع' ، الارتفاع) ؛
  أخيرا
appINI.Free.
  النهاية;
النهاية;

الحدث OnClose النموذج الرئيسي مثالية ل حفظ INI جزء من المشروع.

إجراء TMainForm.FormClose (المرسل: TObject؛ فار العمل: TCloseAction) ؛
فار
appINI: TIniFile؛
ابدأ
appINI: = TIniFile.Create (ChangeFileExt (Application.ExeName، '. ini')))؛
محاولة
appINI.WriteString ('المستخدم' ، 'الأخير' ، 'Zarko Gajic') ؛
appINI.WriteDate ('المستخدم' ، 'التاريخ' ، التاريخ) ؛
    مع appINI ، MainForm فعل
    ابدأ
WriteInteger ("الموضع" ، "أعلى" ، أعلى) ؛
WriteInteger ("الموضع" ، "اليسار" ، اليسار) ؛
WriteInteger ("الموضع" ، "العرض" ، العرض) ؛
WriteInteger ("التنسيب" ، "الارتفاع" ، الارتفاع) ؛
    النهاية;
  أخيرا
appIni.Free.
  النهاية;
النهاية;

أقسام INI

ال EraseSection يمحو قسم كامل من ملف INI. ReadSection و ReadSections تعبئة كائن TStringList بأسماء جميع المقاطع (وأسماء المفاتيح) في ملف INI.

قيود INI & سلبيات

تستخدم فئة TIniFile واجهة برمجة تطبيقات Windows التي تفرض حدًا قدره 64 كيلو بايت على ملفات INI. إذا كنت بحاجة إلى تخزين أكثر من 64 كيلو بايت من البيانات ، يجب عليك استخدام TMemIniFile.

قد تنشأ مشكلة أخرى إذا كان لديك قسم بأكثر من 8 كيلو قيمة. إحدى طرق حل المشكلة هي كتابة نسختك الخاصة من طريقة ReadSection.

شاهد الفيديو: 019-Working With ini Files in Delphi إنشاء ملف لإعدادات البرنامج (أغسطس 2020).