easyDelphi Q&A
0 تصويتات
33 مشاهدات

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

  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,070 نقاط) | 33 مشاهدات
 

1 إجابة واحدة

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

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

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

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

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

اسئلة متعلقة

+4 تصويتات
1 إجابة
سُئل يوليو 13، 2018 في تصنيف vcl بواسطة Ahmed02dz (410 نقاط) | 323 مشاهدات
0 تصويتات
1 إجابة
+1 تصويت
2 إجابة
+3 تصويتات
1 إجابة
سُئل أكتوبر 2، 2018 في تصنيف vcl بواسطة youcef (240 نقاط) | 53 مشاهدات
+3 تصويتات
2 إجابة
سُئل سبتمبر 26، 2018 في تصنيف vcl بواسطة Yamada Fakir (1,410 نقاط) | 62 مشاهدات
ادعُ اصدقائك في الفايسبوك لمشاركتك
Comodo SSL

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

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

324 سؤال
533 إجابة
928 تعليق
222 مستخدم