2.5الأحداث ومعالجات WLangage
الأساسي في 30 ثانية
- يعمل WinDev بالأحداث: لا يُنفَّذ الكود من البداية إلى النهاية، بل يُطلَق ردًّا على إجراء (النقر، الفتح، التعديل)؛ وتسمى هذه الكتل معالجات.
- لكل عنصر قائمة أحداثه: النافذة (التصريحات العامة، التهيئة، الإغلاق)، الزر (النقر)، حقل الإدخال (الدخول، الخروج، التعديل)، الجدول (تحديد/عرض صف).
- ضع كل معالجة في مكانها الصحيح وأبقِ الأحداث قصيرة بتفويض المنطق إلى إجراءات مسماة؛ واحترس من الآثار المتسلسلة.
حالة مصغّرة متسلسلة — ياسين يضع الكود في المكان الصحيح
ياسين، مطوّر WinDev في شركة صغيرة لتجارة العتاد الكهربائي بوهران، يعمل على نافذة إدخال طلبات تطبيق الإدارة. عليه أن يفهم أي كود يُنفَّذ ومتى. يكتب تحميل البيانات وتحضير الشاشة في تهيئة النافذة، والتنظيف في الإغلاق. أما التحقق من إدخال الكمية فيضعه في حدث الخروج من الحقل المعني — لردّ فوري إلى المستخدم — لا في نقر زر التحقق. أما نقر الزر فيبقى قصيرًا: ينسّق ويفوّض المنطق المهني (حساب المجاميع، التحقق من المخزون) إلى إجراء مسمّى قابل لإعادة الاستخدام. وأخيرًا، يحترس من الآثار المتسلسلة: فكود يُعدّل حقلًا قد يُطلق حدث التعديل الخاص به.
حالة مستقلة لهذا القسم: تعود في الدرس والمخطط والسكربت وتحدي 48 ساعة للقسم 2.5.
1. كود يُطلَق، لا خطي
يعمل WinDev بـالأحداث: لا يُنفَّذ الكود من البداية إلى النهاية كسكربت، بل يُطلَق ردًّا على شيء (المستخدم ينقر، نافذة تُفتح، قيمة تتغير). وفهم أي كود يُنفَّذ ومتى أمر لا بد منه — فهو مصدر الالتباس الأول عند المبتدئين. ولكل عنصر قائمة أحداث نكتب فيها كودًا، تُسمّى المعالجات.
2. أكثر المعالجات استخدامًا
لـالنافذة: التصريحات العامة (متغيرات مشتركة، تُنفَّذ أولًا)، التهيئة (عند الفتح: تحميل البيانات، تحضير الشاشة)، الإغلاق (التنظيف، الفحوص قبل المغادرة). ولـالزر: النقر (الإجراء المطلوب تنفيذه). ولـحقل الإدخال: الدخول (يأخذ الحقل التركيز)، الخروج (نغادره — مثالي للتحقق من الإدخال)، التعديل (يتغير المحتوى). ولـالجدول: تحديد صف وعرضه. أما ترتيب التنفيذ فهو: التصريحات العامة، ثم التهيئة، ثم الأحداث تباعًا مع الإجراءات.
3. كود قليل، في المكان الصحيح
ممارسات جيدة: ضع كودًا قليلًا في الأحداث وفوّض إلى إجراءات مسماة (فالكود المهني لا يجب أن يعيش داخل زر، وإلا فليس قابلًا لإعادة الاستخدام ولا للاختبار ولا للصيانة)؛ واكتب كل معالجة في المكان الصحيح (التحقق من الإدخال يذهب إلى الخروج من الحقل، لا إلى نقر زر التحقق)؛ واحترس من الآثار المتسلسلة (كود يُعدّل حقلًا قد يُطلق حدث التعديل لذلك الحقل).
🔎 مثال ملموس — 🔎 مثال ملموس — أين نكتب التحقق من الإدخال؟
المكان الصحيح يصنع الفرق: يضع ياسين التحقق في الخروج من الحقل.
// Initialisation de la fenetre FEN_SaisieCommande
FiltreStocks() // charger / preparer l'ecran
// Sortie du champ SAI_Quantite -> controle de saisie immediat
SI SAI_Quantite <= 0 ALORS
Info("La quantite doit etre positive")
RETOUR
FIN
// Clic du bouton BTN_Valider -> court, il DELEGUE
ValiderCommande() // logique metier dans une PROCEDURE nommee
Lecture : initialisation = charger ; sortie de champ = controler
Reflexe : evenements courts, logique metier dans des PROCEDURES
القراءة: التحقق من الإدخال يعيش في الخروج من الحقل (ردّ فوري)، لا في نقر زر التحقق.
الدرس: الحدث ينسّق ويفوّض إلى إجراء مسمّى: فيبقى الكود المهني قابلًا لإعادة الاستخدام والاختبار والصيانة.
مفردات القسم
- حدث / معالجة
- الكود ليس خطيًا: يُطلَق ردًّا على إجراء (نقر، فتح، تغيّر قيمة). وتسمى هذه الكتل معالجات.
مثال بسيط: يكتب ياسين نقر زر التحقق في الطلب.
ما ليس كذلك: سكربت يُنفَّذ من البداية إلى النهاية، مرة واحدة.
رد فعل: التفاعل مع إجراء → حدث، أي معالجة.
- التصريحات العامة
- المعالجة التي تُنفَّذ أولًا لنافذة: نصرّح فيها بالمتغيرات المشتركة لكل النافذة.
مثال بسيط: يصرّح ياسين فيها برقم الطلب الحالي.
ما ليس كذلك: التهيئة، التي تُنفَّذ بعدها.
رد فعل: متغيرات تشترك فيها النافذة → التصريحات العامة.
- التهيئة / الإغلاق
- التهيئة تُنفَّذ عند فتح النافذة (تحميل البيانات، تحضير الشاشة)؛ والإغلاق عند المغادرة (التنظيف، الفحوص).
مثال بسيط: يحمّل ياسين الكتالوج في التهيئة.
ما ليس كذلك: نقر زر التحقق.
رد فعل: عند الفتح أو المغادرة → التهيئة / الإغلاق.
- الدخول / الخروج / التعديل
- معالجات حقل الإدخال: الدخول (أخذ التركيز)، الخروج (نغادره — مثالي للتحقق من الإدخال)، التعديل (يتغير المحتوى).
مثال بسيط: يتحقق ياسين من الكمية في الخروج من الحقل.
ما ليس كذلك: تحقق موضوع في نقر زر التحقق.
رد فعل: التحقق من إدخال → الخروج من الحقل.
- الآثار المتسلسلة
- كود يُعدّل حقلًا قد يُطلق حدث التعديل لذلك الحقل، فيسبب تسلسلات غير متوقعة (وربما حلقات).
مثال بسيط: يستبق ياسين بأن إسناد SAI_Total يُطلق حدث تعديله.
ما ليس كذلك: حدث منعزل تمامًا عن بقية النافذة.
رد فعل: تعديل حقل بالكود → التفكير في الآثار المتسلسلة.
في التطبيق — عمليًا — وضع الكود في المكان الصحيح
- افتح قائمة معالجات نافذة ولاحظ الترتيب: التصريحات العامة، ثم التهيئة، ثم الأحداث تباعًا مع الإجراءات، كما يفعل ياسين.
- اكتب تحميل البيانات وتحضير الشاشة في تهيئة النافذة.
- ضع عمليات التحقق من الإدخال في الخروج من الحقل المعني (لا في نقر زر التحقق) لردّ فوري إلى المستخدم.
- أبقِ الأحداث قصيرة: فوّض المنطق المهني إلى إجراءات مسماة، واحترس من الآثار المتسلسلة عندما يُعدّل كود حقلًا.
سكربت خطوة بخطوة — وضع الكود كما يفعل ياسين (4 دقائق)
1) افتح نافذة واعرض قائمة معالجاتها (التصريحات العامة، التهيئة، الإغلاق). 2) ضع تحميل البيانات في التهيئة. 3) ضع التحقق من الإدخال في الخروج من الحقل المعني. 4) أبقِ نقر زر التحقق قصيرًا: يستدعي إجراءً مسمّى. 5) اختبر تعديل حقل برمجيًا ولاحظ الأثر المتسلسل.
القاعدة الذهبية: كود قليل في الأحداث، والكود المهني في إجراءات قابلة لإعادة الاستخدام.
قالب للنسخ واللصق — أين نضع أي معالجة
FENETRE : Declarations globales -> Initialisation -> ... -> Fermeture
BOUTON : Clic (court, il ORCHESTRE et delegue)
CHAMP : Entree / SORTIE (= controler la saisie) / Modification
TABLE : Selection de ligne / affichage de ligne
Ordre : globales -> initialisation -> evenements au fil des actions
Regles : (1) peu de code dans les evenements
(2) logique metier dans des PROCEDURES nommees
(3) se mefier des EFFETS EN CASCADE
التهيئة
يحمّل ياسين الكتالوج ويحضّر الشاشة عند فتح النافذة.
التحقق عند الخروج
يتحقق ياسين من الكمية في الخروج من الحقل، لردّ فوري.
نقر يفوّض
نقر زر التحقق يستدعي الإجراء ValiderCommande() بدلًا من احتواء كل شيء.
أثر متسلسل
يستبق ياسين بأن إسناد SAI_Total يُطلق حدث تعديل الحقل.
✓ ممارسات جيدة
- ضع كودًا قليلًا في الأحداث، وفوّض إلى إجراءات.
- اكتب التحقق من الإدخال في الخروج من الحقل.
- احترس من الآثار المتسلسلة.
✗ أخطاء شائعة
- وضع كل المنطق المهني في نقر زر.
- التحقق من إدخال في نقر زر التحقق بدلًا من الخروج من الحقل.
- تجاهل الآثار المتسلسلة عند تعديل بالكود.
النقاط الأساسية
- يعمل WinDev بالأحداث: الكود يُطلَق، لا يُنفَّذ خطيًا.
- المعالجات الأساسية: النافذة (العامة، التهيئة، الإغلاق)، الزر (النقر)، الحقل (الدخول، الخروج، التعديل)، الجدول (الصف).
- أحداث قصيرة + منطق مهني في إجراءات مسماة (قابل لإعادة الاستخدام والاختبار والصيانة).
- ضع كل معالجة في المكان الصحيح واحترس من الآثار المتسلسلة.
تحدي 48 ساعة — طبّقه غدًا
كما يفعل ياسين، خذ نافذة من تطبيقك وانقل التحقق من الإدخال لحقل من نقر زر التحقق إلى الخروج من الحقل. ثم أبقِ نقر الزر قصيرًا بتفويض المنطق إلى إجراء مسمّى، ثم أطلق تعديل حقل بالكود لملاحظة أثر متسلسل. اشرح في جملة واحدة لماذا لا يجب أن يعيش المنطق المهني في زر.
- أعرف أي معالجة تُنفَّذ ومتى (ترتيب الأحداث).
- أضع كل معالجة في المكان الصحيح (تحقق في الخروج من الحقل).
- أبقي الأحداث قصيرة وأفوّض إلى إجراءات مسماة.
أسئلة شائعة
لماذا لا يجب كتابة كل المنطق المهني في نقر زر؟
لأن هذا الكود ليس قابلًا لإعادة الاستخدام (القاعدة نفسها تُستخدم في شاشات وطبعات واستيرادات أخرى)، ولا للاختبار، ولا للصيانة. على الحدث أن ينسّق ويفوّض إلى إجراءات مسماة، حيث يعيش الكود المهني المشترك.
أين أضع التحقق من إدخال: في زر التحقق أم في الحقل؟
في الخروج من الحقل المعني: يحصل المستخدم على ردّ فوري لحظة مغادرة الحقل. أما وضعه في نقر زر التحقق فيؤخر التحقق ويخلط بين التحقق من الواجهة وإجراء التحقق.
لماذا لا يجب كتابة كل المنطق المهني في نقر زر؟