السلام عليكم ورحمة الله وبركاته
كيف يعمل مؤشر من نوع سجل ؟
كود :
type
TMyRecord = Record
name : String[20];
age : Integer;
end;
var
myRecord : TMyRecord;
myRecordPtr : ^TMyRecord;
وكيف تتم هده العملية :
هل هو ينشئ سجل جديد ام يشير الى سجل جديد ومادا حدث لسجل القديم ؟
انا فاهم عن المؤشرات انها تحمل عنوان المتغيرات يعني لا نستطيع ان ننشئ متغير جديد بستخدام
المؤشرات
عندا إجراء هده العملية هل تتغير البيانات الموجودة في السجل الاصلي :
PHP كود :
myRecordPtr.name := 'Her indoors';
myRecordPtr.age := 55;
باستخدام نفس الأمثلة التي أوردتها، لنفرض أن لدي قائمة ببيانات لأشخاص،
وأردت أن أحتفظ بها في ذاكرة الجهاز، وأن تكون مربوطة بعناصر لدي في واجهة الاستخدام. البيانات كالتالي :
الاسم، العمر
ونجعل لها التركيبة 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);
أتمنى أن يكون الشرح مفهوما. وجاهز لتوضيح أية نقطة إذا كان بمقدوري.
ملاحظة: لم أجرب الكود فعذرا إذا وجدت أية أخطاء.
السلام عليكم ورحمة الله وبركاته
بارك الله فيك الله ينورك shagrouni
انا مبتدئ في لغة الدلفي
إقتباس :الآن لدي شجرة TreeView و أردنا لكل بند في الشجرة أن يمثل شخصا، بكتابة اسم الشخص في فرع Node من فروع الشجرة.
ممكن توضح كيف تحصلت على الشجرة و فروعها ؟
هل هدا كائن؟ماوضيفته ؟
إن كان عندك كتاب عن كيفية بناء هده الاشجار ممكن ترفقه لنستفيد منه
بارك الله فيك على المجهود الجبار :kick:
TreeView مكون تجده ضمن مجموعة Win32 في دلفي؟
طيب اخ shagrouni كيف استخدم خاصية AddChildObject اذا اردتها ان ترتبط بقاعدة بينات بحيث يظهر فيها حقل معين لكي ترتبط بقاعدة البيانات بواسطة حقل آخر
وللتوضيح اكثر
[URL="http://www.delphi4arab.net/forum/showthread.php?p=25973#post25973"]
هنا[/URL]
وشكراً جزيلاً