![]() |
|
المهام الجاهزة وحدث النقر للزر - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : مصادر دلفي مفتوحة تعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=14) +--- الموضوع : المهام الجاهزة وحدث النقر للزر (/showthread.php?tid=11356) |
المهام الجاهزة وحدث النقر للزر - Delphi4Us - 11-05-2021 السلام عليكم ورحمة الله ملاحظة فقط عند استخدام المكون 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 بالمكان المناسب من شفرتك |