PDA

View Full Version : سوال: چطور میشه شیئی رو که در طول اجرای برنامه در یکی از فرمها بارها استفاده میشه به موقع Free کرد؟



mbshareat
جمعه 10 تیر 1390, 10:13 صبح
سلام و خدا قوت:قلب:
من یه BitMap دارم که در یک فرم فرعی ازش برای چرک نویس استفاده می کنم.
می خوام هنگامی که از برنامه خارج میشم حافظه مربوطه Free بشه.
من در رویداد OnShow بیت مپ رو تعریف میکنم و در Close حافظه مربوط به بیت مپ رو آزاد میکنم.
قبلا در Create فرم فرعی که در ابتدای برنامه قابل رؤیت نیست این کار رو می کردم و در Close همون فرم بیت مپ رو آزاد می کردم اما این کار باعث Access Violation میشد، چون ممکن بود فرم حاوی تعرف بیت مپ در طول برنامه بسته و دوباره باز بشه که در این صورت بیت مپ نیاز به تعریف مجدد داشت.
اما حالا ظاهرا مشکلی پیش نمیاد اما ممکن است بعد از اینکه فرمم بیت مپ رو در OnShow تعریف میکنه کاربر پنجره رو Minimize کنه و بیت مپ دوباره قبل از آزاد سازی تعریف بشه(به نظرم OnShow همینجا باید کار کنه!؟). آیا این اتفاق مشکل سازه؟:متفکر:
آیا با توجه به اینکه در برنامه فرمی که همیشه قابل مشاهده باشد، ندارم و همه فرمهایم ممکن است باز یا بسته شوند، راهی هست که تنها یک بار بیت مپ رو تعریف و یک بار Free کنم.:لبخندساده:

Felony
جمعه 10 تیر 1390, 11:30 صبح
راحت ترین کاری که میتونید انجام بدید این هست که تو رویداد OnCreate فرم اصلی برنامتون ( Main Form ) بسازیدش و تو رویداد OnDestroy آزادش کنید .

a_mosavian
جمعه 17 تیر 1390, 01:29 صبح
می تونی از تابع FreeAndNil استفاده کنی. ولی این موضوع نشون میده برنامه ت اسپاگتی هست و احتمالا در آینده به مشکلات سنگین تری بربخوری! اگه پروژه تجاری هست حتما بازنویسی ش کن!