PDA

View Full Version : نمایش فرم



smart_boy
دوشنبه 30 فروردین 1389, 09:12 صبح
سلام
وقتی فرمی رو بخواهیم در فرم دیگر ، دستور نمایش می دهیم ، ابتدا Unit اون رو بهش اضافه می کنیم .با اینکار فقط فرم اول قادر به فراخوانی فرم دوم هست و این اتفاق همزمان برای دو فرم رخ نمی ده.

حالا سوال اینجاست که چگونه هر دو فرم هم دیگه رو ببینند بدون اینکه فرزند و والد باشند.

مثلا:رویداد کلیک دگمه
در فرم 1:
;form1.hide
;form2.show
و همزمان در فرم 2:

;form2.hide
;form1.show
ممنون

mehdimdp
دوشنبه 30 فروردین 1389, 10:06 صبح
من فکر نمی کنم راهی به غیر از اضافه کردن unit فرمها در یکدیگر باشد.
یعنی باید unit فرم 1 رو در فرم 2 و unit فرم 2 رو در فرم 1 یک uses کنید.

smart_boy
دوشنبه 30 فروردین 1389, 15:15 عصر
با اینکار ، پیغام خطای زیر در پنجره کامپایل داده می شه: :ناراحت:


[Fatal Error] Unit1.pas(7): Circular unit reference to 'Unit1'

اینهم نمونه این پروژه:

Mahmood_M
دوشنبه 30 فروردین 1389, 16:20 عصر
مشکل شما اینه که نام Unit1 و Unit2 رو به قسمت Uses در بخش Interface اضافه کردید درحالی که باید در قسمت Implementation این کار رو می کردید ...
وقتی Unit ای در قسمت Interface اضافه میشه ، سایر Unit هایی که در بخش Interface مربوط به Unit اضافه شده قرار دارند هم به Unit اولیه اضافه میشن ... :گیج:
مثلا در برنامه ی شما Unit1 به بخش Interface مربوط به Unit2 اضافه شده و Unit2 هم به بخش Interface مربوط به Unit1 اضافه شده ! وقتی کامپایلر دلفی به عبارت Unit2 در بخش Interface مربوط به Unit1 می رسه سعی میکنه Unit2 و همینطور Unit هایی که درون اون و در بخش Interface هستند رو هم به Unit1 اضافه کنه ! ، درواقع کامپایلر به جایی میرسه که باید Unit1 رو به خود Unit1 اضافه کنه ! ، پیغامی هم که نمایش داده میشه به خاطر همین هست ، معنی پیغام هم میشه " ارجاع دایره ای به Unit1 " ! یا چیزی شبیه به همین ...

برای اضافه کردن Unit ها به همدیگه باید اونها رو در بخش Implementation تعریف کنید :

...

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

...
البته بهتره این کار رو از طریق منوی File و انتخاب گزینه ی Use Unit انجام بدید و فرم مورد نظر رو انتخاب کنید ...

نکته ی دیگه اینکه ، معمولا برای Unit هایی که مربوط به فرم هستند و استفاده متقابل میشن ( مثلا فرم یک از فرم دو و فرم 2 از فرم یک استفاده میکنه مثل همین مثالی که گذاشتید ) بابد در قسمت Implementation تعریف بشن ولی اگر Unit مورد نظر صرفا مربوط به یک دستور یا چند تابع مشخص هست که باید در برنامه استفاده بشه می تونید اون رو به قسمت Uses در بخش Interface اضافه کنید ...

موفق باشید ...