نمایش نتایج 1 تا 3 از 3

نام تاپیک: گرفتن e.Graphics

  1. #1
    کاربر دائمی آواتار ماهان مقدم
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    خونه
    پست
    134

    گرفتن e.Graphics

    سلام. آقا من چون e.Graphics تو رویداد Paint قابلیت Double Buffer رو داره رو می خوام بگیرمش و بجای CreateGraphic ازش استفاده کنم. مشکل اینه که من نمی دونم چطوری بگیرمش چون functionی که برای طرسیم نوشتم باید از جاهای دیگه از خارج از رویداد Paint هم فرخوانی بشن. من الآن اون رو میریزم توی متغیر ولی موق اجراء بهم ارور میده که اصلا معلوم نیست یعنی چی. اولین کد من با این متغیر اینه:

    mWorkspaceGraphic.Clear(frmmain.Workspace.BackColo  r)


    و ارور Parameter is not valid رو میده.

  2. #2
    کاربر دائمی آواتار omid-vbAuto
    تاریخ عضویت
    آبان 1388
    محل زندگی
    ---
    پست
    755

    نقل قول: گرفتن e.Graphics

    نقل قول نوشته شده توسط ماهان مقدم مشاهده تاپیک
    سلام. آقا من چون e.Graphics تو رویداد Paint قابلیت Double Buffer رو داره رو می خوام بگیرمش و بجای CreateGraphic ازش استفاده کنم. مشکل اینه که من نمی دونم چطوری بگیرمش چون functionی که برای طرسیم نوشتم باید از جاهای دیگه از خارج از رویداد Paint هم فرخوانی بشن. من الآن اون رو میریزم توی متغیر ولی موق اجراء بهم ارور میده که اصلا معلوم نیست یعنی چی. اولین کد من با این متغیر اینه:

    mWorkspaceGraphic.Clear(frmmain.Workspace.BackColo  r)


    و ارور Parameter is not valid رو میده.
    اگر درست فهمیده باشم شما کدهاتون تو رویداد paint یه ابزار گذاشتی در حالی که می خواهی مثلا با زدن باتون ترسیم انجام بشه؟؟؟

  3. #3

    نقل قول: گرفتن e.Graphics

    نقل قول نوشته شده توسط ماهان مقدم مشاهده تاپیک
    سلام. functionی که برای طرسیم نوشتم باید از جاهای دیگه از خارج از رویداد Paint هم فرخوانی بشن.
    سلام.
    شما قاعدتا نباید این کارو کنید. عمل Paint فرم (یا بطور کلی، کنترل ها) در WM_PAINT انجام میشه و این بدین معناست که شما اونجا این فرصت رو دارید تا کنترل های مورد نظر رو بر اساس State فعلی Object، رسم کنید. اگر مایلید تا WM_PAINT مجددا در Message Queue قرار بگیره، کافیه تا تابع Invalidate رو صدا بزنید. بدین ترتیب متود Paint مجددا فراخوانی خواهد شد. به بیان دیگه، فرض کنید در تابع دیگری State فعلی تغییر میکنه و این تغییر وضعیت باید روی صفحه به نمایس در بیاد. اینجا، جای اینکه مجددا تابع ترسیم رو Call کنید، میتونید Invalidate رو فراخونی کنید تا تابع Paint بطور خودکار Call بشه. حالا در تابع Paint می تونید بر اساس وضعیت فعلی Object صفحه رو به روز کنید. اما تکنیک دیگه ای هم وجود داره و اون این که شما دو بافر جداگانه داشته باشید. یکی بافری هستش که همواره نمایش داده خواهد شد و دیگری، بافری است که بر اساس تغییر وضعیت Object، ترسیم میشه (اما روی صفحه ظاهر نمیشه). وقتی عمل ترسیم انجام شد و Bitmap جدید آماده بود، اونوقت میشه Invalidate کرد تا تابع Paint فراخوانی بشه. تابع Paint هم بافر دوم رو جایگزین بافر اول میکنه و بدین ترتیب وضعیت جدید Object مشاهده خواهد شد.

    موفق باشید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •