با سلام
تفاوت این دو دستور چیست؟
با تشکر
با سلام
تفاوت این دو دستور چیست؟
با تشکر
با سلام
آیا کسی از دوستان می تواند من را راهنمایی کند؟
موفق باشید
Help رو خوندی ؟
Description
Use Release to destroy the form and free its associated memory.
Release does not destroy the form until all event handlers of the form and event handlers of components on the form have finished executing. Release also guarantees that all messages in the form's event queue are processed before the form is released. Any event handlers for the form or its children should use Release instead of Free (Delphi) or delete (C++). Failing to do so can cause a memory access error.
Note: Release returns immediately to the caller. It does not wait for the form to be freed before returning.
مي دونيد كه فقط فرم هست كه Release داره (من فقط فرم رو ديدم.)
با کمال تشکر
من خودم و تا حدودی فهمیدم
ولی اگر امکان دارد شما هم یک توضیح بدهید.
با تشکر
والا قدرت بيان ندارم. چون خودم كامل متوجه نشدم.
ولي Release امن تره . چون منتظر مي مونه تمام Handleها free شند و تمام Message ها جواب بگيرند و كامل شند (اصطلاح امن جالب نمياد .. مطمئن تر بهتر بايد باشه)
ولي Free تلقي ميزنه فرم رو آزاد مي كنه . با هرچي كه بهش بسته هست .
Release فقط برای TForm وجود داره؛ و علت وجودش هم این هست که اگر برنامه نویس خواست در یکی از Eventهای آن فرم، همان فرم را آزاد کند، به مشکل برنخورد.
یک Event توسط یکی از متدهای یک شی فراخوانی می شود، یعنی زمانی که کد آن Event در حال اجرا هست، شما عملا در داخل یکی از متدهای آن شی قرار دارید. مثلا اگر متد مربوطه به این شکل باشد:
procedure TMyClass.DoMyEvent;
begin
if Assigned(FMyEvent) then
FMyEvent(Self);
end;
در این صورت، در زمان اجرای FMyEvent شما همچنان در داخل متد TMyClass.DoMyEvent هستید.
حالا اگر در این کد شما TMyClass را آزاد کنید، عملا این متد را هم از بین می برید. به زبان ساده تر، این کار مثل آن است که شما شاخه ایی را که روی آن نشسته اید، اره کنید! معلوم هست که با این کار خودتان زمین می خورید.
از اونجایی که احتمال انجام همچین کاری برای فرم ها زیاد هست، کلاس TForm یک متد Release برای این کار فراهم کرده. این متد قبل از آزاد کردن فرم مطمئن می شود که هیچ Event-handler ایی در فرم در حال اجرا نباشد. اگر Event-handlerایی در حال اجرا بود، Release کنترل اجرا را بلافاصله به شما بر می گرداند، ولی در پشت صحنه فرم شما تا زمانی که اجرای آن Event-handler پایان نیافته، همچنان وجود دارد، و زمانی که اجرای آن کد پایان یافت، به طور خودکار آزاد می شود.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.