السلام عليكم ورحمة الله
ملاحظة فقط عند استخدام المكون ActionList او JvDatabaseActionList وهو الذي يقدم لك عمليات الاضافة والحفظ والتعديل والحذف جاهزة بنقرة زر
لاحظت ان الازرار بالمكونات الحديثة مثل مكونات StyleControl لا يمكنك استغلال حدث النقر للزر اذا كانت الخاصية Action للزر مرتبطة بالمكون المذكور
ما المشكلة في هذا ....؟
طبعا اذا اردت مثلا ان تظهر رسالة للمستخدم هل يوافق على عملية الحذف ام لا لن تستطيع ان تفعلها في حدث النقر للزر وسوف يتجاهل ما فيه ويحذف السجل بلا اي تنبيه
الحل الثانوي هو استخدام الحدث OnPeforeDelete لمكون الجدول او الاستعلام
ولكن هذا مزعج كثيرا خاصة اذا كنت تستخدم حاوية البيانات TDataModule فالزر يوجد بمكان والجدول بمكان اخر
والافضل هو ان يحمل كل زر برمجته الخاصة بدل توزيع الكود هنا وهناك
بالبحث عن سبب المشكلة وجدت ان الشركة تقوم بالغاء الحدث نقر للزر
للنظر الى الكود التالي للحدث نقر للزر الموجود بالوحدة scControls
كما هو واضح السطر التالي هو المسؤول عن هذه المشكلة
حتى بحال هناك حدث نقر للزر يتم تنفيذ امر Action
وكل ماعليك هو ايقاف هذا السطر عن العمل ووقتها سوف يتم تنفيذ ماهو موجود بحدث النقر مثل اظهار رسالة التنبيه وبعدها يجب ان تكتب امر الحذف
TableName.Delete
بالمكان المناسب من شفرتك
ملاحظة فقط عند استخدام المكون 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
بالمكان المناسب من شفرتك
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم