PDA

View Full Version : مشکل با پخش فایلهای gif در سی شارپ.



hdv212
جمعه 18 اسفند 1385, 20:40 عصر
سلام
من یه فرم loading درست کردم که یه PictureBox توشه و اونو با یه انیمیشن gif تنظیم کردم که وقتی مثلا یه فرمی میخواد باز بشه و از دیتابیس جدول رو میخونه، این فرم فراخوانی میشه تا به کاربر نشون بده که فرم در حال loading شدنه،منتها نمیدونم چرا وقتی فرم loading نمایش داده میشه،فقط یه تصویر ثابت از gif نشون میده و انیمیشنش پخش نمیشه، با ApplicationDoevent() هم کارم راه نیفتاد،کسی تا حالا تونسته از gif استفاده کنه ؟؟ چطوری ؟

PC2st
جمعه 18 اسفند 1385, 23:20 عصر
یه کنترل واسه همین کار در codeproject وجود داره... (با C++) ببین به دردت میخوره؟!
http://www.codeproject.com/staticctrl/gifanimation.asp

molana alavi
شنبه 19 اسفند 1385, 00:52 صبح
منم خیلی وقت بود که همچین مشکلی داشتم
امیدوارم با سورس ارئه شده مشکل حل شه
از PC2st هم ممنون و متشکرم

PC2st
شنبه 19 اسفند 1385, 10:37 صبح
از PC2st هم ممنون و متشکرم
من هم ممنونم که پست من رو مطالعه فرمودید.

دیشب که اون سورس رو دیدم و در همین جا یک پست واسش زدم، یک ساعت بعد به ذهنم رسید که در msdn هم سرچ کنم. اونوقت بود که فهمیدم در دات نت فریم ورک، یک کلاس برای همین منظور در BCL گنجانده شده که دیگه لازم نیست از اون کنترلی که در codeproject هست استفاده کنیم.

نام این کلاس ImageAnimator هست و طریقه استفاده از اون به شرح ذیل:
این کلاس یک Static Class میباشد، در این کلاس یک متد بنام Animate وجود داره که با استفاده از اون، مراحل نمایش یک gif بکمک یک ترد (thread) صورت میگیره.
این متد به شکل زیر استفاده میشه:

ImageAnimator.Animate(image, onFrameChangedHandler)

image، همون شئ ائی از نوع Image هست که مثلا تصویر gif در اون قرار داره.
onFrameChangedHandler، یک شئ از نوع EventHandler هست که بکمک اون به یک متد اشاره میکنه که توسط یک ترد باید مرتبا اجرا بشه تا زمانی که متد StopAnimate فراخوانی بشه.

فکر کنم بهتر باشه یک نمونه برنامه رو خودتون ببینید، یک PictureBox بنام myGifAnimation و یک Button بنام startButton و یک Button بنام stopButton ایجاد کنید و همه اینها رو روی یک فرم قرار بدید. میخوایم کاری کنیم که با کلیک روی اون دکمه ها، gif نمایش داده بشه یا stop بشه. پس برای هر کدوم از دو تا دکمه startButton و stopButton یک رویداد Click رو ایجاد میکنیم و در کل، کدهای داخل فرم برنامه باید شبیه به زیر باشه (به عبارت دیگه، کدهای زیر رو به جای کدهای فرم، کپی و paste کنید)



private Graphics g;
private EventHandler eh;

public Form1()
{
InitializeComponent();
myGifAnimation.BackgroundImage = new Bitmap(@"C:\Program Files\Microsoft Visual Studio 8\Common7\VS2005ImageLibrary\animations\FINDFILE16 .gif");
myGifAnimation.Size = myGifAnimation.BackgroundImage.Size;
g = myGifAnimation.CreateGraphics();
eh = new EventHandler(GifAnimation);
}

private void GifAnimation(object obj, EventArgs args)
{
ImageAnimator.UpdateFrames(myGifAnimation.Backgrou ndImage);
g.Clear(myGifAnimation.BackColor);
g.DrawImage(myGifAnimation.BackgroundImage, new Point(0, 0));
}

private void startButton_Click(object sender, EventArgs e)
{
ImageAnimator.Animate(myGifAnimation.BackgroundIma ge, eh);
}

privatevoid stopButton_Click(object sender, EventArgs e)
{
ImageAnimator.StopAnimate(myGifAnimation.Backgroun dImage, eh);
}


مطمئن نیستم که به صورت صحیح کدها رو نوشته باشم. اگر ایراد یا اشکالی داشت، خوشحال میشم که گوشزد کنید.