استفاده از دکمه های انیمیشنی فلش در سی شارپ

rasool_jelve

Active Member
سلام به همه دوستان و اساتید عزیز

برای روشن شدن سوالم ابتدا یه مقدمه چینی میکنم و در انتها سوالم مشخص میشه

همنطور که اطلاع دارید با استفاده از نرم افزار فلش میتونیم نرم افزار های مولتی مدیا با دکمه های انیمیشنی و صفحات پویا بسازیم در این روش برنامه نویسیش یادگیریش زمان بره و کد نویسی به این شیوه


بعضی از افراد برای تسریع کار از نرم افزار های اتورن ساز استفاده می کنند مثل اتوپلی مدیا استادیو و مولتی مدیا بیلدر

که قابلیت ویژه ای دارند و اون هم این هست که با دستور fscomandدر فلش اسکریپت های اتوپلی رو در این فرمان فراخوانی میکنند و وقتی در نرم افزار اتوپلی وارد ش میکنند
دکمه حالت انیمیشنی و پویای خودش رو داره ولی کد اتوپلی رو درون خودش اجرا میکنه مثلا وقتی موس رو روی دکمه فلش می بریم رویداد بزرگ شدن دکمه یا تغییر رنگ و ... اتفاق میفته که مال کد نویسی و انیمیشن داخله خودشه و وقتی روش کلییک مکنیم مثلا رویداد و فرمان پریدن به صفحه بعد اتفاق میفته که مربوط به اسکریپت اتو پلی میشه که همون فرم در سی شارپ میشه

حالا بعد این توضیحات سوالم از دوستان و اساتی اینه که د راهنمایی کنن که در سی شارپ چطوری متونیم این کار رو انجام بدیم یه انیمیشن پویا در فلش و اجرای کد در سی شاپ طبق روال بالا که در اتورن ساز ها مثال زدم
 

the_king

مدیرکل انجمن
سلام به همه دوستان و اساتید عزیز

برای روشن شدن سوالم ابتدا یه مقدمه چینی میکنم و در انتها سوالم مشخص میشه

همنطور که اطلاع دارید با استفاده از نرم افزار فلش میتونیم نرم افزار های مولتی مدیا با دکمه های انیمیشنی و صفحات پویا بسازیم در این روش برنامه نویسیش یادگیریش زمان بره و کد نویسی به این شیوه


بعضی از افراد برای تسریع کار از نرم افزار های اتورن ساز استفاده می کنند مثل اتوپلی مدیا استادیو و مولتی مدیا بیلدر

که قابلیت ویژه ای دارند و اون هم این هست که با دستور fscomandدر فلش اسکریپت های اتوپلی رو در این فرمان فراخوانی میکنند و وقتی در نرم افزار اتوپلی وارد ش میکنند
دکمه حالت انیمیشنی و پویای خودش رو داره ولی کد اتوپلی رو درون خودش اجرا میکنه مثلا وقتی موس رو روی دکمه فلش می بریم رویداد بزرگ شدن دکمه یا تغییر رنگ و ... اتفاق میفته که مال کد نویسی و انیمیشن داخله خودشه و وقتی روش کلییک مکنیم مثلا رویداد و فرمان پریدن به صفحه بعد اتفاق میفته که مربوط به اسکریپت اتو پلی میشه که همون فرم در سی شارپ میشه

حالا بعد این توضیحات سوالم از دوستان و اساتی اینه که د راهنمایی کنن که در سی شارپ چطوری متونیم این کار رو انجام بدیم یه انیمیشن پویا در فلش و اجرای کد در سی شاپ طبق روال بالا که در اتورن ساز ها مثال زدم

Adobe برای نمایش فایل های فلش یک کنترل ActiveX به نام Shockwave Flash Object داره که می توانید در #C و هر زبان دیگری که از کنترل های ActiveX پشتیبانی می کنه بکار ببرید و روی فرم قرار دهید.
برای اینکه از #C به فلش فرمان یا پیغامی رو ارسال کنید، کنترل مورد نظر یک متد CallFunction داره که توسط اون می توانید یک متن string رو به یک تابع خاص در فلش ارسال کنید.
کد:
axShockwaveFlash1.CallFunction("Play Music");

تابع دریافت کننده این پارامتر در فلش مشخص میشه، یعنی در هنگام طراحی فلش می توانید تعیین کنید که این پارامتر string توسط چه تابعی دریافت و پردازش بشه.
ExternalInterface.addCallback مشخص می کنه که چه تابعی مسئول پردازش پیغام هایی است که از #C به فلش ارسال میشه.
مثلا یک تابع به اسم csharpfunction تعریف می کنید و به عنوان تابع مسئول Callback معرفی می نمایید :
کد:
externally:ExternalInterface.addCallback("csharpfunction", csharpfunction);

function csharpfunction(val:String):void
{
	// do something
}

همچنین برای اینکه از فلش به #C پیغامی رو ارسال کنید، در فلش ExternalInterface.call یک فرمان و پارامتر همراهش را به #C ارسال می کند، پارامتر اول عنوان فرمان است و پارامتر دوم مقدار ای که به عنوان آرگومان آن فرمان ارسال می شود :
کد:
ExternalInterface.call("YourCommand", "YourMessage");

در #C این فرمان و مقدار همراهش رخداد FlashCall رو فراخوانی می کنند و در داخل آن رخداد می توانید بر اساس فرمان مورد نظر کاری انجام دهید :
کد:
        private void axShockwaveFlash1_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
        {
            
        }
در FlashCall پارامتر e.request اطلاعاتی است که از فلش دریافت شده و فرمت xml دارد.
کد:
<invoke name="YourCommand" returntype="xml">
<arguments>
<string>YourMessage</string>
</arguments>
</invoke>

می توانید آنرا در یک XmlDocument پردازش کنید :
کد:
        private void axShockwaveFlash1_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
        {
            var document = new System.Xml.XmlDocument();
            document.LoadXml(e.request);
            var command = document.FirstChild.Attributes.Item(0).InnerText;
            if (command == "YourCommand")
            {
                var argument = document.GetElementsByTagName("arguments")[0].InnerText;
            }
        }
 

rasool_jelve

Active Member
Adobe برای نمایش فایل های فلش یک کنترل ActiveX به نام Shockwave Flash Object داره که می توانید در #C و هر زبان دیگری که از کنترل های ActiveX پشتیبانی می کنه بکار ببرید و روی فرم قرار دهید.
برای اینکه از #C به فلش فرمان یا پیغامی رو ارسال کنید، کنترل مورد نظر یک متد CallFunction داره که توسط اون می توانید یک متن string رو به یک تابع خاص در فلش ارسال کنید.
کد:
axShockwaveFlash1.CallFunction("Play Music");

تابع دریافت کننده این پارامتر در فلش مشخص میشه، یعنی در هنگام طراحی فلش می توانید تعیین کنید که این پارامتر string توسط چه تابعی دریافت و پردازش بشه.
ExternalInterface.addCallback مشخص می کنه که چه تابعی مسئول پردازش پیغام هایی است که از #C به فلش ارسال میشه.
مثلا یک تابع به اسم csharpfunction تعریف می کنید و به عنوان تابع مسئول Callback معرفی می نمایید :
کد:
externally:ExternalInterface.addCallback("csharpfunction", csharpfunction);

function csharpfunction(val:String):void
{
    // do something
}

همچنین برای اینکه از فلش به #C پیغامی رو ارسال کنید، در فلش ExternalInterface.call یک فرمان و پارامتر همراهش را به #C ارسال می کند، پارامتر اول عنوان فرمان است و پارامتر دوم مقدار ای که به عنوان آرگومان آن فرمان ارسال می شود :
کد:
ExternalInterface.call("YourCommand", "YourMessage");

در #C این فرمان و مقدار همراهش رخداد FlashCall رو فراخوانی می کنند و در داخل آن رخداد می توانید بر اساس فرمان مورد نظر کاری انجام دهید :
کد:
        private void axShockwaveFlash1_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
        {
            
        }
در FlashCall پارامتر e.request اطلاعاتی است که از فلش دریافت شده و فرمت xml دارد.
کد:
<invoke name="YourCommand" returntype="xml">
<arguments>
<string>YourMessage</string>
</arguments>
</invoke>

می توانید آنرا در یک XmlDocument پردازش کنید :
کد:
        private void axShockwaveFlash1_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
        {
            var document = new System.Xml.XmlDocument();
            document.LoadXml(e.request);
            var command = document.FirstChild.Attributes.Item(0).InnerText;
            if (command == "YourCommand")
            {
                var argument = document.GetElementsByTagName("arguments")[0].InnerText;
            }
        }


بی نهاییت تشکر از توضیحات جامعتون که وقت گذاشتید

یه سوال این که مثلا اگر بخایم یک دکه انیمشنی رو که با فلش ساخته شده در دلش کدی قرار بدیم که یه فرم رو مخفی کنه و فرم دیگه رو نشون بدیه چه جوری در فلش بیاد بنویسیم و در سی شارپ چه جوری بهش بفهموینم که این کار رو انجام بده

البته نکته مهم اینجاست که در نرم افزار های اتون رن ساز معروف مثل اتوپلی همین که در فرمان fs commandخود فلش کد رو بنویسیم کار حله و وقتی فایل فلش رو در اتوپلی وار کنیم هوشمند عمل میکنه به این شکل تقریبا

fs commanf"next pagr" p
برای سی شارپ چطوری بنویسیم البته در اتوپلی هر صفححه page هستت و در سی شارپ فرم
ممنون
 

the_king

مدیرکل انجمن
بی نهاییت تشکر از توضیحات جامعتون که وقت گذاشتید

یه سوال این که مثلا اگر بخایم یک دکه انیمشنی رو که با فلش ساخته شده در دلش کدی قرار بدیم که یه فرم رو مخفی کنه و فرم دیگه رو نشون بدیه چه جوری در فلش بیاد بنویسیم و در سی شارپ چه جوری بهش بفهموینم که این کار رو انجام بده

البته نکته مهم اینجاست که در نرم افزار های اتون رن ساز معروف مثل اتوپلی همین که در فرمان fs commandخود فلش کد رو بنویسیم کار حله و وقتی فایل فلش رو در اتوپلی وار کنیم هوشمند عمل میکنه به این شکل تقریبا

fs commanf"next pagr" p
برای سی شارپ چطوری بنویسیم البته در اتوپلی هر صفححه page هستت و در سی شارپ فرم
ممنون

در فلش هیچ کنترلی روی فرم ندارید بنابر این صرفا برای کلیک شدن دکمه در فلش یک فرمانی مثل "CloseForm" رو ارسال می کنید.
کد:
 ExternalInterface.call("CloseForm", "");

بعد در #C شرط می کنید که اگر در رخداد FlashCall فرمان "CloseForm" دریافت شد ()Close کنه یا هر متد دیگری که مربوط به فرم ئه.
کد:
        private void axShockwaveFlash1_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
        {
            var document = new System.Xml.XmlDocument();
            document.LoadXml(e.request);
            var command = document.FirstChild.Attributes.Item(0).InnerText;
            if (command == "CloseForm")
            {
                Close();
            }
        }
 

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

بالا