EasyDelphi Q&A
0 تصويتات
40 مشاهدات

مرحباً
لدي نمط من الشكل
 

  TOnChange<T> = procedure(ASender:TObject; ANew, AOld: T);

ولدي نمط من الشكل:

  TNotifyEventWrapper<T> = class(TComponent)
  private
    FProcedures: TList<TOnChange<T>>;
    FNew: T;
    FOld: T;
  public
    constructor Create(Owner: TComponent);
  published
    procedure ExecuteEvents(Sender: TObject);
    procedure AddEvent(AProc:TOnChange<T>);
  end;

قمت بإنشاء اجراء من الشكل: 

procedure TForm2.ShowMessage3(ASender:TObject;ANew,AOld:string);
begin
  ShowMessage(ANew + ', ' + AOld);
end;

وعند محاول اضافة هذه الاجراء الاخير الى قائمة الاجراءات هكذا 

procedure TForm2.FormCreate(Sender: TObject);
var
  LNot: TNotifyEventWrapper<string>;
begin
  LNot := TNotifyEventWrapper<string>.Create(Self.Button1);
  LNot.AddEvent(Self.ShowMessage3);
end;

يحدث خطأ في السطر الاخير وهو المسؤول عن اضافة الاجراء الى قائمة الاجراءات 

[dcc32 Error] Unit2.pas(69): E2009 Incompatible types: 'regular procedure and method pointer'

كيف يمكنني حل هذه المشكلة؟
ودمتم سالمين.
 

سُئل في تصنيف vcl بواسطة (2,080 نقاط) | 40 مشاهدات

1 إجابة واحدة

+1 تصويت
أفضل إجابة

اعتقد المشكلة هي في AddEvent . والبرمتر يجب ان يكون بوينتر لاجراء . انت تمرر انستنس الاجراء وليس البوينتر . الحل يجب ان يكون بتعديل هذا السطر .

TOnChange<T> = procedure(ASender:TObject; ANew, AOld: T) of Object;

ملاحظة : لم اقم بتجربة للتاكد . 

تم الرد عليه بواسطة (25,980 نقاط)
مختارة بواسطة
نعم صحيح هذا التعديل قد حل المشكلة وأيضاً باستخدام reference to procedure قد حلّ المشكلة ايضاً، شكراً لك.
انتبه الـ reference to procedure هيك صار Anonymous method . وممكن تظهر مشكلة عدم وصول لبعض الاوبجكتات من داخله.
لم أفهم، من هو الذي لن يتمكن من الوصول الى بعض الاوبجيكتات في داخل هذا الاجراء؟
اجراء الـ anonymous الـ scope الخاص به مختلف . يعني لو كان داخل الاجراء مثلا تغيير caption لمكون مثلا في النافذة . قد لا تستطيع الوصول لهذا المكون .
المقصد فقط انتبه لان هذ الاجراء هو anonymous اذا استخدمت reference to procedure .
تمام يعطيك العافية.

اسئلة متعلقة

+4 تصويتات
1 إجابة
سُئل يوليو 13، 2018 في تصنيف vcl بواسطة Ahmed02dz (410 نقاط) | 401 مشاهدات
0 تصويتات
1 إجابة
0 تصويتات
2 إجابة
ادعُ اصدقائك في الفايسبوك لمشاركتك
Comodo SSL

مرحبًا بك إلى EasyDelphi Q&A، حيث يمكنك طرح الأسئلة والحصول على الإجابة عليها من المستخدمين الآخرين.

لا يسمح بطلب او السؤال عن كراك او تفعيل او كسر او فك او اي شيء يخالف اتفاقيات الترخيص  مهما كان السبب ومهما كان البرنامج ونوعه. ولا حتى نشر روابط تحتوي على مثل هذه الاشياء لا في الاسئلة ولا في الاجابات ولا التعليقات . نهائيا

396 سؤال
634 إجابة
1,130 تعليق
237 مستخدم