نقل الكتابة من (Edit1) الى(ListBox1) (للمبتدئين)
#1
اقدم لكم مضوعي الاول وهو نقل الكتابة الموجودة على (Edit1) الى(ListBox1) ونبدا:
اولا تضع العناصر(Button1\Edit1\ListBox1) وثانيا تكتب التعليمةالتالية في حدث الضغط على الازر (Button1)
التعليمة:
PHP كود :
ListBox1.Items.Add(Edit1.Text); 
الرد
#2
الأخ K.Hossam16 مرحبا بك في المنتدى
أخي K.Hossam16 أحسن ما يبدؤ به اسم الله عز وجل Smile
فالسلام عليكم ورحمة الله
إقتباس :يا اخ K.Hossam16 لا اقصد الاهانة وكلنا مبتدئين في عالم البرمجة لكن منا رجاء ان تكون المواضيع المطروحة اكثر جدية
ممم... طيب.
لنتعاون ونجعل الموضوع أكثر جدية...
أخي K.Hossam16 ما معنى الكود الآتي؟
PHP كود :
ListBox1.Items.AddObject(Edit1.Text, Edit1); 
وما الفرق بينه وبين الذي كتبته؟
وما الفائدة منه؟
سبق هذا في المنتدى باستخدام مكون آخر، استخدم البحث.
تحياتي، بالتوفيق Smile
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#3
اظن مافيه فرق على قولهم
كل الطرق تودي الى دلفي العرب Smile
الرد
#4
إقتباس :كل الطرق تودي الى دلفي العرب
لكن الاختلاف يقتضي المغايرة!
فأكيد هناك فرق.
إقتباس :كنت اود ان اقوم بالاجابة ولكن الاخ kachwahed قد سأل الاخ k.hossam16
والسابقون السابقون... تفضل أخي ramijz Smile
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#5
بسم الله الرحمن الرحيم

تكرم عيونك اخي kachwahed

طبعا لست ضليع في الشرح لكن سوف احاول جاهداً ان اوصل المعلومة بشكل سهل وبسيط

اولاً :
معنى الكود :
PHP كود :
ListBox1.Items.AddObject(Edit1.Text, Edit1); 

هذا يذكرني بالمؤشرات Pointers ايام الباسكال التي لم نعد نستخدمها كثيرا في حياتنا البرمجية الا ماندر

للوهلة الاولى نظن بأن التعليمة السابقة تعمل عمل المنهج Add يعني اضافة النص الى ListBox
ولكن مع قليل من التروي نرى بأننا قمنا باضافة نص والذي يمثل قيمة Edit1.Text الى listbox ليشير الى الكائن Edit1 .

الى الان الامور ليست واضحة تماما للقارئ لا بأس سوف اكمل الشرح لكن تمهلوا قليلاً :

1 - المنهج Add يقوم باضافة نص من النوع string الى listbox وهذا امر معروف وبسيط

2 - المنهج AddObject يقوم بعمل Add مع اضافة بسيطة ولكن فعلها كبير وهي وضع مؤشر مع القيمة ليشير الى الموقع الذي يشير اليه العنصر Edit1 .

طيب هذا كلام جميل طالما اصبحت القيمة الموجودة في listbox تشير الى العنصر Edit1 كيف سوف اتعامل معها من خلال listbox ؟

بسيطة من خلال Type cast اي قلب الانواع

مثال : على فرض ان Edit1.text كان يوحي القيمة "Hallo" ونفذنا التعليمة
PHP كود :
ListBox1.Items.AddObject(Edit1.Text, Edit1); 

الان سوف نتعامل مع العنصر Edit1 من ListBox1 لتغيير لون العنصر Edit1 الى الاحمر
لاحظوا سحر الدلفي
PHP كود :
TEdit(ListBox1.Items.Objects[ListBox1.Items.IndexOf('Hallo')]).Color:=clRed; 

ماهذا مافعلت هذا يسمى قلب الانواع الذي حصل انني قمت بجلب العنوان الذاكري الذي تم تخزينه في القيمة Hallo والذي يشير الى العنصر Edit1 ثم قمت بتحويله من Tobject الى TEdit حتى استطيع الوصول الى الخاصية Color وقمت بعدها بتغيير اللون.

ياالله الفرق من الارض للسما

طيب لقد اطلت عليكم الشرح لكن هذه الامانة العلمية

**** من الله ان اكون قد افدت بشرحي هذا
الرد
#6
عظيم...
إقتباس :وما الفرق بينه وبين الذي كتبته؟
الآن نجيب على السؤال الثاني: من خلال شرح أخي ramijz يتضح أن المنهج AddObject فيه زيادة تخزين مؤشر على غرض TObject يمكن استخدامه لاحقا، وهذا الاستخدام هو الفائدة المرجوة من هذه الطريقة، وبهذا نكون قد أجبنا أيضا على السؤال الثالث.
مثال آخر من هنا.
الآن من يعطينا مثال لاستعمال آخر (بالتأشير على أشياء غير المكونات)؟
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#7
بسم الله,

اولا, شكرا للأخ K.Hossam16 على الموضوع, وبدآية موفّقة ان شاء الله,

ثانيا, بارك الله لك اخي كاش واحد و اخي ramijz, الرد كان بالفعل مفيد,

إقتباس :(بالتأشير على أشياء غير المكونات)؟

غير المكونات؟؟؟؟ مثل ماذا, اعطي فتّوشة دون ان تقول الجوآب, :laugh:

بالتوفيق للجميع,
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#8
طريقة اخرى :
كود :
ListBox1.AddItem(Edit1.Text, Edit1);
الرد
#9
السلام عليكم

اخي الحبيب mohfa
التعليمة
PHP كود :
ListBox1.AddItem(Edit1.Text, Edit1); 
جيدة ولكن ليست متوافقة مع كل اصدارات الدلفي فهي موجودة منذ الاصدار السادس من دلفي على مااذكر لذلك اعتماد التعليمة
PHP كود :
ListBox1.Items.AddObject(Edit1.Text, Edit1); 
افضل واحسن

والله اعلم
الرد
#10
أهلا بعودتك أخي AL-MOB4RM3G :clap2:
إقتباس :فتّوشة
فتّوشة: Undeclared identifier :blink:
أيا كانت...
المقصود بشيء آخر غير مكون مثلا السجلات Records
مثال:
PHP كود :
PMyRec = ^TMyRec;
TMyRec = record
  EdTitre
: String;
  
MemTexte: String;
end;
var
  
Form1: TForm1;
  
EcriRec: PMyRec;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
  
New(EcriRec);
  
EcriRec.EdTitre := Edit1.Text;
  
EcriRec.MemTexte := Memo1.Text;
  
ListBox1.AddItem(Edit1.Text, pointer(EcriRec));
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var 
LirRec: TMyRec;
begin
  LirRec 
:= pMyRec(ListBox1.Items.Objects[ListBox1.itemindex])^;
  
Edit1.Text := LirRec.EdTitre;
  
Memo1.Text := LirRec.MemTexte;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
  
if EcriRec <> nil then
  Dispose
(EcriRec);
end; 
شكرا لكم جميعا.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد


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


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