ورود

نسخه کامل مشاهده نسخه کامل : ترفندي براي گرفتن تصوير يك Chart ( نمودار )



Mahmood_N
28-02-2008, 23:50
سلام ...
يكي از مشكلاتي كه بعضا در نرم افزارهاي بانك اطلاعاتي و نرم افزارهايي كه به نوعي با نمودار ( chart ) سر و كار دارند ، چاپ نمودار است ...
يك راه ساده براي گرفتن تصوير يك chart ( يا هر كنترل گرافيكي ديگر ) :
فكر كنم همه دوستان در آرشيوشون ، كد مربوط به گرفتن عكس از صفحه نمايش رو داشته باشن ، اين تابع با گرفتن DC مربوط به صفحه نمايش ( يا همون Screen ) ، اقدام به گرفتن تصوير از اون ميكنه ، كد اين رويه به صورت زير هست :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا با كمي تغيير ، يعني با دادن Handle مربوط به Chart به تابع GetDC در كد بالا ، ميشه به جاي DC صفحه نمايش ، DC مربوط به Chart رو در اختيار داشت ، به كد زير دقت كنيد :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در كد بالا از DC مربوط به Chart عكس گرفته ميشه ، باقي كدها هم براي ذخيره عكس هستند ...
با اين ترفند ، تصوير Chart رو ميشه استخراج كرد و بعد اون رو به صورت جداگونه چاپ كرد ، البته براي چاپ راه هاي بهتري هم هست ولي در برنامه هايي كه فقط نياز به تصوير هست ، ميشه از اين راه استفاده كرد ...

از لينك زير ميتونيد برنامه نمونه اي كه اين كار رو انجام ميده رو دانلود كنيد :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

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

VDeveloper
29-02-2008, 02:36
وقتی از بلوک try-finally برای ایجاد و آزاد سازی خودکار یک شی استفاده می کنید، Create را خارج از بولک try-finally بنویسید. اگر حین Create یک شی مشکلی پیش بیاد، Destroy بصورت خودکار اجرای میشه. اگر هم بعد از ایجاد شی مشکلی پیش بیاد، چون کد بعد از Create بالافاصله در داخل try-finally قرار گرفته، Free همیشه فراخوانی میشه و Memory Leak پیش نمیاد.
در کد شما اگه به فرض مثال مشکلی در اجرای تابع rect پیش بیاد، MyBitmap و Canvas اصلا Create نمیشند، بلکه کنترل برنامه مستقیما میره روی بلوک finally و چون اصلا شی ایی ایجاد نشده، اجرای متد Free باعث ایجاد Access Violation میشه.

Mahmood_N
29-02-2008, 03:39
وقتی از بلوک try-finally برای ایجاد و آزاد سازی خودکار یک شی استفاده می کنید، Create را خارج از بولک try-finally بنویسید. اگر حین Create یک شی مشکلی پیش بیاد، Destroy بصورت خودکار اجرای میشه. اگر هم بعد از ایجاد شی مشکلی پیش بیاد، چون کد بعد از Create بالافاصله در داخل try-finally قرار گرفته، Free همیشه فراخوانی میشه و Memory Leak پیش نمیاد.
در کد شما اگه به فرض مثال مشکلی در اجرای تابع rect پیش بیاد، MyBitmap و Canvas اصلا Create نمیشند، بلکه کنترل برنامه مستقیما میره روی بلوک finally و چون اصلا شی ایی ایجاد نشده، اجرای متد Free باعث ایجاد Access Violation میشه.
درسته ، حق با شماست ...