PDA

View Full Version : کمک برای MDIChild و خواندن مقادیر کامپوننت های آن



delphi77
چهارشنبه 09 اسفند 1385, 20:16 عصر
یک فرم MDIChild دارم یک فرم normal را روی آن showmodal می کنم


مشکل
دیگه نمی توانم آبجکتهای روی فرم زیری را حتی بخونم؟

babak869
چهارشنبه 09 اسفند 1385, 21:06 عصر
سلام
ببینید قاعده کلی فرمهای والد و فرزند اینه که در زمان اجرای برنامه فقط فرو پدر تولید و نمایش داده میشه و زمانی که کاربر فرمهای دیگه رو درخواست میکنه اون فرم ســـــــــــــــــاخته و اجرا میشه . پس شما از فرمی که ساخته نشده نباید انتظار داشته باشید که به متدها و کلاسهای اون دسترسی داشته باشید و این کاملا طبیعیه . اگه بخواهید به اجزای فرمهای دیگه در یک پروژه دسترسی داشته باشید نباید از شیوه پدر و فرزند استفاده کنید .البته برای پروژه های بزرگ با تعداد فرمهای زیاد توصیه میشه که حتما برنامه رو بصورت پدر و فرزند تهیه کنید تا مقدار حافظه کمتری اشغال بشه و برای کاربر اجرای اون راحت تر باشه(البته این نظر شخصیه !! )
موفق باشیدش

delphi77
پنج شنبه 10 اسفند 1385, 12:08 عصر
ببینید من فرم فرزند را می سازم بعد از داخل فرم فرزند یک فرم نرمال را showmodal می کنم و با اینکه فرم فرزند ساخته شده به کامپوننتهای آن دسترسی ندارم. من فکر کردم شاید کسی تابحال به این مشکل برخورد کرده باشد و بتواند مشکل من را حل کنه.

البته خودم راهی پیدا کردم که مشکل را حل می کنه ولی فکر می کنم راه ساده تری هم باشه که از شما کمک خواستم

راه حل من:
MainForm.MDIChildren[0].FindComponent

m-khorsandi
پنج شنبه 10 اسفند 1385, 15:47 عصر
ببینید من فرم فرزند را می سازم بعد از داخل فرم فرزند یک فرم نرمال را showmodal می کنم و با اینکه فرم فرزند ساخته شده به کامپوننتهای آن دسترسی ندارم. من فکر کردم شاید کسی تابحال به این مشکل برخورد کرده باشد و بتواند مشکل من را حل کنه.

کدی که برای ساختن، نمایش و دسترسی به اشیاء فرم مورد نظر نوشتی رو اینجا بنویس.

delphi77
پنج شنبه 10 اسفند 1385, 20:27 عصر
من کدم که مشکلی نداره !
شما یک پیشنهاد بدید که راه ساده تر باشه و در ضمن فکر می کنم چیزی که نوشتم خیلی واضحه
راه حل من:
MainForm.MDIChildren[0].FindComponent

V60
جمعه 11 اسفند 1385, 02:00 صبح
منظور جناب خرسندی این است که در اول این تاپیک که نوشته اید نمی شود مقدار ها را خواند به چه صورت عمل می کنید؟

ghabil
جمعه 11 اسفند 1385, 03:08 صبح
من کدم که مشکلی نداره !
شما یک پیشنهاد بدید که راه ساده تر باشه و در ضمن فکر می کنم چیزی که نوشتم خیلی واضحه
راه حل من:
MainForm.MDIChildren[0].FindComponent

فکر میکنم مشکلت اینه که متغیر گلبال برای قرم چیلدرنت نداری، خب اگر میدونی واقعا فرمت از چه کلاسیه (یعنی مثلا میدونی TForm1هست ) میتونی تایپ کستش کنی :



( MainForm.MDIChildren[0] asTForm1).Edit1.Text := 'TestVal'


فقط حواست باید به ترتیبها باشه دیگه.

اکر هم زیاد با فرمه کار داری که یک پراپرتی تو MainForme ت بگیر تابع Get رو بکن که این فرم رو برگردونه :


property Form1 : TForm1 read GetForm1;

function GetFrom1 : TForm1;
begin
Result := MDIChildren[0] asTForm1
end;

بعدا هرجا خواستیش :
MainForm.Form1.Edit1.Text