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

كود :
https://www.upload.ee/files/11685767/New_folder.rar.html
الرد
#2
السلام عليكم

PHP كود :
Frame2.Button1.Caption := 'Test'
:: من يملك المعلومة يملك الميدان :: 
الرد
#3
(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 
ان شاء الله يكون توضح السؤال
الرد
#4
أنت تحاول تغيير قيمة في الكلاس أو القالب, tframe3 هي فقط قالب وخصائصها موضوعة في ملف unit3.dfm, لا يمكنك الوصول الى button مباشرة
أي لا يمكنك مثلا أن تغير على الكلاس مباشرة يجب أن تنشئ object ل tframe3, لاحظ في unit1 في الفورم وضعت frame3 وتلقائيا لما الفورم3 تنشأ تنشئ معها object للمكونات التي عليها.

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

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

شكرا على الشرح , ما الحل ؟ اذا امكن مثال بسيط وشكرا
الرد
#6
حل ماذا؟ لم لا تغيره مباشر على form1؟ لو بينت اكثر مالذي تريد تحقيقه حتى نحاول ايجاد حل.
الرد
#7
انا حاولت ووجدت هذا الحل لكن لا ادري اهو حل جيد ام لا
في 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';
الرد
#8
المتغير frame31 الذي على الفورم ليس هو frame3 الذي في frame2, لقد غيرت خاصية في button التابع للمتغير frame31 في الفورم الرئيسي.

على ما يبدو هو كان يريد أن يغير على frame3 المصدر وكان يظن انه لو غير في شيء من frame3 سيتغير اي frame آخر ما دام يرث من نفس الاطار وهو TFrame3.
الرد
#9
(13-05-2020, 12:06 AM)sofiane201 كتب : حل ماذا؟ لم لا تغيره مباشر على form1؟ لو بينت اكثر مالذي تريد تحقيقه حتى نحاول ايجاد حل.

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


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


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