الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

What Is a Callback

بدأه super_rio في 16 أبريل 2010 · 1 رد · 939 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

What Is a Callback

#2

من المعروف استخدام الاجراءات Procedures والدوال Functions لتنفيذ تعليمات برمجية بداخلها والفرق الاساسي بينهما ان الاخيرة تعود بقيمة

والاثنتين تأخد مدخلات Parameters بانواع مختلفة حسب الحاجة وفي بعض الحالات نحتاح للرجوع ليست بقيم انما بتنفيذ دالة اخري لها العديد من المدخلات ايضا وهي ما تمسى CallBack Function ، فهي عمليا دالة داخل دالة اخري ، وتمرر دالة Callback في الدالة الام كانها واحدة من المدخلات Parameters فهي توفر لديك مزيدا من المدخلات الاضافية التي تحتويها دالة Callback فاستخدامها ضرورة ملحة في حين التعامل مع دوال النظام API خاصة تلك التي تعود بعدد من البيانات الكثيرة والتي لاتتيح لنا دخول دالة النظام الاساسية API فلذلك هي الطريقة الوحيدة لذلك مع المثال التالي تكون الصورة اوضح .

لنفترض اننا نحتاج الحصول علي كافة النوافذ الفعالة في النظام Windows .

اولا سنتحاج لاعلان دالة CallBack Function

 function EnumWindowsFunc (Handle: THandle; List: TStringList): boolean; stdcall;

اما دالة النظام الاساسية API المسؤلة عن سرد النوافد والمعرفة داخل الوحدة Windows.pas

 function EnumWindows(lpEnumFunc: TFNWndEnumProc; lParam: LPARAM): BOOL; stdcall;

لو لاحظت المدخل lpEnumFunc: TFNWndEnumProc فهي دالة راجعة

اما جسم الدالة الرجعة Callback كما اعلنا عنها سابقا .

 function EnumWindowsFunc(Handle: THandle; List: TStringList) : boolean ; stdcall;
 var
   caption: array[0..256] of Char;
 begin
  if GetWindowText (Handle, Caption, SizeOf(Caption)-1) <> 0 then
  begin
   List.Add(Caption) ;
   SetWindowText(Handle, PChar('About - ' + Caption)) ;
  end;

  result :=True;
 end;

اما التنفيذ فسيكون بالشكل التالي

procedure TForm1.Button1Click(Sender: TObject) ;
 begin
  Memo1.Clear;
  EnumWindows(@EnumWindowsFunc, LParam(Memo1.Lines)) ;
 end;

وهو باستدعاء الدالة الام وتمرير الدالة الراجعة في اول مدخل لها .

اتمنى ان يكون الشرح واضح .

تحياتي

2

الإنسان الذي يقول بأنه لا يمكن عمل شيء يجب ألا يعيق مطلقاً الإنسان الذي يقوم بعمل ذلك الشيء.

إن تخطئ فأنت إنسان ... أما أن تلوم جهازك الكمبيوتر على خطأك فهذا أكثر إنسانية.

مواضيع مشابهة