17-06-19, 06:37 PM
أنتبهو واحدة من الامور التي جعلتني في ربكة مع الدلفي عند انتقالي لها .
وهي مهمة لادارة نماذجك في المشروع
ومهمة جدا لادارة الكائنات التي تنشئها وسوف تنطرق لها قريبا .
انت عندما تنشئ نماذج متعددة في مشروعك وتشغله يتم تحميلها كلها الى الذاكرة تلقائيا.
في المثال المرفق هنا عندنا نموذجين يعمل المشروع باظهار النموذج الاول كما في اي لغة برمجة
من القائمة Project ثم Option اذهب الى الخيار Forms كما بالصورة هنا .
[attachment=21743]
لاحظ ان النموذج الرئيسي للمشروع هو Form1 ولاحظ تحت Auto-Create forms كل النماذج التي لدينا والتي سيتم تحميلها بالذاكرة تلقائيا .
ما الذي ممكن ان يتربت على هذا .
في المشروع المرفق هناك Timer على النموذج الثاني يقوم باظهار رقم متتابع على النموذج الاول
اذا شغلت البرنامج ستلاحظ ان الرقم بداء في التغير مع اننا لم نحمل النموذج الثاني بالامر Show
الحقيقة ما حدث انه تم تحميله بالذاكرة ولكنه مخفي فقط ولم نظهره .
ولهذا ولبرمجة نظيفة يجب ان تلغي التحميل التلقائي لللنماذج كما بالشكل التالي :
[attachment=21744]
وبهذا لن يعمل الـ Timer الا بحال حملنا النموذج للذاكرة .
ولكن هذا يترتب عليه شئ أخر وهو عندما تريد ان تظهر النموذج الثاني لن تستطيع الا بحال حملته بالذاكرة اولا وعليه ستكتب التالي لاستدعاء النماذج .
بهذه الطريقة يمكنك ان تتأكد دائما من اي مكون سواء كان نموذج او غيره هل هو موجود بالذاكرة ام ليس موجود .
اذا ازلت التحميل التلقائي للنموذج ووضعت زر على النموذج الاول واستدعيته بالطريقة السابقة سيظهر النموذج الثاني ويبداء اظهار الرقم المتصاعد على النموذج الاول
وبحال اغلقت النموذج الثاني سيظل الرقم في التغير لانك حقيقة باغلاق النموذج الثاني انت اخفيته فقط ولم تزله من الذاكرة .
لازالته من الذاكرة يجب ان تكتب بحدث Onclose للنموذج الثاني التالي :
وانت بهذا تقوم بقتله والغاءه من الذاكرة تماما .
بهذا تضمن انك لا تحمل بالذاكرة الا ما تحتاج اليه فقط ، وتتحكم بشكل كبير في مشروعك .
فلو كان على النماذج الفرعية وفي حدث التحميل برمجة لاستدعاء بيانات من قاعدة البيانات فكلها سوف تحمل البيانات الى الذاكرة حتى ولو لم تفتح تلك النماذج .
لهذا احيانا الحدث OnShow يكون افضل من حدث التحميل بحال التحميل التلقائي للنماذج في الذاكرة
يعني لا تنفذ البرمجة الا اذا ظهر النموذج واستدعيناه فعلا
لتحميل المثال
[attachment=21745]
وهي مهمة لادارة نماذجك في المشروع
ومهمة جدا لادارة الكائنات التي تنشئها وسوف تنطرق لها قريبا .
انت عندما تنشئ نماذج متعددة في مشروعك وتشغله يتم تحميلها كلها الى الذاكرة تلقائيا.
في المثال المرفق هنا عندنا نموذجين يعمل المشروع باظهار النموذج الاول كما في اي لغة برمجة
من القائمة Project ثم Option اذهب الى الخيار Forms كما بالصورة هنا .
[attachment=21743]
لاحظ ان النموذج الرئيسي للمشروع هو Form1 ولاحظ تحت Auto-Create forms كل النماذج التي لدينا والتي سيتم تحميلها بالذاكرة تلقائيا .
ما الذي ممكن ان يتربت على هذا .
في المشروع المرفق هناك Timer على النموذج الثاني يقوم باظهار رقم متتابع على النموذج الاول
اذا شغلت البرنامج ستلاحظ ان الرقم بداء في التغير مع اننا لم نحمل النموذج الثاني بالامر Show
الحقيقة ما حدث انه تم تحميله بالذاكرة ولكنه مخفي فقط ولم نظهره .
ولهذا ولبرمجة نظيفة يجب ان تلغي التحميل التلقائي لللنماذج كما بالشكل التالي :
[attachment=21744]
وبهذا لن يعمل الـ Timer الا بحال حملنا النموذج للذاكرة .
ولكن هذا يترتب عليه شئ أخر وهو عندما تريد ان تظهر النموذج الثاني لن تستطيع الا بحال حملته بالذاكرة اولا وعليه ستكتب التالي لاستدعاء النماذج .
كود :
if not Assigned(Form2) then Form2:=TForm2.Create(nil);
Form2.ShowModal;بهذه الطريقة يمكنك ان تتأكد دائما من اي مكون سواء كان نموذج او غيره هل هو موجود بالذاكرة ام ليس موجود .
اذا ازلت التحميل التلقائي للنموذج ووضعت زر على النموذج الاول واستدعيته بالطريقة السابقة سيظهر النموذج الثاني ويبداء اظهار الرقم المتصاعد على النموذج الاول
وبحال اغلقت النموذج الثاني سيظل الرقم في التغير لانك حقيقة باغلاق النموذج الثاني انت اخفيته فقط ولم تزله من الذاكرة .
لازالته من الذاكرة يجب ان تكتب بحدث Onclose للنموذج الثاني التالي :
كود :
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form2:=nil;
Action:=cafree;
end;وانت بهذا تقوم بقتله والغاءه من الذاكرة تماما .
بهذا تضمن انك لا تحمل بالذاكرة الا ما تحتاج اليه فقط ، وتتحكم بشكل كبير في مشروعك .
فلو كان على النماذج الفرعية وفي حدث التحميل برمجة لاستدعاء بيانات من قاعدة البيانات فكلها سوف تحمل البيانات الى الذاكرة حتى ولو لم تفتح تلك النماذج .
لهذا احيانا الحدث OnShow يكون افضل من حدث التحميل بحال التحميل التلقائي للنماذج في الذاكرة
يعني لا تنفذ البرمجة الا اذا ظهر النموذج واستدعيناه فعلا
لتحميل المثال
[attachment=21745]