PDA

View Full Version : توضیح در مورد Refesh ؟!



mbshareat
دوشنبه 14 بهمن 1387, 10:40 صبح
من یه شیئ TIMage دارم که در آن ترسیماتی انجام می دم و بعد تصویر را با Refresh تجدید میکنم ولی تصویر پرش دار میشه مثلا یه مربع را با حرکت مکان نما در تصویر جابجا می کنم و هربار تصویر را به تجدید میکنم ولی تصویر در پس پرده به روز نمی شه.:گیج:
در VB ویژگی Autoedraw این حالت رو از بین می بره ولی در دلفی من تنها وقتی ویژگی Stretch رو فعال میکنم می تونم از این حالت خلاص شم که این ویژگی خودش باعث می شه اگه بخوام تصویر جدیدی در کادر تصویر بریزم مجبور باشم قبلش تصویر رو nil کنم. آیا راه مطقی تری برام سراغ دارین؟:اشتباه:
درضمن ممنون میشم اگه کسی برام فرق Refresh و Repaint رو توضیح بده!:لبخندساده:

vcldeveloper
دوشنبه 14 بهمن 1387, 17:23 عصر
کسی برام فرق Refresh و Repaint رو توضیح بده!عملا فرقی با هم ندارند.


من یه شیئ TIMage دارم که در آن ترسیماتی انجام می دم و بعد تصویر را با Refresh تجدید میکنم ولی تصویر پرش دار میشهبجاش از Invalidate استفاده کنید.


یه مربع را با حرکت مکان نما در تصویر جابجا می کنمخصوصیت DoubleBuffered مربوط به فرم را True کنید.

arash_ebrahimi_nk
سه شنبه 15 بهمن 1387, 09:28 صبح
با تشکر از علی آقا
اگر جایی رو میشناسید که اطلاعات مختصر و مفیدی در این رابطه داره ممنون میشیم لینک بدین.
تابع ای که من در برنامه نویسی API استفاده میکنم:

ReDrawWindow(hWnd, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INTERNALPAINT
or RDW_INVALIDATE or RDW_UPDATENOW);
UpdateWindow(hWnd);

vcldeveloper
سه شنبه 15 بهمن 1387, 16:24 عصر
فرق Invalidate با Repaint (یا Refresh) اینه که Invalidate فقط به کنترل اطلاع میده که نیاز به Update خودش داره، کنترل هم هر وقت فرصت کرد، این کار را انجام میده. اگر هم چند بار Invalidate فراخوانی بشه، مهم نیست، چون در نهایت یک بار Update صورت میگیره. اما Repaint کنترل را مجبور میکنه در همان لحظه خودش را update کنه. طبیعی هست که اگر به دفعات فراخوانی بشه، کنترل دائما در حال update خودش هست، و این موجب flicker میشه.
DoubleBuffered هم که مشخص هست؛ باعث میشه تصویر ابتدا در یک بافر در حافظه رسم بشه، و بعد تصویر رسم شده روی صفحه نمایش داده بشه. این باعث میشه که updateهای پیاپی در رسم تصویر، موجب ایجاد flicker نشه، چون updateها همگی روی بافر اعمال میشند، و فقط در پایان کار تصویر روی صفحه نمایش داده میشه.

اینها از قابلیت های ویندوز هستند، پس باید بتونید در MSDN درباره شون مطلب پیدا کنید. Help دلفی هم خوب توضیح داده.

mossaferin
چهارشنبه 16 بهمن 1387, 18:11 عصر
یه تجربه هم من بگم

برای اینکه فلیکر نداشته باشیم

1- همان doublebufferd
2- اینکه برای ترسیم اشکال یا ... یه متغییر از نوع بیت مپ داشته باشیم که کلیه کارهای ترسیمی روی آن صورت بپذیرد و بعد روی یک TImage ترسیم شود، در این حالت هم از Draw هم از StretchDraw میتونید استفاده کنید


من زیاد استفاده کردم ، جواب میده
موفق باشید