تعتبر Delphi مريحة وسريعة لتطوير تطبيقات C/S لأنها تحتوي على عدد كبير من إمكانية الوصول إلى البيانات سهلة الاستخدام وعناصر التحكم في البيانات. ومع ذلك ، من الصعب دائمًا الكمال. عند إنشاء عنصر واجهة مستخدم ، فإن الخطوة الأكثر أهمية هي تحديد الفئة الأصل الصحيحة ، والتي يمكن أن تقلل من كتابة الرمز. تحتوي مكتبة مكونات Delphi بالفعل على مكون TdatetImePicker ، والذي يمكنه بسهولة الدخول وتغيير التواريخ والوقت عن طريق سحب التقويم أو استخدام زيادة وتناقص Spinbutton ، ولكن ليس لديها القدرة على الإحساس بالبيانات. لذلك ، يمكننا أن نأخذها كفئة الأصل ونستمد عنصر تحكم جديد ، بالإضافة إلى وظيفة مدركة للبيانات يمكنها التواصل مع مجموعة البيانات. تتفاعل عناصر التحكم في البيانات مع كائنات DataLink ، لذا فإن إضافة وعي البيانات إلى عنصر التحكم يتطلب إنشاء كائن tdatalink (أو فئة مشتقة) كعضو في التحكم ، وإنشاء خصائص ملعب البيانات العامة للسيطرة ؛ إلى كائن tdatalink ondatachange و onupdatedata. فيما يلي رمز المصدر الرئيسي لعنصر التحكم ، مع التعليقات المقابلة: {حدد فئة TDBDateTime المستمدة من TdatetImePicker. لاحظ أنه يجب إضافة DB إلى استخدامات واجهة الوحدة ، مرجع DBCTRLS}
TDBDateTime = فئة (tdatetimepicker)
خاص
fdatalink: tfielddatalink ؛
// tfielddatalink هي فئة مشتقة من tdatalink تتولى تفاعل حقل واحد مع مصدر بيانات
الإجراءات الإجراءات (المرسل: TOBJECT) ؛
// عندما يتم تشغيل حدث OnDatachange عندما يتغير سجل مجموعة البيانات (مثل سجل التصفح) ، سيتم استخدام Datachange كمقبض معالجة الأحداث للحدث
storeureUpdatedata (المرسل: tooject) ؛
// يتم تشغيل حدث Onupdatedata قبل تحديث مجموعة البيانات ، وسيتم استخدام updatedata كمقبض معالجة الأحداث لهذا الحدث
functiongetDataSource: tdatasource ؛
الإجراءات etwatsource (القيمة: tdatasource) ؛
FunctionGetDatafield: سلسلة ؛
الإجراءات etwatdatafield (القيمة: سلسلة) ؛
الإجراءات الإجراءات (varmessage: tcmexit) ؛ رسالة cm_exit ؛ // تومس رسالة cm_exit عندما يفقد عنصر التحكم التركيز
محمية
الإجراءات الإجراءات ؛ override ؛ // onChange حدث يتم تشغيله عندما يتغير التاريخ والوقت في التحكم.
الإجراء (Acomponent: tcomponent ؛
العملية: العلوب) ؛ تجاوز ؛
// تقوم IDE من Delphi بإخطار عناصر التحكم الأخرى عند إزالة عنصر تحكم من النموذج
عام
ConstructorCreate (Oenler: tcomponent) ؛ تجاوز ؛
Destructordestroy ؛ تجاوز ؛
lish
PropertyDatasource: TdatasourcereadgetDataSource
kinpesetDataSource ؛ // إضافة خاصية مصدر البيانات إلى عنصر التحكم بحيث يمكن توصيلها بمكون مصدر البيانات
PropertyDatafield: StringReadgetDatafield
يكتب ديداتافيلد ؛
End ؛ // إضافة سمة حقل البيانات إلى عنصر التحكم ،
اجعله يشير إلى كائن Tfield الذي يمثل حقلًا
الإجراءات ؛ // تسجيل مكون
تطبيق
الإجراءات. cmexit ؛
يبدأ
يحاول
fdatalink.updaterecord ؛
// تحديث مجموعة البيانات عندما يفقد عنصر التحكم التركيز ، والذي سيؤدي إلى حدوث حدث Onupdatedata
يستثني
setfocus
يرفع؛
نهاية؛
DOEXIT
نهاية؛
constructOrtDbDateTime.create (Oenler: tcomponent) ؛
يبدأ
وراثي (مالك) ؛
// إنشاء كائن Datalink ، Mount OnDatachange ،
مقبض معالجة الأحداث Onupdatedata
fdatalink: = tfielddatalink.create ؛
fdatalink.ondatachange: = datachange ؛
fdatalink.onupdatedata: = updatedata ؛
نهاية؛
DestRuctorTDBDateTime.destroy ؛
يبدأ
fdatalink.ondatachange: = nil ؛
fdatalink.onupdatedata: = nil ؛
fdatalink.free ؛
وراثي DeritedDestroy.
نهاية؛
functionTDBDATETIME.GETDATASOURCE: tdatasource ؛
يبدأ
النتيجة: = fdatalink.datasource ؛
نهاية؛
الإجراءات debdateTime.setDatasource (القيمة: tdatasource) ؛
يبدأ
fdatalink.datasource: = value ؛
نهاية؛
functionTDBDATETIME.GETDATAFIELD: سلسلة ؛
يبدأ
النتيجة: = fdatalink.fieldname ؛
نهاية؛
الإجراءات debdateTime.setDatafield (القيمة: سلسلة) ؛
يبدأ
fdatalink.fieldname: = value ؛
نهاية؛
الإجراءات.
يبدأ
DateTime: = الآن ؛
// إذا كان عنصر التحكم متصلاً بمجموعة البيانات النشطة ، فستتغير مجموعة البيانات
يعرض عنصر التحكم قيمة الحقل المقابلة للسجل الحالي
iffdatalink.field Nilthen
iffdatalink.field.text ثم
DateTime: = fdatalink.field.asdatetime ؛
نهاية؛
الإجراءات.
يبدأ
fdatalink.field.asdatetime: = dateTime ؛
// قم بتحديث الحقول المقابلة مع التاريخ والوقت في عنصر التحكم
نهاية؛
الإجراءات.
يبدأ
// قم بتعيين مجموعة البيانات لتحرير الحالة عندما يغير المستخدم المحتوى في عنصر التحكم
fdatalink.modified ؛
ifnotfdatalink.editingthen
fdatalink.edit ؛
الموروثة
نهاية؛
الإجراءات.
tcomponent ؛ العملية: Toperation) ؛
يبدأ
inlorditedNotification (Acomponent ، التشغيل) ؛
// عندما يكون tdatasource متصلاً بالتحكم
قم بتعيين خاصية مصدر البيانات الخاص بالسيطرة على الفراغ عند حذفها
إذا (العملية = opremove) و (fdatalink nil)
و (Acomponent = dataSource) ثم
مصدر البيانات: = لا شيء ؛
نهاية؛
الإجراء
يبدأ
registerComponents (DataControls ،
[TDBDateTime]) ؛ // بعد تسجيل التحكم ، يتم تثبيته على صفحة DataControls
نهاية؛
نهاية.
بعد التثبيت ، يمكن لهذا التحكم سحب التقويم وزيادة أو يقلل من الحقول والوقت لقاعدة البيانات ، ويمكن أن يعرض تواريخ في تنسيقين ، وهو مريح وعملي. الضوابط آمنة وموثوقة في Delphi3 و Delphi4.