من این کارها را کردم.
دلفی 7 را باز کردم.
که خود به خود یک پروژه می سازد.
از منوی فایل new را زدم و بعد form را زدم تا پروژه صاحب دو فرم شود.
یک باتون به فرم 1 افزودم و کد زیر را درش گذاشتم تا بشود باهاش فرم 2 را فعال کرد:
بعد این کد را به برنامه افزودم:
یک باتون دیگر به فرم 1 افزودم و نوشتم :
حالا می رویم فرم 2.
یک باتون به فرم 2 افزودم و کد زیر را به آن افزودم:
کد:
ShowMessageFmt('number is %d', [form1.x]);
بار اول که play را بزنی میگه form1 را نمی شناسم. ولی بار دوم برنامه را اجرا می کند. و خط زیر هم در فرم 2 اضافه شده است:
در فرم 1 هم این اضافه شده:
بعد اجرای این برنامه اول باتون 2 فرم 1 را بزنید تا به x مقدار دهی بشود. بعد با باتون 1 فرم 1 می توانیم فرم 2 را نشان دهیم و بعد تنها باتون فرم 2 را می زنیم که مقدار x را برابر 2 نشان می دهد .
----------------
برای اینکه مقدار 2 در روی کپشن باتون نمایش داده بشه می توانیم بنویسیم:
کد:
procedure TForm2.FormShow(Sender: TObject);
begin
button1.caption := IntToStr (form1.x) ;
end;
یعنی رفتم پنجره ((آبجکت اینسپکتر)) و رویداد ONShow را دابل کلیک کردم تا این رویداد باز بشود که برایش کد بنویسم.
دلیل اینکه چرا از رویداد FormShow استفاده شده و نه از رویداد FormCreate را در پست بعد ببینید.
----------------
تحلیل: شاید اینجا ما متغیر x را عمومی فرم 1 تعریف کردیم و گلوبال نیست. منظور از گلوبال یعنی اینکه در همه فرم ها شناسایی شود. سئوال اینه که آیا در دلفی متغیر گلوبال نداریم؟
ما آمدیم با uses کردن از متغیرهای فرم دیگر استفاده کرده ایم.
شاید یک بحث این uses هاست. که در دلفی استفاده می شود و شاید باید نظم آنها را مراقب باشیم.
--------------
عکسی بعد اجرای برنامه گرفتم که عدد 2 را هم روی باتون فرم 2 و هم بعد زدن باتون می بینید(در ShowMessageFmt ).