باستخدام نفس الأمثلة التي أوردتها، لنفرض أن لدي قائمة ببيانات لأشخاص،
وأردت أن أحتفظ بها في ذاكرة الجهاز، وأن تكون مربوطة بعناصر لدي في واجهة الاستخدام. البيانات كالتالي :
الاسم، العمر
ونجعل لها التركيبة Structure التالية كما أوردتها:
ثم نعرف متغير myRecord من نوع التركيبة ذاتها، ومتغير أخر يكون مؤشر Pointer
لنفس نوع التركيبة وهو ^TMyRecord:
الآن لدي شجرة TreeView و أردنا لكل بند في الشجرة أن يمثل شخصا، بكتابة اسم الشخص في فرع Node من فروع الشجرة.
الطريقة العادية أن أقدم التوليف التالي:
يمكنني بدلا من ذلك وضع الاسم كما سبق وزيادة أن أربط هذا الفرع بتركيبة البيانات التي تخصه كاتالي:
وأكرر هذا مع بيانات كل شخص.
إذا أردت معرفة البيانات المربوطة بأي فرع في الشجرة أقوم بالتالي:
طبعا،عند الانتهاء من التعامل مع الشجرة أو غلق البرنامج يجب التخلص Dispose من الحجوزات التي قمنا يها في في الذاكرة:
أتمنى أن يكون الشرح مفهوما. وجاهز لتوضيح أية نقطة إذا كان بمقدوري.
ملاحظة: لم أجرب الكود فعذرا إذا وجدت أية أخطاء.
وأردت أن أحتفظ بها في ذاكرة الجهاز، وأن تكون مربوطة بعناصر لدي في واجهة الاستخدام. البيانات كالتالي :
الاسم، العمر
ونجعل لها التركيبة Structure التالية كما أوردتها:
PHP كود :
type
TMyRecord = Record
name : String;
age : Integer;
end;
لنفس نوع التركيبة وهو ^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);أتمنى أن يكون الشرح مفهوما. وجاهز لتوضيح أية نقطة إذا كان بمقدوري.
ملاحظة: لم أجرب الكود فعذرا إذا وجدت أية أخطاء.

