اشکال در Splash Screen

bitaroos

Member
سلام دوستان

من برای برنامه ام (که با C#.net نوشتم) یه Splash Screen درست کردم. تا اینجا مشکلی ندارم.
یه فایل فلش هم آماده کردم با پسوند swf. این یکی هم مشکلی نداره.
حالا وقتی بادستور زیر می خوام فایل فلش رو توی Splash Screen اجرا کنم، Error میده.
کد:
            axShockwaveFlash1.Movie = @"C:\Users\Ali\Desktop\flash\new\2.swf";
            axShockwaveFlash1.Play();
هم error و هم نحوه ساخت Splash Screen رو پیوست کردم.

کسی می دونه این مشکل چه جوری حل میشه؟
 

پیوست ها

  • How to create a splash screen in C# - Computer Programmers, Programming Forum _ Young Coders.pdf
    86.9 کیلوبایت · بازدیدها: 22
  • Error.jpg
    Error.jpg
    417 کیلوبایت · بازدیدها: 10
آخرین ویرایش:

the_king

مدیرکل انجمن
در کدتان نخ جدیدی به نخ اصلی اضافه کرده اید که فرم SplashForm و کنترل Flash از داخل اون فراخوانی و اجرا میشه
و مستقل از نخ اصلی است. این وضعیت صرفا زمانی بدون مشکل خواهد بود که همه اجزاء آمادگی اجرای چند نخی
رو داشته باشند. به ندرت میشه ActiveX ای پیدا کرد که با برنامه نویسی چند نخی (Multi Threading) سازگار باشه،
اغلب شون صرفا در برنامه های تک نخی قابل استفاده اند. کنترل Shockwave Flash هم جزو همین ActiveX هایی است
که با کد های چند نخی سازگاری نداره.
 

bitaroos

Member
ممنون

خوب چجوری میتونم یه Splash Screen داشته باشم که مثل 9 nero یا آفیس 2010 متحرک باشه؟
میشه فیلم گذاشت؟
یا اصلا میشه برای Splash Screen از multi threading استفاده نکرد؟
یا مثلا با WPF یه فایل exe درست کنم تا با شروع Splash Screen بیاد، و با هاش هم بره؟

آخه میخوام اول بسم الله بیاد و بعدش اسم برنامه و البته بین این دو یه افکت Fade باشه
 

swsehsan

Member
سلام
دو نمونه قرار دادم اولی یک splash معمولی هست دومی splash که داخلش از فایل فلش استفاده شده ولی چون اگه فلش پلیر بر روی کامپیوتر کاربر نصب نبود یا ورژن قبل از ورژنی بود که من استفاده کرده بودم فایل فلش اجرا نمیشه پس اول باید بیای کامپیوتر کاربر چک کنی واگر نصب بود splash اجرا بشه تو فایل دومی (intro ) اول اومدم کاپیوتر چک کردم اگر بود مستقیما اجرا میشه و اگر نبود یه فرم دیگه ظاهر میشه و از کاربر می خواد که فلش پلیر نصب کنه مراحل نصب هم نشون داده نمیشه فقط از طریق progressBar نشون میده و بعد از نصب یک button اجرا میشه که splash نمایش داده میشه بعد از تمام شدن splash هم که فایل کلی اتوماتیک باز میشه
اگر هم می خوای فرم fade بشه راحت با تایمر میتونی این کار انجام بدی
مشکلی داشتی بگو
 

پیوست ها

  • splash screen.rar
    699.3 کیلوبایت · بازدیدها: 22
  • intro.part1.rar
    3.8 مگایابت · بازدیدها: 34
  • intro.part2.rar
    1.9 مگایابت · بازدیدها: 28

bitaroos

Member
سلام دوست عزیز

روش خیلی جالبی بود ولی فکر کنم 2 تا مشکل اساسی داره.

اشکالات:
1- هدف اصلی استفاده از Splash Screen اینه که:
وقتی حجم برنامه زیاد باشه، بعد اجرا، مدتی طول میکشه تا نرم افزار اجرا بشه، در این فاصله Splash Screen
اجرا میشه تا به کاربر بگه یکمی صبر کن تا فایل ها load بشن. ولی تو روش شما این اتفاق نمی افته.
(البته فرم اولیه ی برنامه من حجمش کمه بخاطر همین میشه از روش شما استفاده کرد.

ولی مشکل اصلی اینه که:

2- در اینجا 2 تا فایل exe وجود داره، یکی مربوط به Splash و دیگری مربوط به برنامه اصلی.
حالا اگه کاربر مستقیما فایل exe برنامه اصلی رو اجرا کنه، دیگه اون Splash Screen اجرا نمیشه.

با این حال با دیدن این روش یه ایده به سرم زد نمیدونم به خوبی جواب میده یا نه.
اگر دوستان دیگه پیشنهادی ندارن میرم روش کار میکنم.

بازهم ممنون از شما دوست عزیز
دوستان دیگه پیشنهادی ندارند؟



.
 

swsehsan

Member
سلام دوست عزیز

روش خیلی جالبی بود ولی فکر کنم 2 تا مشکل اساسی داره.

اشکالات:
1- هدف اصلی استفاده از Splash Screen اینه که:
وقتی حجم برنامه زیاد باشه، بعد اجرا، مدتی طول میکشه تا نرم افزار اجرا بشه، در این فاصله Splash Screen
اجرا میشه تا به کاربر بگه یکمی صبر کن تا فایل ها load بشن. ولی تو روش شما این اتفاق نمی افته.
(البته فرم اولیه ی برنامه من حجمش کمه بخاطر همین میشه از روش شما استفاده کرد.

ولی مشکل اصلی اینه که:

2- در اینجا 2 تا فایل exe وجود داره، یکی مربوط به Splash و دیگری مربوط به برنامه اصلی.
حالا اگه کاربر مستقیما فایل exe برنامه اصلی رو اجرا کنه، دیگه اون Splash Screen اجرا نمیشه.

با این حال با دیدن این روش یه ایده به سرم زد نمیدونم به خوبی جواب میده یا نه.
اگر دوستان دیگه پیشنهادی ندارن میرم روش کار میکنم.

بازهم ممنون از شما دوست عزیز
دوستان دیگه پیشنهادی ندارند؟



.

سلام

این دو تا که گفتی مشکلی نیست
1- در فایل اولی می تونی متناسب نیاز تغییر بدی که هر وقت برنامه در حال لودینگ طولانی بود بیاد و نشون بده چون این splash مال برنامه بود و اون برنامه هم نیاز به این کار نداشت من فقط splash گذاشتم

2- اون intro یک فایل autorun بود و برای چک کردن و یک سری کار ها اومدم از سی شارپ استفاده کردم پس باید فایل اصلی اتوران که فلش بود (داخل فایل mmb) در کنار پروژه باشه سی دی هم قفل کردن بودم که کاربر فقط از طریق اتوران با برنامه کار کنه
و برای این که اگر روی کامپیوتر کاربر .net framework نبود و پروژه اجرا بشه از Xenocode Virtual Application استفاده کردم تا دات نت به پروژه embed کنم

3- این یک اتوران بود پس برای برنامه هایی که نیاز به setup دارن اصلا نیاز نیست که بیای چک کنی و بعد نصب کنی فلش پلیر همراه برنامت بر روی کامپیوتر نصب کن اما چون این اتوران بود من از این راه استفاده کردم

4- شما هم نیاز نیست که دو تا فایل exe بسازی بعد از تمام شدن دستور اجرای فرم دوم بده

برای اینکه در حال پخش splash فرم هات لود بشن این دو لینک ببین

http://www.codeproject.com/KB/cs/SplashScreenbYanichin.aspx

http://barnamenevis.org/showthread.php?75971-Threading-Problem&highlight=splash+screen


حالا ایده شما چی بود ؟
 
آخرین ویرایش:

bitaroos

Member
سلامی مجدد

اول از همه از 2 لینک خوبتون ممنون، هنوز کامل نخوندمشون ولی تا اینجا که خوندم،
چیزهای خوبی یاد گرفتم.

1- در فایل اولی می تونی متناسب نیاز تغییر بدی که هر وقت برنامه در حال لودینگ طولانی بود بیاد و نشون بده چون این splash مال برنامه بود و اون برنامه هم نیاز به این کار نداشت من فقط splash گذاشتم
خوب برای اینکه برنامه بتون همزمان 2 یا چند کار رو همزمان انجام بده (یعنی هم در حال Load برنامه باشه
و هم Splash Screen نمایش داده بشه) باید از Multi Threading (چند نخی) استفاده کنیم. وقتی از چند نخی
استفاده میکنم، موقع اجرای فلش error میده که توی پست دوم جناب "The King" گفتند که علت چیه و کاریش
نمیشه کرد.

4- شما هم نیاز نیست که دو تا فایل exe بسازی بعد از تمام شدن دستور اجرای فرم دوم بده
اگه منظورتون اینه که بعد از اتمام Splash ، ذستور اجرای فرم اصلی رو بدم،... خوب باز همون مشکل اول پیش
میاد، چون بعد از اتمام Splash، تازه شروع به لود کردن فرم اصلی میکنه. ولی من می خوام همون موقع که Splash
نشون داده میشه، فرم هم شروع به لود شدن بکنه یعنی همزمان دو کار انجام بشه.

حالا ایده شما چی بود ؟
قبل از گفتن فکری که به نظرم رسیده بگم که: شاید این روشی که گفتید، اون اشکال شماره یک که تو پست قبلیم
گفته بودم رو نداشته باشه، ولی من هرچی به کدهای شما نگاه میکنم، اون دو کار، همزمان انجام نمیشه.
خلاصه اگه اشکال از منه که نمیفهمم، شرمنده.

خوب حالا فکری که به ذهنم رسیده وهنوز امتحانش نکردم:
به همون روشی که توی پست اولم پیوست کرده بودم، یه Splash Screen میسازم ولی کاری میکنم که با شروع
Splash screen، یه فایل exe از توی Resource برنامه اجرا بشه (البته اگه بشه اینکارو کرد)

فایل exe رو با نرم افزار Microsoft Expression Blend میسازم، به گونه ای که بعد از 3 یا 4 ثانیه به اتمام برسه. و
البته Splash Screen رو هم روی 3 تا 4 ثانیه تنظیم میکنم. تو این 4 ثانیه، روی هر سیستمی که باشه، برنامم Load
شده و آماده برای نمایش دادن. بعد از اتمام 4 ثانیه، بلافاصله برنامه نمایش داده میشه

حالا یه سوال پیش مییاد که آیا امکان قرار دادن فایل exe توی Resource و اجرای اون از داخل ریسورس وجود داره یا
نه؟ که شاید بهتر باشه تو یه تاپیک جدا بپرسمش.

راستی دوست من خوشحال میشم هرجا رو که اشتباه برداشت کردم بهم تذکر بدید.
و یه سوال:

فرق FormShown با FormLoad چیه؟



ممنون
 
آخرین ویرایش:

the_king

مدیرکل انجمن
فرق FormShown با FormLoad چیه؟
FormLoad موقعی که تازه دستور نمایش یک فرم را داده اید قبل از اینکه فرم نمایش داده بشه فراخوانی می شه،
چون کد هایی که داخلش می نویسید قبل از نمایش فرم اجرا می شوند عموما مواردی که باید در ابتدای نمایش فرم
انجام شوند رو در FormLoad می نویسند، مثل پر کردن DataGridView، مشخص کردن آیتم انتخاب شده در ComboBox
و موارد مشابه.

FormShown موقعی که فرم نمایش داده شد فراخوانی میشه، یعنی معمولا لحظاتی کوتاه بعد از FormLoad
عموما کد هایی در FormShown نوشته میشه که باید بعد از نمایش فرم اجرا شوند، نه پیش از نمایش فرم.
بعضی از کد ها رو باید در FormShown بنویسید چون نوشتن شان در FormLoad ظاهر مناسبی نداره، مثلا اگر بخواهید
موقع نمایش یک فرم در همان ابتدای کار یک MessageBox را به کاربر نشان دهید. اگر کد نمایش MessageBox را در
FormLoad بنویسید، قبل از اینکه فرم نمایش داده بشه MessageBox مشاهده خواهد شد و ظاهر فرم در پشت آن
قرار نخواهد گرفت، پس باید این کد در FormShown نوشته بشه تا ابتدا به فرم فرصت نمایش داده بشه.
 

جدیدترین ارسال ها

بالا