استخدام فئة TINIFile لحفظ إعدادات المستخدم
#1
السلام عليكم ورحمة الله وبركاته

خاصية هامة للغاية وعلامة جيدة علي مهارة المبرمج هي قدرة برنامجه علي حفظ إعدادت المستخدم وتحميلها عند بدء البرنامج في كل مرة
هذه الفئة تسهل العملية بشكل كبير بدلا من أن يضطر المبرمج لأستخدام ملفات xml مثلا
هذه الوحدة من ضمن مكتبات Free Component Libirary FCL للمترجم FreePascal

يتم حفظ اﻷعدادت في ملف نصي بامتداد ini في مكان يحدده المبرمج

* نتعرف أولا علي بنية ملف ini اللذي تحفظ فيه اﻷعدادت ويتكون من أقسام وكل قسم يحتوي علي أزواج كالتالي
كود :
[Section 1] key_1 = Value_1 key_2 = Value_2 key_3 = Value_3 [Section2] key_4 = Value_4 key_5 = Value_5 key_6 = Value_6

* كيفية الاستخدام
أولا عليك اضافة الوحدة INIFiles إلي قسم uses ثم إنشاء كائن من الفئة TINIFile
كود :
var INI : TINIFile; begin INI := TINIFile.Create('C:\config.ini');
الجزء من الكود السابق حددنا فيه مسار الملف config.ini اللذي فيه الأعدادات
ليس عليك أن تنشئه يدويا

لقراءة قيمة من الملف

كود :
myValue_1 = INI.ReadString('Section1','key_1','');
لاحظ أننا استخدمنا ReadString هناك أيضا ReadINteger , ReadFloat,ReadBool حسب نوع البيانات اللتي قمت بحفظها

يتم تمرير ثلاث معاملات للدالة :
  1. اسم القسم Section1
  2. اسم المفتاح Key_1
  3. قيمة افتراضية في حالة عدم وجود قسم أو مفتاح باﻷسم المذكور

بمعني أنه إذا كان لا يوجد قسم اسنه Section1 أو مفتاح باسم key_1 سيتم اسناد القيمة '' للمتغير myValue_1

وبالمثل يمكنك إضافة أقسام أو مفاتيح جديدة أو حتي انشاء ملف ini غير موجود بالدوال
WriteString , WriteINteger , WriteFloat , WriteBool

كود :
INI.WriteString('Section1','key_1',value_11);
هنا سيتم استبدال قيمة key_1 في الملف من value_1 إلي value_11

مثال :
PHP كود :
program Project1;

{
$mode objfpc}{$H+}

uses
  
{$IFDEF UNIX}{$IFDEF UseCThreads}
  
cthreads,
  {
$ENDIF}{$ENDIF}
  
Classes,IniFiles
  
{ you can add units after this };
var
  
INI:TIniFile;
  
name,mail : string;
  
age:Integer;
  
married:Boolean;

procedure ReadData;
begin
     name 
:= INI.ReadString('General','Name','Ahmed');
     
mail := INI.ReadString('General','EMail','test@example.com');
     
age:=INI.ReadInteger('General','Age',31);

     
WriteLn(name);
     
WriteLn(mail);
     
WriteLn(age);

end;

procedure WriteData;
begin
     INI
.WriteString('General','Name','Ahmed Atalla');
     
INI.WriteString('General','EMail','me@mysite.com');
     
INI.WriteInteger('General','Age',50);
end;
begin
  INI
:=TIniFile.Create('config.ini'); //will save the config file in the project Directory
  //WriteData;
  
ReadData;
end. 

عند تشغيل المثال لأول مرة كما هو حيث لا وجود لملف config.ini في مجلد المشروع فإن دالة ReadData سوف تطبع القيم اﻷفتراضية اللتي تم تمريرها

كود :
Ahmed test@example.com 31
أعد تشغيل المثال بعد إزالة علامة الـ comment من علي دالة WriteData سيتغير الناتج إلي القيم اللتي تم حفظها في الملف config.ini
كود :
Ahmed Atalla me@mysite.com 50

وستجد ملف config.ini في مجلد المشروع يمكنك فتحه بأي برنامج للنصوص واﻷطلاع علي بنيته

المرجع
كود :
http://wiki.freepascal.org/Using_INI_Files/ar
تم بحمد الله
[-] كل من 1 user says قال شكرا ل a.atalla على المشاركة المفيدة
  • Rever7eR
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم