مشاهده نسخه کامل
: مشکل با کنترل Timer در C#
سلام
در یک برنامه برای حرکت دادن یک عکس از کنترل Timer استفاده کردم که در هر رویداد Tick عکس رو جابجا کنه. اول کار درست بود اما وقتی که تعداد عکسها زیاد شدند به شدت روی صفحه پرش ایجاد میشه (درست مثل همون مواقع که با گرافیک برای حرکت دادن تصویر صفحه رد پاک می کنیم و صفحه پرش می کنه) راه حل به نظر شما چیه که بشه یک PictureBox رو توی صفحه بدون پرش جابجا کرد؟
سلام
اگر میخواهید کارهای گرافیک کنید، راهش تکان دادن PictureBox ها روی Form نیست.
شما باید تصاویر را داخل یک PictureBox یا Control تکان دهید، فقط یکی!
باید از دستورات +GDI استفاده کنید.
در کل دارید چه کار میکنید و چه میخواهید بسازید؟
نه قصد ایجاد گرافیک ندارم! یعنی به اون صورتی که فرمودید. می خوام مثل مثلا فلش ام.ایکس چند تا عکس رو هم زمان با یک آهنگ حرکت بدم! شاید پیش نهاد بدید خوب اینکارو با فلش بکنم! آره اینو میدونم اما به عنوان یه پروژه دارم با این کار می کنم.
یه چیزی در حدود دستکاری کردن تابع Update در جاوا می خواستم...
البته اعتراف می کنم که در باره GDI+ چیزی نمی دونم... اگر در مورد اون هم راهنمایی کنید ممنون میشم
samanehkh
08-09-2008, 10:57
سلام
ببخشین من تو ساخت کد با تایمر تو vb.net مشکل دارم میخواستم بدونم امکانش هست منو راهنمایی کنید
اگه براتون امکان داره یه نمونه کد برام بفرستید ممنون میشم
سلام
نه قصد ایجاد گرافیک ندارم!
بحرحال چیزی که میخواهید در حیطه کارهای گرافیکی است.
می خوام مثل مثلا فلش ام.ایکس چند تا عکس رو هم زمان با یک آهنگ حرکت بدم
اگر تصاویرتان ثابت هستند، و منظورتان چیزی مثل فیلم از قبل مشخص و معلوم و همیشه یکسان است، که بهتر است فیلم را در جای دیگر بسازید و خروجی avi یا gif بگیرید برای نمایش در برنامه تان.
واگر متغییر و دینامیک است، باز هم راهش PictureBox نیست.
شما باید تصاویر را داخل یک PictureBox یا Control تکان دهید، فقط یکی!
باید از دستورات +GDI استفاده کنید.
البته اعتراف می کنم که در باره GDI+ چیزی نمی دونم..
این که خیلی بده! باید کمی منتظر بمانید تا در وقتی خالی یک نمونه کد فوق العاده ساده برایتان بگذارم.
==============
ببخشین من تو ساخت کد با تایمر تو vb.net مشکل دارم میخواستم بدونم امکانش هست منو راهنمایی کنید
اگه براتون امکان داره یه نمونه کد برام بفرستید ممنون میشم
بهتر بود تاپیک دیگری میزدید، یک تاپیک مجزا.
بعد هم خیلی ساده است، کافیست کامپونت Timer را از Toolbar روی Form تان قرار دهید.
خصوصیت Interval مشخص کننده پریود زمانی تکرار به میلی ثانیه است و Enabled هم تایمر را روشن و خاموش میکند.
رویداد Tick هم هر وقع تایمر را اطلاع میدهد.
واقعاً خیلی ساده است و مشکلی نداره!
بهتر بود تاپیک دیگری میزدید، یک تاپیک مجزا.
بعد هم خیلی ساده است، کافیست کامپونت Timer را از Toolbar روی Form تان قرار دهید.
خصوصیت Interval مشخص کننده پریود زمانی تکرار به میلی ثانیه است و Enabled هم تایمر را روشن و خاموش میکند.
رویداد Tick هم هر وقع تایمر را اطلاع میدهد.
واقعاً خیلی ساده است و مشکلی نداره!
این جواب گویا برای یه پست دیگه بود. سوا من چگونگی استفاده از Timer نبود. سوال من چگونگی جلوگیری از پرش تصاویر داخل PictureBox در حین حرکت بود...
سلام
این جواب گویا برای یه پست دیگه بود
این جواب پست 4 بود که من هم گفتم، بهتر بود تاپیک جدیدی میزدند.
==============
این پست چون بزرگ بود، چند بار سعی کردم بفرستم ولی به خطا خورد، برای همین در دو تکه و در دو پست فرستادم.
و اما نمونه کد شما!
1)
کد زیر را در یک فایل cs وارد کنید، مثلاً Project->Add class بزنید و همه متون را حذف و متن زیر را به جایش وارد کنید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ادامه در پست بعد ...
سلام مجدد و این هم ادامه مطالب ...
2)
پروژه را بدون خطا کامپایل کنید Project->Rebuild Solution
3)
حالا اگر به نمایه طراحی Form بروید باید یک کنترلر جدید با نام LayeredPictureBox در Toolbar داشته باشید، ان را روی فرمتان قرار دهید.
4)
خوب تمام است، شما آماده کد نویسی هستید!
شما میتوانید هر تعداد تصویر را در یک کنترلر LayeredPictureBox نشان دهید و هر زمان خواستید، لایه تصویر جدید اضافه کنید یا حذف کنید تا تغییر مکان دهید تا رو و زیر بودنشان را اصلاح کنید و...
)فقط با یک کنترلر و بدون پرش!)
برای اضافه کردن یک لایه جدید تصویر از کد زیر استفاده کنید،
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای حذف هم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای حرکت هم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و ...
و ...
اما توجه کنید که در این نمونه فوق العاده ساده و البته سریع، تصویر ثابت میماند، تا شما فرمان LayeredPictureBox1.Invalidate را برای Refresh بدهید.
یعنی هر زمان تغییراتی دادید، در پایان تغییرات فرمان مذکور را بدهید.
این روش بسیار ساده و موثر است و الگوریتم اصلی کاری تمام محیطهای طراحی است.
من خودم با توسعه و تکامل همین روش یک کنترلر Designer کامل ساختم که امکان Zoom و Print و ارتباط پویا با کاربر را هم دارد، یعنی کاربر روی لایه ها کلیک میکند و محدوده استاندارد نقطه چین با 8 مربع کوچک در دور ان لایه نشان داده میشود که کاربر میتواند با گرفتن مربع های کوچک لایه را تغییر سایز دهد و... و...
و فقط و فقط همه این کارها با ترسیم در متد OnPaint انجام شده بدون پرش و بدون کنترلر اضافه، یعنی کل سازه و حتی کارهای دینامیک با فرامین ماوس کاربر همه با دستورات مستقیم +GDI انجام شده.
پس جای کار دارد و محدودیت هم ندارد، شما میتوانید کد فوق را برای هر امکانی که دوست دارید توسعه دهید و کامل کنید.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.