تبدو بعض الأفكار المتعلقة بعادات النمو وكأنها عالقة في حلقك ولن تتمكن من التخلص منها. بالنظر إلى دوافع النشر، بالطبع لا أستبعد إمكانية الغش للحصول على نقاط المشاركة، لكن من ناحية أخرى، أتمنى أيضًا تقديم بعض الاقتراحات أو المراجع للزملاء الممارسين (نيان شينغ) (أتمنى أن أكون كذلك). لا تضلل الآخرين). وفي نفس الوقت، أتمنى أيضًا أن تتمكنوا من إبداء آرائكم حول عاداتي السيئة هذه وتقديم النقد والتصحيحات. شكرًا.
واحد. إنشاء دليل المشروع
أولًا، الخطوة الأولى بالطبع هي إنشاء دليل منفصل للمشروع الجديد (لا تضحك). يجب أن يحمل اسم الدليل نفس اسم اسم المشروع، أو يمكن استخدام اسم آخر، طالما أنه واضح وموجز. ثم قم بإنشاء كل من الدلائل التالية داخل هذا الدليل:
<Doc>: يُستخدم لتخزين مستندات التطوير المتعلقة بالمشروع (وصف المتطلبات، التصميم التفصيلي، التصميم التفصيلي، وما إلى ذلك)؛
<Source>: يستخدم لتخزين ".DPR"، و".Pas"، و".Dfm" وغيرها من الملفات في برنامج مصدر دلفي؛
<Dcu>: يتم تخزين ملفات ".Dcu" في هذا الدليل. الغرض من تخزين ملفات ".Pas" و".Dcu" بشكل منفصل هو جعل محتويات الدليل المصدر أكثر وضوحًا؛
<Bin>: يخزن ملفات الإخراج الخاصة بالمشروع، مثل ".Exe" أو ".Dll" أو ".Ocx"، وما إلى ذلك؛
<السجل>: يُستخدم لتخزين ملفات السجل؛ عادةً ما أقوم بوضع ملف "<اسم المشروع>Programmer Log.Txt" في هذا الدليل.
<الصور>: بالطبع، هو الدليل الذي يتم فيه تخزين الصور المستخدمة في المشروع. في الظروف العادية، هذا الدليل لا غنى عنه. إذا تم استخدام موارد أخرى أيضًا، فقم بإنشاء أدلة خاصة بها أيضًا، مثل Wav وAvi وما إلى ذلك.
اثنين. ضبط خيارات المشروع
قم بإنشاء مشروع جديد في دلفي، واحفظ هذا المشروع في الدليل المصدر، وفي نفس الوقت:
أ. اختر أيقونة ملفتة للنظر ومرتبطة إلى حد ما بالمشروع كرمز لهذا المشروع. بالطبع، لا يجوز استخدام هذه الأيقونة إلا مؤقتًا، ولكن يجب أن تكون أفضل من الأيقونة القبيحة التي تفترضها دلفي، وإلا كيف يمكنك أن تكون جديرًا بنفسك؟
ب. قم بتعيين دليل الإخراج في خيارات المشروع -> صفحة الدلائل/الشروط إلى دليل سلة المهملات؛
ج. قم بتعيين دليل مخرجات الوحدة إلى دليل Dcu.
ثلاثة. إضافة وحدة ثابتة
أضف وحدة جديدة واحفظها باسم "unt<اسم المشروع> Consts.Pas" لحفظ الثوابت المستخدمة في المشروع.
أربعة. حول النموذج والوحدة
قم بتسمية النموذج وفقًا لاصطلاح التسمية المجري. يمكن تسمية النموذج المستخدم لتسجيل الدخول بـ "FrmLogin"، ويمكن أن يكون اسم وحدته "untLogin". بشكل عام، يجب أن تكون أسماء النموذجين والوحدات المتناظرة متسقة باستثناء الاختصار "Frm" أو "unt".
أضف تعليقًا لهذه الوحدة في رأس الوحدة. يمكن أن يشير تنسيق التعليق إلى كود مصدر دلفي، ولكن يجب أن يتضمن العناصر التالية على الأقل: وقت إنشاء المؤلف؛ تاريخ التعديل، الخ.
قم بتعيين التسمية التوضيحية للنموذج الذي تم إنشاؤه حديثًا على اسم فئة النموذج بدلاً من استخدام فئة دلفي الافتراضية. على سبيل المثال، بعد إعادة تسمية Form1 إلى FrmLogin، نحصل على فئة النموذج الجديدة TFrmLogin، وتقوم دلفي تلقائيًا بتحديث التسمية التوضيحية للنموذج إلى 'FrmLogin'. في رأيي، يجب أن يكون التعليق "TFrmLogin"، لأننا نصمم فئة نموذج TFrmLogin، بدلاً من العمل على FrmLogin فقط.
بالنسبة لفئة نموذج ذات وظائف واضحة مثل TFrmLogin، اعتاد العديد من الأشخاص على تعيين التسمية التوضيحية الخاصة بها على اسم مثل "تسجيل دخول المشغل" أثناء مرحلة التصميم. عادتي هي أن الثوابت مثل "تسجيل دخول المشغل" يتم تخزينها عادةً في unt<اسم المشروع>Consts.Pas ويتم تعريفها باستخدام ResourceString أو Const. أما بالنسبة لتسمية التسمية التوضيحية للنموذج، فيجب أن تكون مهمة وقت التشغيل. ولذلك، غالبًا ما أقوم بتشغيل Caption فقط عند تشغيل الحدث TForm.OnCreate، مثل:
الإجراء TFrmLogin.FormCreate(Sender: TObject);
يبدأ
التسمية التوضيحية := csLoginTitle;
....
نهاية؛
خمسة. حول استخدام وظيفة التنسيق
هناك ثلاث بيانات: iYear وiMonth وiDay لعرض معلومات مثل "عيد الميلاد: 1976/3/18"، ماذا تفعل عادةً؟ استخدم s := 'Birthday:'+IntToStr(iYear)+'.'+IntToStr(iMonth)+'.'+IntToStr(iDay);? هذا متعب حقا. عادتي هي إضافة ثابت csBirthDayFormat = 'Birthday: %d/%d/%d' في unt<project name>Consts.Pas لحفظ تنسيق العرض، ثم استخدام s := Format(csBirthDayFormat, [iYear, iMonth ، iDay])؛ مثل هذه البيانات تكمل تجميع البيانات. ميزة القيام بذلك واضحة، أي أنك تحتاج فقط إلى الحفاظ على تنسيق عرض البيانات في مكان واحد.
وظيفة التنسيق قوية وأنا أوصي بها بشدة.
ستة. حول تخزين ملفات التسجيل أو INI
في الأصل، عادةً ما كنت أستخدم TRegistry للوصول إلى السجل، وTIniFile للوصول إلى ملفات Ini. يختلف استخدام هاتين الفئتين، لذا يكاد يكون من المستحيل استخدام نفس الرمز للوصول إلى السجل وملف Ini. يا له من صداع!
وأخيرا وجدت المنقذ وهو فئة TRegistryIniFile. وبالنظر إلى وحدة التسجيل، نجد أن TRegistryIniFile يرث من TCusomIniFile. يرث TIniFile أيضًا من TCusomIniFile. لذلك، فإن استخدام الفئة المجردة TCusomIniFile للوصول إلى السجل أو ملف Ini هو ضرب عصفورين بحجر واحد. على سبيل المثال:
فار
csmIniFile:TCusomIniFile;
يبدأ
إذا كان blUseIniFile ثم // إذا كنت تستخدم ملف Ini
csmIniFile:= TIniFile.Create(csRootKey)
آخر
csmIniFile:= TRegistryIniFile.Create(csRootKey);
// ثم يمكنك استخدام csmIniFile للوصول إلى ملف Ini.
// أو قم بالوصول إلى السجل بطريقة مشابهة للوصول إلى ملف Ini.
سبعة. حول تدفقات TStream وTFileStream وTMemoryStream وما إلى ذلك.
يرث كل من TFileStream وTMemoryStream من الفئة المجردة TStream، مما يعني أنه يمكننا استخدام مجموعة من الرموز لإكمال عمليات الوصول إلى الملفات والذاكرة. لذلك، عند تعريف بعض الواجهات، أميل إلى تعريف أنواع المعلمات كفئات مجردة بدلاً من فئات محددة. على سبيل المثال، يتم تعريف وظيفة لإكمال وظيفة الحفظ على أنها
وظيفة حفظ (AStream: TStream): منطقية؛
مما تم تعريفه على أنه
وظيفة حفظ (AStream: TFileStream): منطقية؛
كن أكثر مرونة.
والتعريف السابق تطلعي لأنه يمكن تطبيقه على أنواع جديدة من التدفقات التي قد تظهر في المستقبل. ينطبق التعريف الأخير فقط على التدفقات مثل TFileStream (بما في ذلك الفئات الفرعية من TFileStream، بالطبع)، وهو أكثر صرامة بكثير.
عادتي: إذا كان هناك فئة مجردة، فحاول تحديد المعلمات كنوع الفئة المجردة، بعد كل شيء، لا يمكننا التنبؤ بالمستقبل.
ثمانية. استخدم TAction أكثر
قدمت دلفي 4 والإصدارات الأحدث مفهوم الإجراء، وأضافت مكون TActionList إلى شريط المكونات القياسي. تتمثل ميزة استخدام الإجراء في اختفاء المخاوف المتعلقة بمزامنة حالة التحكم!
المزيد من المقالات
Musicwind®@HangZhou.Zj.China