مقالة تقنية

تعيين تنسيق TDateTimePicker في Delphi 5

· برمجة Delphi

أثناء إضافة توافق Delphi 5 إلى عينة VCL قديمة، فشل المشروع عند سطر طبيعي تماما في إصدارات Delphi الأحدث. حاول الكود إسناد نمط تاريخ مخصص مباشرة إلى خاصية TDateTimePicker.Format .

1
DateTimePicker.Format := 'MM/dd/yyyy';

TDateTimePicker هو غلاف VCL حول عنصر تحكم Windows العام. تعرض إصدارات Delphi الأحدث خاصية Format مريحة، لكن Delphi 5 لا يفعل ذلك. في Delphi 5 وما قبله يتبع عنصر التحكم عادة إعدادات التاريخ الإقليمية في Windows ما لم ترسل رسالة عنصر التحكم العام مباشرة.

استخدم common-control API في Delphi 5

إصلاح التوافق هو استدعاء DateTime_SetFormat من وحدة CommCtrl في Delphi 5، مع إبقاء إسناد الخاصية المباشر للمترجمات الأحدث. أضف CommCtrl إلى عبارة uses عند ترجمة فرع Delphi 5.

1
2
3
4
5
{$IFDEF D5}
DateTime_SetFormat(DateTimePicker.Handle, PChar('MM/dd/yyyy'));
{$ELSE}
DateTimePicker.Format := 'MM/dd/yyyy';
{$ENDIF}

ملاحظات عملية

تستخدم سلسلة التنسيق صياغة Windows date-time picker، وليس كل رموز تنسيق Delphi. أبق النمط بسيطا واختبره على جهاز بإعدادات إقليمية مختلفة إذا كان التطبيق سينشر دوليا.

إذا كنت تحتفظ بكود عينة مشترك عبر Delphi 5 وDelphi 6 وإصدارات Delphi الحديثة، فاعزل هذا الفرع خلف رمز مترجم مثل D5. هذا يبقي الكود الحديث مقروءا مع توثيق حل عنصر التحكم العام القديم.

قائمة تحقق للتوافق

  • أضف CommCtrl فقط حيث يحتاج فرع Delphi 5 إلى DateTime_SetFormat.
  • مرر مقبض picker، وليس مقبض النموذج.
  • أبق سلسلة التنسيق حية أثناء الاستدعاء بتمرير literal عادي أو متغير مستقر.
  • تحقق من التاريخ المعروض في لغة Windows الهدف.

لماذا لا يكفي ShortDateFormat

تغيير متغيرات تنسيق التاريخ العامة في Delphi لا يغير بشكل موثوق date-time picker المدعوم بعنصر تحكم Windows العام. يرسم picker وفقا لإعدادات عنصر التحكم والرسائل التي يتلقاها. لذلك فإن DateTime_SetFormat هو طبقة التوافق الصحيحة لـ Delphi 5.

هذا الفرق مهم في مشاريع العينات القديمة لأنها غالبا تترجم عبر عدة إصدارات Delphi. قد يكون سطر نظيفا في Delphi 7 أو Delphi 2009 غير موجود في Delphi 5، بينما قد تبقى رسالة Windows common-control متاحة. يسمح التجميع الشرطي لكل مترجم باستخدام المسار الأكثر طبيعية.

اختبار توافق الإصدارات القديمة

بعد تطبيق الحل، اختبر قيمة العرض والقيمة المحفوظة. يؤثر التنسيق فيما يراه المستخدم؛ ولا ينبغي أن يغير قيمة TDateTime الأساسية المستخدمة في الحسابات. هذا الفصل مهم في أوامر الشراء والفواتير وتصدير الجداول حيث يجب أن يبقى تنسيق العرض وقيم التاريخ الرقمية متسقين.

افحص النموذج أيضا بعد إعادة إنشاء مقبض النافذة. قد تفقد بعض عناصر VCL حالة عنصر التحكم الأصلي إذا دمر المقبض وأنشئ مرة أخرى. إذا كان تطبيقك يغير الأنماط أو الآباء وقت التشغيل، فطبق التنسيق بعد توفر المقبض.

ملاحظة صيانة طويلة الأمد

عندما لا يعود المشروع بحاجة إلى دعم Delphi 5، أزل الفرع الشرطي وأبق إسناد خاصية Format المباشر. وحتى ذلك الحين، أبق كود التوافق قريبا من إعداد عنصر التحكم بدلا من إخفائه في منطق أعمال غير متعلق. هذا يوضح أن الحل موجود بسبب قيد في عنصر VCL، لا بسبب حساب أمر الشراء نفسه.