تعرف على مكونات الديلفي

Share:
نظرة سريعة على مكونات ديلفي IDE


سنتعرف في هذا القسم على بيئة التطوير المتكاملة للدلفي IDE (Delphi Integrated Development Environment) .

عندما تشغل برنامج الدلفي تظهر لك بيئة التطوير فيه والتي سنتعرف عليها كل على حده

بيئة دلفي مكونة من ثلاثة أقسام :

1- الإطار العلوي :

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

2- مفتش الكائنات : (سنتعرف عليه بالتفصيل في دروس قادمة)

والذي يتم بواسطته تعديل الخصائص والأحداث للمكون وسوف تستخدمه بشكل دائم خلال عملك مع ديلفي وهناك بابين لمفتش الكائنات هما الخصائص Properties والأحداث Events.
مصطلح الخاصة Property يحتوي على خصائص لها قيم تحدد عمل المكون

يتضمن باب الأحداث Events قائمة أحداث المكون . تتشكل الأحداث نتيجة لتفاعل المستخدم مع المكون مثلا عند نقر المكون يتولد حدث يخبرك بأن المكون قد نقر بإمكانك كتابة أوامر تستجيب لهذه الأحداث.
مصطلح الحدث Event هو شيء ما يحصل كنتيجة لتفاعل المكون مع المستخدم أو مع ويندوز.
مصطلح معامل الحدث Event Handler هو مقطع من البرمجة ينفذ استجابة للحدث.

3- منطقة عمل ديلفي
الجزء الثالث هو منطقة عمل ديلفي وعادة ما يظهر مشروعاً جديداً .
في المقدمة مصمم النموذج وخلفه محرر الشيفرة الذي تدخل عبره البرمجة عند كتابة برامجك.

وكلا من مفتش الكائنات ومصمم النموذج ومحرر الشيفرة تتفاعل فيما بينها عند بناء التطبيقات لتولد البرنامج .
------------------------------------------------------------------------------
خصائص وأحداث عنصر النافذة
كل مشروع له على الأقل نافذة واحدة Form تمثل النافذة الرئيسة ، كما يمكن أن يكون للمشاريع أكثر من نافذة واحدة. لعنصر النافذة خصائص وأحداث سنتعرض لهما في هذا الدرس .
عند بداية مشروع جديد ينشئ ديلفي نافذة يسميها Form1 بإمكانك إضافة نافذة جديدة من خلال الأمر File|New Form ولكل نافذة وحدة Unit خاص بها يحتوي على برمجة هذه النافذة

ويمكنك الدلفي من التعامل مع النافذة والتعامل مع خصائصها وإضافة أحداث لها من خلال العنصر التالي
والذي سنتعرف الآن على أبرز خصائصة التي يمكننا من التعامل معها

أولا : نتعرف على خصائص عنصر النافذة Properities

ActiveControl : يحدد أي عنصر موضوع على النافذة الرئيسة هو العنصر النشط يمكن التحريك بين العناصر باستخدام الزرTab
AutoScroll : إعطها القيمة True لتظهر وتختفي أشرطة التمرير Scroll bars تلقائياً عند حدوث نقص في مساحة النافذة.
Cruser : يعين شكل مؤشر الفأرة عندما تقع على مساحة النافذة.

Enabled : أعطها القيمة True لكي تستجيب النافذة لأحداث الفأرة ولوحة المفاتيح وعنصر التوقيت Timer وعند إعطائها القيمة False لاتستجيب لاتفعل ذلك إلا إذا كنت تدري ما تفعل .


HerzScrollBar: يظهر شريط التمرير الأفقي للنافذة.


Icon: تحديد أيقونة النافذة ويظهرها على شريط العنوان.


KeyPreview: أعطها القيمة True لكي تتلقى النافذة أغلب أحداث لوحة المفاتيح.


Menu: تستخدم لتحديد قوائم النافذة أحياناً في بعض برامج واجهة المستندات المتعددة Multiple Document Interface واختصاراً MDI كبرنامج مايكروسوفت وورد يمكنك إثناء التشغيل تغيير القوائم.


ObjectMenuItem: يستخدم مع تطبيقات OLE لقواعد البيانات.


PixelsPerInch: يحدد كيف يقوم التطبيق لإنشاء النافذة ليتم قياسها بالنقاط لكل بوصة استخدمه مع Scaled لانشاء نافذة متشابهة في الحجم مع دقة شاشة مختلفة إذاكانت Scaled محددة بالقيمة False فإن PixelsPerInch ليس لها أي تأثير.


Position: تحدد المناهج لحساب حجم ومكان النافذة حسب القيم التالية:

poDefault يعرض النافذة وموضها المصمم.

poDefaultPostOnly يحدد المكان المصمم للنافذة ولكن يحسب حجمها وقت التشغيل (يحدد ويندوز الحجم البدائي لها).

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

poScreenCenter عرض النافذة في وسط الشاشة.

Scaled: تحدد بالقيمة True لاستخدام خاصة PixelsPerInch يقوم بتغيير مقاسات الشاشة وهو هام لضمان ظهور النص بشكل سليم في تحكم النافذة على أنظمة تستخدم خطوط كبيرة ، كما في الويندوز 98 وويندوز NT5.0 والتي يستطيع المستخدم فيها اختيار قياسات الخطوط.


Tag: لايوجد تحديد مسبق يمكنك استخدم Tag لتمرير أي قيمة عدد صحيح تريد أو عدد يفحصه في أثناء التشغيل.


VertScrollBar: يظهر شريط التمرير الرأسي للنافذة.


Visible: تحدد بالقيمة True ليجعل العنصر مرئياً أو False ليخفيه حتى يستدعي البرنامج المنهج Show .


WindowMenu: يستخدم في تطبيقات واجهة المستندات المتعددة MDI تصمم القائمة لعرض عناوين النوافذ المفتوحة حدد هذه الخاصية في بنود تغيير النوافذ.


OnActive: يتم استدعائه عندما يقوم البرنامج بالتعامل مع النافذة عندما تنتقل من تطبيق آخر. 

OnDblClick: يتم استدعائه عندما يقوم المستخدم بالنقر المزدوج على النافذة.


OnClick: يتم استدعائه عندما يقوم المستخدم بالنقر المفرد على النافذة.


OnClose: يتم استدعائه عندما تغلق النافذة.


OnCloseQuery: يستدعى قبل أن تغلق النافذة مباشرة ، يمكنك استخدام هذا الحدث لمنع فقدان البيانات وسؤال المستخدم عن موافقتهم على حفظ البيانات التي تم تغييرها قبل أن تغلق النافذة أو منع النافذة من الإغلاق.


OnCreate: يستدعى مرة واحدة عند إنشاء النافذة في الذاكرة.


OnDestory: يستدعى قبل تدمير النافذة وهي الفرصة الأخيرة لأداء أي عمل قبل إنهاء التطبيق.


OnDonner, OnBlitzen: تحدث عند حدوث أي حدث مهما كان للنافذة.


OnHide: يستخدم لأداء أعمال عندما تكون النافذة مختفية مثلاً تحريرالذاكرة عندما تكون النافذة في حالة غير مرئية.


OnKeyDown: يستدعى عندما يضغط المستخدم أي مفتاح بما في ذلك مفاتيح التي لها وظائف خاصة استخدم هذا الحدث في حالة ضغط أكثر من مفتاح مثل مفاتيح Alt, Shift, Ctrl مع مفاتيح أخرى يمكن تكرار هذا الحدث قبل رفع الزر ، استخدم القيمة True للخاصة KeyPreview عند استخدام هذا الحدث.


OnKeyPress: يستدعى عندما يضغط المستخدم أي مفتاح غير المفاتيح التي لها وظائف خاصة ، هذا الحدث بعدOnKeyDown وقبل OnKeyUp ، استخدم القيمة True للخاصة KeyPreview عند استخدام هذا الحدث.


OnKeyUp: يستدعى عندما يضغط المستخدم أي مفتاح بما في ذلك مفاتيح التي لها وظائف خاصة يمكن استعمال هذا الحدث مع OnKeyDown فقط لتنظيم نشاط لوحة المفاتيح كما في الألعاب مثلاً، استخدم القيمة True للخاصة KeyPreview عند استخدام هذا الحدث.


OnMouseDown: يحدث عندما يضغط المستخدم على أي زر للفأرة .


OnMouseMove: يحدث عندما يحرك المستخدم مؤشر الفأرة داخل مساحة النافذة يمكنك تحديد فيما إذا ضغط المستخدم على المفاتيح Alt, Shift, Ctrl .


OnMouseUp: يحدث عندما يرفع المستخدم زر الفأرة .


OnPaint: عندما تحتاج محتويات النافذة للتحديث مثلاً عندما يقوم المتخدم بتحريك نافذة أخرى جانباً أو عندما تتغير موقع أو أبعاد النافذة.


OnShow: يستدعى قبل أن تصبح النافذة مرئية ، استخدم هذا الحدث لتنفيذ ما تريد ظهوره عند ظهور النافذة.

المتغيرات في برنامج الدلفي Variable

سنحاول في هذا الدرس التعرف على المتغيرات في برنامج الدلفي بتفصيل أكبر .

في أي برنامج دلفي يجب التصريح عن المتغيرات قبل استخدامها ويتم ذلك في قسم خاص من الشيفرة تبدأ بالكلمة Var

var

x:Integer;

y:Integer;

في المثال السابق قمنا بتعريف متغيرين بالذاكرة يحملان الإسمين x,y ويختصان بحفظ بيانات من نوع الأعداد الصحيحة

يمكن التصريح عن قسم Var في عدة أمكنة فيمكن أن يتواجد القسم Var على مستوى الوحدة أو على مستوى الإجرائية أو التابع أو في كليهما حتى أنه من الممكن تواجد عدة أقسام Var في الوحدة الواحدة ، إليك المثال التالي


proceder TForm1.Test;

var

s: string;

begin

s:=’هذا هو برنامجي الأول’;

Label1.Caption:=s

end;

التصريح عن متغير يحجز مكان في الذاكرة الموقتة لتخزين قيمة المتغير أثناء تنفيذ البرنامج .

تخضع أسماء المتغيرات لقواعد ، يمكن استخدام الحرف الصغير والكبير والأرقام والخط السفلي (_) ولايحتوي على مسافات أو محارف خاصة ويجب أن لا يبدأ إسم المتغير برقم ، لاتوجد قيود على طول الإسم ولكن في الواقع سيقوم المترجم بتجاهل ما بعد 255 حرف . وفي الواقع إذا تجاوز طول الإسم عن 20 حرفاً فإن هذا لن يكون مفيداً وعمليا

أمثلة للأسماء المقبولة :

aVaryLongVaribleName:Integer;

my_var1:Integer;

x:=Integer;

ويجب ملاحظة أن لغة باسكال والدلفي ليست حساسة لشكل الحرف كبير كان أو صغير.

--------------------------------------------------------------------------------

الثوابث في برنامج الدلفي Const
سنحاول في هذا الدرس التعرف على الثوابت Constant في برنامج الدلفي بتفصيل أكبر وهي تعد من الكلمات الأساسية في البرنامج .

يحتوي القسم Const على لائحة من المتغيرات المعروفة بثوابت لا يمكن تغييرها


كمثال على ذلك ليكن هناك بعض القيم التي يستخدمها برنامجك مرارا وتكرارا ، يمكنك من أجل هذه القسم وضع متغيرات من نوع Constant لتبيان ذلك نشاهد المثال التالي

Unit Unit2;

Interface

Const

AppCaption =’برنامجي الأول ‘;

Procedure DoSomething;

Implementation

Const

X = 20 ;

Y = 200;

Procedure DoSomthing;
Begin

{أوامر الإجراء DoSomthing تكتب هنا }

End;

End.


في المثال السابق أضفنا القسم Const واحد للثوابت العامة ( التي يمكن للوحدات الأخرى التعامل معها ) وآخر للثوابت التي تستخدمها هذه الوحدة فقط .

بما ان الثابت AppCaption مصرح عنه في القسم InterFace ، فإنه يمكن إستخدامه في أي مكان في الوحدة وفي أي وحدة أخرى واردة في لائحة Uses لهذه الوحدة

ولإن الثوابت y و x مصرح عنها في القسم Implementation فمن الممكن إستخدامها فقط في هذه الوحدة

--------------------------------------------------------------------------------

الكلمات الأساسية Else – If , Then 

هناك بعض مظاهر البرمجة المشتركة في كل لغات البرمجة ومنها عبارة الشرط if
تستخدم هذه العبارة لفحص شرط معين وثم تنفذ شيفرة معينة إذا تحقق الشرط True وعدم تنفيذه في حالة عدم تحقق الشرط

var

x:integer;
begin

x:=StrToInt(Edit1.Text)

if x>10 then

Label1.Caption:='عليك أن تدخل عدد من 1 -10';

end;


في المثال السابق يقوم البرنامج بطلب إدخال من المستخدم ويقارن المدخل بشرط بحيث إذا كان الشرط x>10 متحققا وكان العدد المدخل أكبر من عشرة ينفذ البرنامج الجملة بعد الشرط ويطلب بإدخال عدد أصغر من 10


تنفيذ عدة عبارات داخل الشرط

لنفترض أن لديك عدة سطور من البرمجة يجب أن تنفذ عندما يكون الشرط محققاً عندها سوف تحتاج إلى begin..end لتجعل هذه السطور تشكل كتلة واحدة يكون داخلها تنفيذ الشرط إذا كان متحقق


if x>10 then

begin

Label1.Caption:='عليك أن تدخل عدد من 1 -10';

Edit1.text:= '10';

end;


إستخدام الشرط Else

أحياناً تحتاج لعمل تنفيذ ما إذا كان الشرط محققاً ولكن تريد البرنامج بأن يؤدي عملاً آخر إذا كان الشرط غير محقق مثل:

if x=0 then y:=0
else

y:=sin(x);
حلقات التكرار

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

الحلقة التكرارية For 

وهي تعد أكثر أنواع الحلقات التكرارية شيوعا

تتطلب هذه الحلقة محددتين القيمةالبدائية والقيمة النهائية إذا كانت الحلقة تصاعدية تستخدم To وإذا كانت تنازلية نستخدم كلمة DownTo .

الصيغة العامة لجملة for التصاعدية هي

for var := initial_value to end_value do

begin

statment;

end;


في المثال السابق حلقة تكرر الشيفرة الممثلة بعبارة statement حتى تصل إلى القيمة النهائية end_value . لا داعي لاستخدام begin , end إذا كان جسم التكرار يتكون من عبارة واحدة. ولكن عندما نريد إضافة العديد من السطور فنحتاج لإستخدام Begin – End

الصيغة العامة لجملة for التنازلية:

for var := initial_value DownTo end_value do

begin

statment;

end;



في المثال السابق كتلة الشيفرة يجب أن تكون initial_value أكبر من end_value وتتناقص قيمة العداد المتغير var واحداً في كل تكرار للحلقة

مثال عملي :

أنشئ مشروعاً جديداً
وأضف له زراً Button1 ومكون المفكرة Memo1 غير الخاصة Caption للزر واجعله " ابدأ " أنشئ الحدث OnClick له ، واكتب معالج الحدث كالتالي
var
I:Integer;
begin
Memo1.Clear;
for I := 0 to 9 do
Memo1.Lines.Add('هذا السطر رقم '+IntToStr(I));
end;


الآن يمكنك تشغيل البرنامج ، إضغط الزر ابدأ وشاهد عمل الحلقة …

الحلقتين التكراريتين While - Repeat


والآن بعد أن رأيت كيف تعمل حلقة for لن يكون صعباً جداً عليك أن تطبق ذات المعنى على حلقتي while , repeat

لنلقي الآن نظرة عليهما الآن.

حلقة while 


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


إليك الشكل العام للحلقة while

While cond_expr do

Begin

Statements;

End;


حيث يفحص البرنامج الشرط cond_expr وعند تحقق الشرط فإن البرنامج ينفذ الأوامر بين الأمرين End – Begin ويعود لقراءة الشرط مرة أخرى وهكذا يستمر في تنفيذ التكرار إلى أن يصبح الشرط غير متحقق فيخرج من التكرار

وإذا كان جسم الحلقة مؤلف من عبارة واحدة فليس هناك داعي لإستخدام Begin – End

حلقة Repeat

مثل حلقة while ولكن الحلقة While تقوم بفحص الشرط في بداية الحلقة ولكن في حالة الحلقة Repeat فإن الشرط يفحص في نهاية الحلقة

إليك هذا البرنامج الذي يبين عمل الحلقة Repeat وهو نفس مثال البرنامج للحلقة For مع تعديل سطور البرنامج ويمكن ملاحضة ان الحلقة repeat تتنفذ على الأقل مرة واحدة ولكن الحلقة While يمكن أن لا تنفذ ولا مرة


Var
I:Integer;
begin

I:=5;

Memo1.Clear;
Repeat

Memo1.Lines.Add('هذا السطر رقم '+IntToStr(I));

Dec(I);

Until I=-1;
end;

الإجرائين Break , Continue 


قبل أن ننهي الحديث عن الحلقات يجب أن نتعرف على إجرائين يساعدان على التحكم بتنفيذ البرنامج ضمن الحلقة .
- استخدم الأمر Continue لتجبر البرنامج على الانتقال إلى نهاية الحلقة متجاوزاً كل العبارات التي تليه .
- استخدم الأمر Break لتوقف عمل الحلقة مباشرة ولاتستحدم خارج الحلقات.

عبارة case 


يمكن اعتبار تركيب case كتركيب if موسعة ، إنها تمكنك من تنفيذ عبارة واحدة من عدة كتل برمجة معتمدة على نتيجة تعبير معين

التعبير ممكن يكون متغير ، أو نتيجة استدعاء تابع أو أية شفرة من باسكال كلها تعطي تعبيرا للتعرف على الصيغة العامة لتركيب case نشاهد المثال


case var o

val_1 : statement_1;

val_2 : statement_2;

val_3 : statement_3;

;

;

else

statement_else;

end;

عندما يبدأ البرنامج في تنفيذ تركيب case سيمر على قيمة val_1 ويقارن بين الثابت val_1 والمتغير Var إذا وجدهما متساويين سيقوم البرنامج بتنفيذ جميع الأوامر التي تليها حتى يصل إلى نهاية الكتلة ( تحدد الكتلة بالعبارات بين Begin , end في حالة استخدام أكثر من عبارة واحدة كما سبق شرحه ) أما إذا لم يجدهما متساويين فإنة سيتخطاها بجميع العبارات الواردة بعدها وينتقل إلى الثابت الآخر ويكرر المحاولة وهكذا يمر البرنامج عليها كلها فإذا لم يجد الثابت المطلوب منها فإنه سيتخطاها إلى كلمة else وينفذ العبارات الواردة بعدها حتى نهاية التركيب .

ملاحظة مهمة 

يجب أن يعطى التعبير ضمن الدالة case قيمة تنتمي إلى نمط مرتب من الأنواع ( Integer,Byte,Word )

بحيث لايمكنك كتابة مايلي مثلاً

case str of
'Own' : {code};
'Two' : {code};

end;

يمكن جعل البرنامج ينفذ كتلة أوامر عند أكثر من قيمة كما أن إستخدام الدالة else في الإجراء Case يعتبر اختياري ومثال على ذلك

case x of

1: y:=sin(x);

2,3 : y:=cos(x);

4,5,6: y:=x;

تم   ارجو ان يفيدكم  الدرس