Record pointers
#2
باستخدام نفس الأمثلة التي أوردتها، لنفرض أن لدي قائمة ببيانات لأشخاص،
وأردت أن أحتفظ بها في ذاكرة الجهاز، وأن تكون مربوطة بعناصر لدي في واجهة الاستخدام. البيانات كالتالي :
الاسم، العمر
ونجعل لها التركيبة Structure التالية كما أوردتها:
PHP كود :
type 
   TMyRecord 
= Record 
     name 
: String; 
     
age  : Integer; 
   
end; 
ثم نعرف متغير myRecord من نوع التركيبة ذاتها، ومتغير أخر يكون مؤشر Pointer
لنفس نوع التركيبة وهو ^TMyRecord:

PHP كود :
var 
   
myRecord    : TMyRecord; 
   
myRecordPtr : ^TMyRecord; 

الآن لدي شجرة TreeView و أردنا لكل بند في الشجرة أن يمثل شخصا، بكتابة اسم الشخص في فرع Node من فروع الشجرة.
الطريقة العادية أن أقدم التوليف التالي:

PHP كود :
TreeView1.Items.AddChild(ParentNode, ‘Ahmad Ali’); 

يمكنني بدلا من ذلك وضع الاسم كما سبق وزيادة أن أربط هذا الفرع بتركيبة البيانات التي تخصه كاتالي:

PHP كود :
New(myRecordPtr);  // حجز مكان جديد في الذاكرة
    
myRecordPtr^.Name := ‘Ahmad Ali’;  // تعبئة التركيبة 
    
myRecordPtr^.Age := 28;
    
NewNode :=  TreeView1.Items.AddChildObject(ParentNode,
                                    
myRecordPtr^.Name // ‘Ahmad Ali’, 
                                    
myRecordPtr); 

وأكرر هذا مع بيانات كل شخص.
إذا أردت معرفة البيانات المربوطة بأي فرع في الشجرة أقوم بالتالي:

PHP كود :
Var
  
AName: string;
  
Num: integer;

If 
Node.Data <> nil then
Begin
  AName 
:= TMyRecord(Node.Data)^.Name ; // صبّ البيانات في قالب التركيبة واستخراج جزئية الإسم
  
Num := TMyRecord(Node.Data)^.Num ;
End; 

طبعا،عند الانتهاء من التعامل مع الشجرة أو غلق البرنامج يجب التخلص Dispose من الحجوزات التي قمنا يها في في الذاكرة:

كود :
for i := 0 to TreeView1.Items.Count -1 do if TreeView1.Items[i].Data <> nil then Dispose(TreeView1.Items[i].Data);


أتمنى أن يكون الشرح مفهوما. وجاهز لتوضيح أية نقطة إذا كان بمقدوري.

ملاحظة: لم أجرب الكود فعذرا إذا وجدت أية أخطاء.
الرد


الردود في هذا الموضوع
Record pointers - بواسطة abdelmalek - 16-03-2010, 06:39 AM
Record pointers - بواسطة shagrouni - 16-03-2010, 06:12 PM
Record pointers - بواسطة abdelmalek - 19-03-2010, 02:44 PM
Record pointers - بواسطة shagrouni - 19-03-2010, 08:09 PM
Record pointers - بواسطة محمد الدرة - 31-03-2011, 11:14 AM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم