delphi4arab منتديات دلفي للعرب
ما المشكلة بالكود التالي ؟ - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : ما المشكلة بالكود التالي ؟ (/showthread.php?tid=10831)

الصفحات: 1 2


ما المشكلة بالكود التالي ؟ - Rever7eR - 12-05-2020

السلام عليكم , لدي مشكل بال Frames .
لا يمكن الوصول لمكونات frame1  من Frame2 ما المشكل ؟

كود :
https://www.upload.ee/files/11685767/New_folder.rar.html



RE: ما المشكلة بالكود التالي ؟ - AX302 - 12-05-2020

السلام عليكم

PHP كود :
Frame2.Button1.Caption := 'Test'; 



RE: ما المشكلة بالكود التالي ؟ - Rever7eR - 12-05-2020

(12-05-2020, 11:01 PM)AX302 كتب : السلام عليكم

PHP كود :
Frame2.Button1.Caption := 'Test'; 

لم تفهم قصدي 
في الFrame2 في حدث الضغط على الزر TFrame2.Button1Click أريد أن اغير احد حصائص button خاص ب Frame3 هكذا : 

كود :
frame3.button1.Caption := 'Hello';

ليس في ال Main form في حدث TForm1.Frame21Button1Click 
ان شاء الله يكون توضح السؤال


RE: ما المشكلة بالكود التالي ؟ - sofiane201 - 12-05-2020

أنت تحاول تغيير قيمة في الكلاس أو القالب, tframe3 هي فقط قالب وخصائصها موضوعة في ملف unit3.dfm, لا يمكنك الوصول الى button مباشرة
أي لا يمكنك مثلا أن تغير على الكلاس مباشرة يجب أن تنشئ object ل tframe3, لاحظ في unit1 في الفورم وضعت frame3 وتلقائيا لما الفورم3 تنشأ تنشئ معها object للمكونات التي عليها.

أما الكود الذي في unit2 والذي وضعت فيه متغير من نوع tframe3 لن تستطيع الوصول اليه لأنه ليس في الذاكرة بعد أي ليس هناك انشاء له creation
وليس هو نفس frame الذي في unit1 كل واحد هو object في الذاكرة لا علاقة له باللآخر.


RE: ما المشكلة بالكود التالي ؟ - Rever7eR - 12-05-2020

(12-05-2020, 11:35 PM)sofiane201 كتب : أنت تحاول تغيير قيمة في الكلاس أو القالب, tframe3 هي فقط قالب وخصائصها موضوعة في ملف unit3.dfm, لا يمكنك الوصول الى button مباشرة
أي لا يمكنك مثلا أن تغير على الكلاس مباشرة يجب أن تنشئ object ل tframe3, لاحظ في unit1 في الفورم وضعت frame3 وتلقائيا لما الفورم3 تنشأ تنشئ معها object للمكونات التي عليها.

أما الكود الذي في unit2 والذي وضعت فيه متغير من نوع tframe3 لن تستطيع الوصول اليه لأنه ليس في الذاكرة بعد أي ليس هناك انشاء له creation
وليس هو نفس frame الذي في unit1 كل واحد هو object في الذاكرة لا علاقة له باللآخر.

شكرا على الشرح , ما الحل ؟ اذا امكن مثال بسيط وشكرا


RE: ما المشكلة بالكود التالي ؟ - sofiane201 - 13-05-2020

حل ماذا؟ لم لا تغيره مباشر على form1؟ لو بينت اكثر مالذي تريد تحقيقه حتى نحاول ايجاد حل.


RE: ما المشكلة بالكود التالي ؟ - taha moh - 13-05-2020

انا حاولت ووجدت هذا الحل لكن لا ادري اهو حل جيد ام لا
في frame2

تغير في الحدث onclick لل button1 بهذا الشكل
var
Form: TCustomForm;
begin
Form := GetParentForm(self);
TFrame3(Form.FindComponent('frame31')).Button1.Caption := 'Hello';



او بهذا
var
Form: TCustomForm;
begin
Form := GetParentForm(self);
TButton(TFrame(Form.FindChildControl('frame31')).FindChildControl('Button1')).Caption := 'Hello';


او انك تقو بالتغير في FORM1 في الحدث ONCLICK مباشرة

frame31.button1.Caption := 'Hello';


RE: ما المشكلة بالكود التالي ؟ - sofiane201 - 13-05-2020

المتغير frame31 الذي على الفورم ليس هو frame3 الذي في frame2, لقد غيرت خاصية في button التابع للمتغير frame31 في الفورم الرئيسي.

على ما يبدو هو كان يريد أن يغير على frame3 المصدر وكان يظن انه لو غير في شيء من frame3 سيتغير اي frame آخر ما دام يرث من نفس الاطار وهو TFrame3.


RE: ما المشكلة بالكود التالي ؟ - Rever7eR - 13-05-2020

(13-05-2020, 12:06 AM)sofiane201 كتب : حل ماذا؟ لم لا تغيره مباشر على form1؟ لو بينت اكثر مالذي تريد تحقيقه حتى نحاول ايجاد حل.

لنفرض ان لدي برنامج به Frame اسمها Home و اخرى اسمها settings وواحدة database ... كيف يمكن لكل واحدة مخاطبة الاخرى , وضع الكود ف الفورم مباشرة ينتج عنه اخطاء اخرى . احد الاخطاء التي اواجهها , في ال Home هناك edit و في ال database هناك dbgrid , لا استطيع اضافة بيانات و اخطاء كثيرة اخرى .


RE: ما المشكلة بالكود التالي ؟ - sofiane201 - 13-05-2020

لم لا تستخدم الفورم ؟