المهام الجاهزة وحدث النقر للزر
#1
السلام عليكم ورحمة الله

ملاحظة فقط عند استخدام المكون ActionList او JvDatabaseActionList وهو الذي يقدم لك عمليات الاضافة والحفظ والتعديل والحذف جاهزة بنقرة زر
لاحظت ان الازرار بالمكونات الحديثة مثل مكونات StyleControl لا يمكنك استغلال حدث النقر للزر اذا كانت الخاصية Action للزر مرتبطة بالمكون المذكور
ما المشكلة في هذا ....؟
طبعا اذا اردت مثلا ان تظهر رسالة للمستخدم هل يوافق على عملية الحذف ام لا لن تستطيع ان تفعلها في حدث النقر للزر وسوف يتجاهل ما فيه ويحذف السجل بلا اي تنبيه
الحل الثانوي هو استخدام الحدث OnPeforeDelete لمكون الجدول او الاستعلام
ولكن هذا مزعج كثيرا خاصة اذا كنت تستخدم حاوية البيانات TDataModule فالزر يوجد بمكان والجدول بمكان اخر
والافضل هو ان يحمل كل زر برمجته الخاصة بدل توزيع الكود هنا وهناك
بالبحث عن سبب المشكلة وجدت ان الشركة تقوم بالغاء الحدث نقر للزر
للنظر الى الكود التالي للحدث نقر للزر الموجود بالوحدة scControls

كود :
procedure TscCustomButtonControl.ButtonClick;
begin
  if FDisableClick then Exit;

  if (csDesigning in ComponentState) or (csLoading in ComponentState) then Exit;

   if Assigned(FOnClick) and (Action <> nil) and (@FOnClick <> @Action.OnExecute)
   if Assigned(FOnClick) and (Action <> nil) and
     DelegatesEqual(@FOnClick, @Action.OnExecute)
  then
    FOnClick(Self)
  else
    if not (csDesigning in ComponentState) and (ActionLink <> nil)
    then
      ActionLink.Execute(Self)
     else
       if Assigned(FOnClick) then FOnClick(Self);
end;

كما هو واضح السطر التالي هو المسؤول عن هذه المشكلة

كود :
if Assigned(FOnClick) and (Action <> nil) and
      DelegatesEqual(@FOnClick, @Action.OnExecute)

حتى بحال هناك حدث نقر للزر يتم تنفيذ امر Action 
وكل ماعليك هو ايقاف هذا السطر عن العمل ووقتها سوف يتم تنفيذ ماهو موجود بحدث النقر مثل اظهار رسالة التنبيه وبعدها يجب ان تكتب امر الحذف
TableName.Delete
بالمكان المناسب من شفرتك
أن غبت يومًا وغآبت الآخبآر ،،، فالدعآء وصيةٌ بيننآ
[-] كل من 3 users say قال شكرا ل Delphi4Us على المشاركة المفيدة
  • invocker, Mr.DOS, أبو معاذ
الرد


التنقل السريع :


مستخدمين يتصفحوا هذا الموضوع: 1 ضيف