الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مقدمة الى الريجستري في دلفي

مغلق
بدأه magellan في 7 يونيو 2006 · 7 رد · 3,352 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سم الله الرحمن الرحيم

مقدمة الى الريجستري

لا شك أن الريجستري يلعب دورا مهما في نظام التشغيل ويندوز!

ماذا تتصور لو لم يكن الريجستري؟ يالتأكيد..أن عمل تخزين واستدعاء البيانات سيواجه صعوبة حقيقية ومشكلة عالقة.

لا يخفى عليكم أن دلفي تتيح لكم امكانية التعامل مع الريجستري بصورة سهلة وقوية في نفس الوقت!

فلا داعي لاستخدام دوال API الخاصة بالريجستري كما في++C أو في الفجوال بيسك!

إن دوال الريجستري الخاصة بدلفي تتيح اليوم إمكانية التعامل مع الريجستري بعيدا عن دوالAPI المعقدة.

أنت اليوم كمبرمج دلفي تفرض نفسك على جميع مبرمجي العالم بأي لغة كانوا يبرمجون!!

خصوصا بعد إصدار دلفي 8 وما فوقها والتي دمجت لغتين في بيئة واحدة!

بإمكانك البرمجة لـ.NET اليوم باستخدام دلفي نفسها!!

فلا تتعب نفسك وتتعلم احدى لغات الدت نت فدلفي هي دوت نت وفي نفس الوقت هي VCL Application.

ستتعلم كيفية إنشاء البرامج التفاعلية لحفظ البيانات في الريجستري وستتعلم طريقة انشاء برنامج يوفر امكانية ادراج صورة الى شريط الأدوات في المستكشف وجهاز الكمبيوتر.

ما هو الريجستري؟

سؤال لطيف ووجيه في نفس الوقت!!

أجيب على هذا السؤال بطريقة مفصلة يفهمها القريب والبعيد!

هناك برامج عديدة تستخدم الريجستري كأداة لتخزين البيانات التي تستخدمها بشكل متكرر.

مثلا: تذكير اسم المستخدم؛حفظ آخر مجلد تم الوصول اليه؛وجميع ما هو من قبيل هذه الأشياء.وكل هذه الأشياء هي للتذكير.

لأمثل بصورة أوضح لنفرض أن لديك مثل برنامج MSN Messenger

يستخدم اسم مستخدم وكلمة مرور

إذا لابد للمستخدم أن يكتب اسم المستخدم وكلمة المرور لكي يستطيع الدخول الى البرنامج.

أما أنت كمبرمج فتريد حفظ اسم المستخدم كلما فتح المستخدم البرنامج.

كبرنامج المسنجر تماما.

اذا لابد لك أن تستخدم الريجستري..!

طبعا هذا كمثال بسيط للغايةعلى تخزين المعلومات واستدعائها في Edit وهناك عدة برامج عملاقة تستخدم الريجستري كجزء أساسي في برنامجها

لكن نكتفي بهذا المثال البسيط ولا نعقد الأمور.

والآن عرفنا أن الريجستري هو أداة لتخزين البيانات...

تاريخ الريجستري..

إن الريجستري حديث العهد نسبيا..

أول مرة ظهر فيها الريجستري هي عندما ظهر نظام التشغيل Windows 95 وكان الهدف من وراء الريجستري هو توفير أداة فعالة لحفظ البيانات والوصول اليها مجددا

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

لكنك تتساءل الآن كيف كان يتم تخزين البيانات سابقا؟؟!

سابقا كان يتم تخزين البيانات بطريقة ملف الـ ini كما في Windows 3.11 فهناك عدة ملفات خاصة بنظام التشغيل مثل System.ini و Win.ini

حيث يتم حفظ البيانات في هذان الملفان.. ولا يخفى عليك أن ملفات الـ ini إلى الآن تستخدم ولكنها تستخدم لطرق خاصة مثلا حفظ أسماء الملفات المفتوحة مؤخرا وغيرها من الأمور الأخرى التي لا تحتاج الى ريجستري

وملفات الـ ini هذه هي ملفات خاصة مرتبطة بنفس البرنامج ولا علاقة لها بتظام التشغيل يعني بعبارة أخرى هي لا تستخدم ملفات الويندوز System.ini و Win.ini.

ومن الدوافع التي أظهرت الريجستريهي عدم قدرة تلك الملفات على تخزين البيانات الكبيرة والتي تستخدم بكثرة!!

لأن الملفين السابقين مختصين بنظام التشغيل ذاته وتقلع هذه الملفات عند اقلاع نظام التشغيل وبالتالي سوف تقلع جميع البيانات المكتوبة في هذه الملفات بشكل تلقائي مما يسبب بطئا واضحا في نظام التشغيل وأيضا في التعامل معه.

كيف أستخدم الريجستري؟

إن الريجستري هو برنامج مرفق مع نظام التشغيل ويندوز وكما ذكرنا سابقا فإنه أداة فعالة لتحزين البيانات واستدعائها من خلال البرامج.

وإذا فتحنا الريجستري وذلك من خلال إبدأ>تشغيل>ثم كتابة الأمر RegEdit فسوف تظهر الشاشة التالية:

d9591be13c.jpg

يتكون الريجستري من مفاتيح رئيسية ومفاتيح فرعية وهذه المفاتيح متوفرة على الجهة اليمنى من الريجستري وكل هذه مفاتيح رئيسية مصنفة حسب البيانات المخزنة فيها

مثلا مفتاح HKEY_CLASSIC_ROOT وهو مفتاح رئيسي تتفرع منه مفاتيح فرعية خاصة بلواحق الملفات مثلا اللاحقة bmp والخاصة بملفات الـ BitMap

والتي تعمل تحت برنامج الرسام فقد أدرج اسم هذه اللاحقة بالإضافة الى مسار برنامج الرسام وعندما يصادف الويندوز أي لاحقة بهذا الاسم فسوف ينتقل تلقائيا ويشغل برنامج الرسام ليظهر هذا الملف .. وإلخ

أما بالنسبة للمفاتيح الرئيسية الأخرى فهي بهذا الشكل:

*HKEY_CLASSIC_ROOT: مفتاح رئيسي خاص بلواحق الملفات كما ذكرنا تحفظ في هذا المفتاح الرئيسي.

*HKEY_CURRENT_USER: مفتاح رئيسي يحتفظ بمعلومات البرامج الأخرى مثلا معلومات ويندوز ستجدها في هذا المفتاح وهو مصنف حسب المفاتيح

مثلا Software يندرج تحته البرامج/الشركات المستخدمة في جهازك.

*HKEY_LOCAL_MACHINE: وهو مفتاح خاص بمعلومات جهازك وماذا يحتوي من قطع وإلخ..من معلومات أخرى.

*HKEY_USERS: مفتاح رئيسي خاص بمستخدمي الكنبيوتر.

*HKEY_CURRENT_CONFIG: مفتاح خاص بهئية الكمبيوتر.

الآن نأتي الى المفاتيح الفرعية أنظر الشكل التالي:

25bc687699.jpg

ألق نظرة على المفاتيح الرئيسية وكيف تتفرع منها مفاتيح فرعية..

المفاتيح الرئيسية تسمى Key والمفاتيح الفرعية تسمى Sub Key.

وهناك قيم(Value)وهي موجودة في المفاتيح الرئيسية والمفاتيح الفرعية ويمكن للقيم أن تأخذ أيا من أنواع البيانات التالية:

*سلسلة حرفية (String)

*أرقام ثنائية(Binary)

*نوع أرقام(Dword)

*سلسلة متعددة(Multi-String Value)

*سلسلة توسعية(Expandable)

والقيم هي أساس الريجستري حيث جميع البيانات تخزن في القيم مثلا نجعل قيمة بعنوان UserName تحفظ اسم المستخدم وهذا بالنسبة الى القيم الأخرى.

وللوضوح الأكثر انظر الشكل التالي:

f3c11544cf.jpg

وبناء على ذلك فالقيمة هي الأساس والتي نستخدمها لتخزين البيانات ويمكن للقيمة أن تشمل نوع واحد في نفس الوقت فقط واسم لا يتكرر.

هذا كل ما في الريجستري أما الأشياء البقية والاحترافية فلا يسع الوقت لذكرها

يتبع...

#2

بالانتظار

#3

إخبار دلفي بأننا نريد استخدام الريجستري في برنامجنا

ليس من المنطقي كتابة معلومات البرنامج بواسطة ملف txt عادي وهذا ما يفعله الكثير من المبرمجين ولا اعلم لماذا لا يبحث هؤلاء المبرمجين عن طريقة مثلى غير الملفات النصية لتخزين بياناتهم.

وأنا موقن بأن الريجستري هو أفضل بكثير من الملفات النصية لتخزين البيانات!

على كل حال فلست بصدد نقاش هؤلاء.

سأشرح هنا كيف نخبر دلفي بأننا نريد استخدام الريجستري في برنامجنا.

الميزة العظمى في دلفي هي أن نشعرها بأننا نريد استخدام عنصر ما مثلا لاستخدام الريجستري يجب أن نخبر دلفي بأننا نريد استخدام الريجستري وهكذا بالنسبة للأعمال البقية.

وبهذه الطرق نكون قد خففنا من ثقل البرنامج.

أما الآن ... لاخبار دلفي اننا نريد استخدام الريجستري في برنامجنا اتبع الطرق التالية:

1.افتح مشروع جديدمن خلال New<Application

2.انقر نقرا مزودجا على النافذة (Form)لإظهار مستكشف الكود (Code explorer)

3.أكتب التعليمة Registry في القسم uses.

الآن أخبرنا دلفي أننا نريد في برنامجنا لننتقل الآن الى الخطوة التالية.

تعيين المفاتيح(فتح مفاتيح)

كما ذكرنا فإن المفاتيح أساس الريجستري وتنقسم المفاتيح الى قسمين:

* مفاتيح أساسية: وقد مثلنا لها بـ HKEY_CLASSIC_ROOT وقلنا أن المفتاح الأساسي المذكور يكون فيه جميع لواحق الملفات.

* مفاتيح فرعية: وكما ذكرنا فالمفاتيح الفرعية تتفرع من المفاتيح الرئيسية ويمكن وجود أكثر من مفتاح فرعي لكل مفتاح.

أما الآن نأتي لطريقة فتح مفتاح في الريجستري من خلال بيئة دلفي وبعد أن نفتح المفتاح ونعينه يصبح بامكاننا التعامل مع هذا المفتاح وكتابة قيم بداخلة.

لفتح مفتاح ما نقوم بما يلي:

1.أضف زر Button على النافذة.

2.أنقر نقرا مزدوجا على الزر واكتب الكود التالي(مع ملاحظة عدم كتابة الأرقام وقد كتبتها للتوضيح):

1var
2Reg: TRegistry;
3begin
4Reg:= TRegistry.Create;
5Reg.RootKey:= HKEY_CURRENT_USER;
6try
7Reg.OpenKey('Software\Microsoft',False);
8Except;
9end;
10End;

لنأتي الى شرح هذا الكود بالتفصيل:

* السطر1-2:قمنا بتعريف متغير تحت اسم Reg من نوع TRegistry حيث يصبح بامكاننا الوصول الى الريجستري من خلال هذا المتغير والذي يحتفظ بكل عمليات الريجستري من فنح مفاتيح وكتابة قيم وغيرها.

* السطر4:قمنا في هذا السطر بخلق الريجستري وهي طريقة تستخدم بكثرة مع الكائنات يعني يجب عليك خلق الشيء حتى تستفيد منه

فهنا قمنا بخلق الريجستري وتعيينه ومن ثم استخدامه.

* السطر5:قمنا من خلال هذا السطر بفتح المفتاح الرئيسي الذي نريد استخدامه يمكنك بعد كتابة المتغير بهذا الشكل Reg.RootKey

أن تضغط Ctrl+Space لتحصل على جميع المفاتيح الأساسية اختر واحدا منها واضغط Enter.

* السطر6:استخدمنا فيه بلوك المقابلة مع الاستثناء (Except) أو بعبارة أحرى مع الخطأ الذي يحدث فإن لم تدرج هذه التعليمة فسيحدث خطأ عند تشغيل البرنامج.

* السطر7:قمنا من خلال هذا السطر بفتح المفتاح الفرعي الذي نريد استخدامه يمكنك كتابة المسار بأكمله وكما هو مبين فقد كتبت مسار Software\Microsoft

للوصول الى مفتاح Microsoft يعني مع ملاحظة أن تكتب جميع المسار.

* السطر8-9:نهاية بلوك الاستثناء.

الآن قمنا بفتح المفاتيح والوصول اليها وتبقى طريقة كتابة القيم.

كتابة قيم

لكتابة قيمة أو قيم نقوم بالخطوات البسيطة التالية مع ملاحظة أنك قد قمت بالخطوات البسيطة السابقة وأتممتها وبكل صحة كما لا يخفى عليك أن تضيف Edit الى النافذة:

1.أضف هذه الجملة بعد السطر رقم 7 مباشرة:

Reg.WriteString('Test',Edit1.text);

تقوم هذه الجملة بتخزين محتويات الـ Edit تحت قيمة باسم Test الآن نفذ البرنامج واضغط على الزر Button وبعد الضغط عليه انتقل الى الريجستري واذهب الى المفتاح المذكور لترى أن كل ما كتبته في الـ Edit قد ظهر تحت قيمة باسم Test فيها جميع محتويات الـ Edit ويمكنك إستخدام الأنواع التالية أيضا:

* WriteString: كتابة قيمة نصية.

* WriteCurrency: لكتابة قيمة كارانسي.

* WriteBinaryData: لكتابة قيم ثنائية Binary.

* WriteBool: لكتابة قيم الـ Boolean وهي تأخذ True و False.

* WriteDate: لكتابة قيم التاريخ.

* WriteDateTime: لكتابة قيم تاريخ ووقت.

* WriteFloat: لكتابة قيم الـ Float.

* WriteInteger: لكتابة قيم Integer (الأعداد الصحيحة).

* WriteExpandString: لكتابة قيم سلسلة موسعة.

* WriteTime: لكتابة الوقت.

يمكنك كتابة هذه القيم لانجاز ما تريد من المهام.

ولرئية الناتج انتقل إلى مسار المفتاح في الريجستري كما هو موضح في الصورة:

ffbe31d96c.jpg

يتبع...

#4

موضوع جميل جدا إستمر :D

رغم أن الفترة هي فترة إمتحانات

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#5

مشكورين على ردودكم

ikossan كتب:
موضوع جميل جدا إستمر :D

رغم أن الفترة هي فترة إمتحانات

أنا خلصت امتحانات اليوم ;)

#6

الأوامر المتقدمة

هناك سلسلة من الأوامر المتقدمة أشرحها بطريقة مفصلة:

* ()ValueExists: أمر للتحقق من أن هل القيمة الفلانية موجودة ضمن المفتاح أم لا؛مثال:

if Reg.ValueExists(Test) Then
   showmessagw('Found...');
Else
   Showmessage('no Found...')

مع ملاحظة أنك قمت سابقا بفتح المفاتيح المطلوبة لكي تتأكد من وجود القيمة المذكورة.

* ()KeyExists: يستخدم هذا الأمر للتأكد هل أن المفتاح الفلاني موجود أو لا يعني كالأمر السابق إلا أنه يستخدم للمفاتيح وليس للقيم؛مثال:

if Reg.KeyExists('Software') then
   showmessagw('Found...');
Else
   Showmessage('no Found...')

* ()DeletKey: يستخدم هذا الأمر لحذف مفتاح من الريجستري؛مثال:

if Reg.DeletKey('KeyName') Then
   Showmessage('Delet Key');
Else
   Showmessage('Not Delet');

يجب أن تكون حذرا عند استخدامك لهذا الأمر ولا تحذف المفاتيح الضرورية أو التي لا تعرف ما هي إلا أن تتأكد منها.

* ()DeletValue: كالأمر السابق تماما إلا أنه يحذف قيمة بدلا من مفتاح.

* ReadString: إذا أردنا أ، نقرأ قيمة من الريجستري نستخدم هذا الأمر كما في المثال:

Showmessage(Reg.ReadString('Test'))

يقوم هذا المثال بقراءة القيمة Test من الريجستري وإظهارها بواسطةة رسالة ويمكنك استخدام أي كمبوننت آخر لوضع القيمة المقروءة داخلة.

* ()Reg.CreatKey: يستخدم هذا الأمر لإنشاء مفتاح جديد ما عليك سوى كتابة المفتاح وسيتم إنشاءه؛مثال:

Reg.CreatKey('KeyName');

سيتم إنشاء المفتاح KeyName تحت المفتاح المفتوح مسبقا وإذا لم تفتح أي مفتاح مسبقا فسيتم إنشاءه تحت المفتاح الرئيسي.

* ()MoveKey: يستخدم هذا الأمر لنقل أو نسخ مفتاح مع قيمة إلى مكان تحدده أنت؛مثال:

Reg.MoveKey('Ahmed','ali',False);

سيتم نسخ المفتاح Ahmed إلى مفتاح جديد بإسم ali والبارامتر الأخير يؤكد ما إذا أردت حذف المفتاح Ahmed أو لا؛ ضع False لكي لا تحذف؛ ضع True لكي تحذفه.

* ()CurrentPath: يجلب هذا الأمر المفتاح المفتوح حاليا.مثال:

Showmessage(Reg.CurrentPath);

* ()Reg.OpenKeyReadOnly: يستخدم هذا الأمر لفتح مفتاح للقراءة فقط.

* ()RenameValue: يستخدم هذا الأمر لاستبدال اسم قيمة معينة؛مثال:

Reg.RenameValue('Test','myValue');

سوف يستبدل اسم القيمة Test الى myValue .

وهناك أوامر عديدة في الريجستري اكتشفها بنفسك ;)

الى هنا ننتهي من الجزء النظري ونأتي الى الجزء العملي وهو تصميم برنامج يستخدم الريجستري..

انتظروني...

تم تعديل هذه المشاركة بواسطة magellan في 7 يونيو 2006 في 22:18

#7

جيد جدا استمر

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#8

سوف نبدأ اليوم بنهاية موضوعنا حول الريجستري

برنامج Background

لا يخفى عليكم أن للريجستري أوامر خاصة تحسن من أداء الويندوز

وهذه الأوامر تجدونها في مراجع مختلفة عن الريجستري ولكن نادر منها ما هو عربي.

ٍاتسخدم في هذا المثال العملي قيمة باسم BackBitmapShell وهي قيمة خاصة بالريجستري تمكنك

من إنشاء صور ووضعها كخلفية لشريط الأدوات في متصفح الإنترنت أو في المجلدات.

أنشأ مشروع جديد

وقم بتصميم الشكل التالي:

6ad564f54e.jpg

ولا تنسى أن تضيف TOpenDialog

وتدرج اللاحقة bmp و gif من خاصية Filter.

البرنامج سيكون بالشكل التالي: يضغط المستخدم على زر استعراض ويختار الصورة التي يريدها ثم يضغط على زر تعيين لتعيينها كخلفية لشريط الأدوات

وإذا أراد المستخدم أن يلغي الصورة فيضغط على زر مسح.

اتبع الخطوات التالية لبناء البرنامج:

1.أبدأ تطبيقا جديدا.

2.أدرج التعليمة Registry في قسم uses كما وضحت مسبقا.

3.أكتب الكود التالي في حدث OnCreat للفورم:

procedure TForm1.FormCreate(Sender: TObject);
var
RegEx: TRegistry;
begin
RegEx:= TRegistry.Create;
RegEx.RootKey:= HKEY_CURRENT_USER;
try
RegEx.OpenKey('Software\Microsoft\internet Explorer\ToolBar',True);
Edit1.Text:= RegEx.ReadString('BackBitmapShell');
except
RegEx.Free;
end;
end;

أكتب الكود التالي في حدث OnClick للزر تعيين:

var
Reg: TRegistry;
begin
Reg:= TRegistry.Create;
Reg.RootKey:= HKEY_CURRENT_USER;
try
Reg.OpenKey('Software\Microsoft\internet Explorer\ToolBar',True);
Reg.WriteString('BackBitmapShell',Edit1.Text);
ShowMessage('تم تعيين الخلفية بنجاح');
Except
Reg.Free;
end;
end;

اكتب الكود التالي في حدث OnClick للزر مسح:

var
Reg: TRegistry;
begin
Edit1.Text:= '';
Reg:= TRegistry.Create;
Reg.RootKey:= HKEY_CURRENT_USER;
try
Reg.OpenKey('Software\Microsoft\internet Explorer\ToolBar',True);
if MessageDlg('هل تريد مسح الخلفية؟',mtinformation , [mbYes,mbNo],0) =
mrYes then
begin
if Reg.DeleteValue('BackBitmapShell') then
begin
ShowMessage('تم مسح الخلفية بنجاح');
end else begin
ShowMessage('!هناك خطأ في المسح');
End;
End;
Except
Reg.Free;
End;
end;

اكتب الكود التالي في الزر استعراض:

begin
IF OpenDialog1.Execute Then
Edit1.Text:= OpenDialog1.FileName;
end;

الآن اضغط F9 وجرب البرنامج .

الآن والحمدلله انتهينا من البرنامج بكل سهولة.

والبرنامج مرفق تحت.

أرجو أنكم تكونون قد استفدتوا وأي شي مو مفهوم أنا حاضر.

Background.rar

تم تعديل هذه المشاركة بواسطة magellan في 8 يونيو 2006 في 12:16

هذا الموضوع مغلق.

مواضيع مشابهة