أوّلُ تطبيقٍ بنافذةٍ وزرّ
مسارٌ واحدٌ مضمون: من ملفٍّ فارغٍ إلى ملفٍّ تنفيذيٍّ يفتحُ نافذةً على سطحِ مكتبِك. وهذا الدرسُ يُتِمُّ أوّلَ نافذةٍ وزرٍّ يستجيب من محورِ SadUI ولا يُعيدُه: هناك شجرةُ الواجهةِ وأحداثُها، وههنا ما يميّزُ سطحَ المكتب — الثنائيُّ وما يُشحَنُ معه.
ما يلزمُك قبلَه
مترجِمُ sad-build مبنيًّا — البناءُ والتشغيل. ولا يلزمُ استيرادُ وحدةٍ: مدمَجاتُ الواجهةِ متاحةٌ بلا استورد.
١ · اكتُبِ الملفّ
احفَظْ هذا في مفكرتي.ص بمحرِّرٍ يحفظُ UTF-8:
# تطبيقُ سطحِ مكتبٍ أدنى — لوحةٌ فيها عنوانٌ وحقلٌ وزرّ
متغير الحالة = نص_عنصر("جاهز").حجم_خط(18).لون("#9FB3C8")
دالة عند_الحفظ()
عين_النص(الحالة، "حُفِظ")
تحديث_حالة()
نهاية
متغير الجذر = عمود(
نص_عنصر("مُفكِّرتي").حجم_خط(32).لون("#FFFFFF")،
حقل_نص("اكتُبْ ملحوظةً…")،
صف(
زر("احفَظْ").عند_النقر(عند_الحفظ)،
الحالة
).تباعد(16)
)
.لون_خلفية("#0B1A2E")
.حشوة(32)
.تباعد(18)
طباعة_شجرة(الجذر)
تشغيل_تطبيق(الجذر)تشغيل_تطبيق(الجذر) هي نقطةُ الدخولِ الوحيدةُ إلى حلقةِ الأحداث (RUN_APP في مصدرِ الحقيقة): تفتحُ النافذةَ وترسمُ وتُرسِلُ الأحداثَ ولا تعود.
٢ · ترجِمْ
sad-build مفكرتي.ص -o مفكرتي.exeوالمترجِمُ يضعُ SDL2.dll بجوارِ الثنائيِّ من تلقاءِ نفسِه. مقيسٌ: مجلَّدٌ فيه الملفُّ المصدريُّ وحدَه صارَ بعدَ الترجمة:
2500096 SDL2.dll
475136 مفكرتي.exe
751 مفكرتي.صفلا خطوةَ نسخٍ يدويّة. وتفصيلُ ما يُشحَنُ في كيف تُحزِّمُ التطبيقَ وتوزّعُه.
٣ · شغِّلْ
./مفكرتي.exeفتُطبَعُ الشجرةُ أوّلًا — وهذا مخرَجٌ مقيسٌ حرفًا بحرف:
عمود(لون_خلفية: "#0B1A2E", حشوة: 32, تباعد: 18)
نص_عنصر(محتوى: "مُفكِّرتي", حجم_خط: 32, لون: "#FFFFFF")
حقل_نص(تلميح: "اكتُبْ ملحوظةً…")
صف(تباعد: 16)
زر(عنوان: "احفَظْ") [عند_النقر]
نص_عنصر(محتوى: "جاهز", حجم_خط: 18, لون: "#9FB3C8")ثمّ تُفتَحُ النافذةُ ويُطبَعُ سطرُ التأكيد:
✓ تم إنشاء النافذة: تطبيق ص [800x600]ولا يعودُ البرنامجُ بعدَه: هو في حلقةِ الأحداث. أوقِفْه بـCtrl+C أو بإغلاقِ النافذة. هذا هو النجاحُ الأوّل.
لماذا طباعة_شجرة في درسِ نافذة؟
لأنّها نقطةُ الارتساءِ الوحيدةُ التي تُقاسُ بلا عين. النافذةُ تُرى ولا تُقارَن؛ ونصُّ الشجرةِ يُقارَنُ حرفًا بحرف. والوسمُ [عند_النقر] فيه برهانٌ نصّيٌّ على أنّ المعالِجَ سُجِّلَ على العقدةِ لا أنّه كُتِبَ فحسب.
حدٌّ مُعلَنٌ يخصُّ هذا الدرس
فتحُ النافذةِ وطباعةُ الشجرةِ مقيسان. أمّا أثرُ النقرِ المرئيُّ فلم يُقَسْ ههنا: يلزمُه نقرةٌ بشريّةٌ على جهازٍ ذي شاشة. ولا بذرةَ واحدةً في tests/behavior تستدعي تشغيل_تطبيق، فالمخرَجُ المرئيُّ غيرُ محروسٍ بانحدارٍ آليّ — حدٌّ مُعلَنٌ في حدودِ سطحِ المكتب لا اكتشافٌ ههنا.
ما بعدَ ذلك
- شجرةٌ أكبرُ ومعدّلاتٌ وأحداث ⟵ محورُ SadUI
- ثنائيٌّ تُسلِّمُه لغيرِك ⟵ كيف تُحزِّمُ التطبيقَ وتوزّعُه
- ولماذا SDL2 دونَ غيرِه ⟵ لماذا SDL2 مخرَجًا مرجعيًّا