مشاهده نسخه کامل
: دركِ تولد، زندگی و مرگ یك فرم دلفی
MasterData
26-02-2007, 08:36
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سلام
ببخشید که میگم.
اما اینطوری تبلیغ حساب میشه.
اگر میشه اون مطالب رو کپی بگیرید و منبع رو بنویسید
از زحماتتون ممنون.بای
خودم با اجازتون کپی کردم.
منبع : فروم برنامه نویس ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]).
موضوع : دركِ تولد، زندگی و مرگ یك فرم دلفی
دوره زندگی یك فرم دلفی
در ویندوز ، بیشتر عناصر رابط كاربر (User Interface) به صورت "پنجره" وجود دارد. در دلفی ، هر پروژه حداقل یك پنجره دارد؛ پنجره اصلی برنامه. همه پنجرههای برنامههایی كه با دلفی نوشته میشوند بر پایه شیئ TForm بنا شدهاند.
Form
شیئ فرم، بلوك اصلی ساختن برنامههای دلفی ست. فرمها property ها ، event ها و متدهای خودشان را دارند و توسط اینها میتوانید ظاهر و رفتار فرمها را كنترل كنید. یك فرم واقعاً یك كامپوننت دلفی هست ، اما متفاوت با سایر كامپوننتها؛ یك فرم در پلت كامپوننتها ظاهر نمیشود.
معمولاً ما برای ساخت یك فرم با new application شروع میكنیم (File | New Application) . به این شكل ، یك فرم جدید ساخته میشود و به عنوان فرم اصلی برنامه شناخته میشود (به صورت پیش فرض) و هم اولین فرمی ست كه در زمان اجرای برنامه ساخته میشود.
نكته : برای اضافه كردن فرمهای بیشتر به برنامه میتوانید از File | New Form استفاده كنید.
تولد فرم – Birth
OnCreate
این رویداد فقط و فقط یكبار، زمانی اتفاق میافتد كه یك شیئ از TForm در حافظه ساخته میشود . البته بعد از بسته شدن ، اگر حافظه مورد استفاده این فرم از بین برود، در تلاش بعدی برای ساختن فرم، دوباره این رویداد اتفاق میافتد. دستوراتی در فایل پروژه وجود دارد كه وظیفهشان ساختن فرم هست (البته این دستورات فقط برای فرمهایی هستند كه قرار هست به صورت خودكار ساخته شوند). زمانی كه ساختن فرم آغاز میشود اگر ویژگی Visible فرم True باشد، رویدادهای زیر به ترتیب اجرا میشوند :
OnCreate, OnShow, OnActivate, OnPaint
از رویداد OnCreate برای مقداردهی اولیه بعضی عناصر میتوانید استفاده كنید، مثلاً ، مقداردهی لیستهای رشته ای.
هر شیئی كه در رویداد OnCreate فرم ساخته میشود باید در رویداد OnDestroy هم آزاد شود.
OnShow
این رویداد مشخص میكند كه فرم شروع به نمایش میكند.در حالت عادی رویداد OnShow زمانی اتفاق میافتد كه ویژگی Visible فرم True باشد یا به عبارتی فرم قابل مشاهده باشد . این رویداد در ازای هر بار اجرای دستورات Form.Show یا Form.ShowModal اجرا میشود.
نكته : جالب ست بدانید در حالتی كه Visible فرم False باشد، اگر دستور Form2.Visible := True را اجرا كنید، باعث نمایش فرم به صورت modaless میشود و رویداد OnShow هم اجرا خواهد شد، پس در چنین وضعیتی دستور Form2.Visible := True برابر ست با Form2.Show .
OnActivate
این رویداد زمانی فراخوانی میشود كه فرم مورد نظر در برنامه فعال شود. اگر دو فرم به نامهای Form1 و Form2 داشته باشید كه همزمان در دسترس هستند و Form1 فعال باشد، با كلیك روی Form2 ، این رویداد اجرا خواهد شد. ناگفته نماند كه بعد از ساختن (Create, OnCreate) و نمایش (Show, OnShow) فرم یكبار این رویداد اجرا خواهد شد. اگر Form2 فعال باشد و روی پنجرهای خارج از برنامه (مثلاً Desktop) كلیك كنید و دوباره روی Form2 كلیك كنید، این رویداد اجرا نخواهد شد، چون از نظر ویندوز، فرم فعال در برنامه ، قبل از فعال كردن برنامه ای دیگر، Form2 بوده ، پس دلیلی ندارد كه دوباره این رویداد را فراخوانی كند.
OnPaint و OnResize
رویدادهایی مانند OnPaint و OnResize بعد از ساختن فرم ، همیشه و مكرراً فراخوانی میشوند. برای مثال با تغییر سایز فرم ، رویداد OnResize اجرا خواهد شد.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
زمانی كه فرم ساخته شده و كامپوننتهای روی فرم در انتظار عملی از سوی كاربر هستند تا رویدادی اتفاق بیفتد و آن را كنترل كنند، در واقع، برنامه، بدون مشكل، در حال اجراست، تا یك نفر فرم را ببندد. به این دوره (از نمایش فرم تا بستن فرم)، دوره زندگی فرم میگویند.
مرگ فرم – Death
اجرای یك برنامه ویندوز زمانی متوقف میشود كه همه فرمهای آن بسته شود (به غیر از سرویسها و ...) و كدی برای اجرا وجود نداشته باشد. اگر بعد از بستن آخرین فرم قابل مشاهده ، هنوز یك فرم مخفی وجود داشته باشد، برنامه خاتمه پیدا میكند چون هیچ فرم قابل مشاهده ایی وجود ندارد.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
وقتی ما با استفاده از متد Close یا هر روش دیگری (Alt + F4) سعی میكنیم فرمی را ببندیم، رویداد OnCloseQuery فراخوانی میشود. به این معنی كه این رویداد جایی ست برای جلوگیری از بسته شدن فرم. ما از این رویداد برای پرسیدن سئوال از كاربر كه "آیا مطمئن هستید كه میخواهید فرم را ببندید؟" استفاده میكنیم.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این رویداد متغیری به نام CanClose دارد ، كه مشخص میكند آیا فرم اجازه بسته شدن دارد یا خیر؟ میتوان این متغیر را با False مقداردهی كرد تا متد Close بینتیجه بماند و فرم بسته نشود.
OnClose
اگر در OnCloseQuery مشخص شد كه فرم باید بسته شود، رویداد OnClose فراخوانی میشود. این رویداد آخرین فرصت را برای جلوگیری از بسته شدن فرم به ما میدهد یا اینكه میتوانیم راه دیگری را انتخاب كنیم . در این رویداد پارامتری به نام Action وجود دارد كه میتواند شامل یكی از چهار مقدار زیر باشد:
caNone : فرم اجازه بسته شدن ندارد، در واقع این مقدار برابر ست با مقدار False برای متغیر CanClose در رویداد OnCloseQuery.
caHide : قبل از بستن مخفی میشود.
caFree : فرم ، بسته شده و حافظه تخصیص داده شده به آن توسط دلفی آزاد میشود.
caMinimize : فرم ، minimize میشود. این مقدار، پیش فرضی ست برای MDI child form ها.
نكته : موقعیكه كاربر ویندوز را shutdown میكند، رویداد OnCloseQuery فعال میشود و نه OnClose . اگر میخواهید از shutdown شدن ویندوز جلوگیری كنید میتوانید كدتان را در این رویداد بنویسید و البته ، CanClose = False حقهی كارآمدی نیست و از shutdown شدن جلوگیری نخواهد كرد.
نكته : از رويداد OnClose زمانی استفاده كنيد كه میخواهيد حين بسته شدن فرم، فرآيند خاصی انجام و فرم بسته شود. از رويداد OnCloseQuery زمانی استفاده كنيد كه بايد مشخص شود كه فرم میتواند بسته شود يا خير، البته با هر نوع شرطی. از نظر من، نوع استفاده ی OnCloseQuery، از نام اين رويداد پيداست : Query و Close .
OnDestroy
بعد از اجرای متد OnClose و در حالیكه فرم بسته شده، رویداد OnDestroy فراخوانی میشود. از این رویداد برای عملی، مخالف با آنچه در رویداد OnCreate انجام دادید استفاده كنید. عموماً از OnDestroy برای آزاد كردن حافظه ی عناصر مرتبط با فرم استفاده میشود. فرض كنید، اشیائی را در زمان اجرا ساخته اید یا بخشی از حافظه را برای انجام عمل خاصی مصرف كردهاید، این رویداد محلی ست برای آزاد كردن حافظه مربوطه.
Nassim_20
25-06-2008, 22:51
حالا که اینهمه در مورد رویدادهای فرم گفتید یه سوال
زماینکه کاربر خارج از برنامه برنامه رو مینیمایز کنه (مثلا با دکمه های winkey + d) از کجا میشه فهمید که این اتفاق افتاده یعنی از طریق چه رویدادی
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.