PDA

View Full Version : مبتدی: نحوه دخیره تصویر و موزیک در داخل فایل اجرایی



mirage041
یک شنبه 07 آذر 1389, 09:36 صبح
سلام خدمت دوستان و اساتید .
چطوری می شه در سی شارپ یک تصویر یا یک فرمت وسیقی رو طوری طخیره کرد که فقط با اجرای فایل exe نشون یا پخش بشه .
منظور آذرس تصویر یا موسیقی از بیرون نباشه .
این برنامه فقط یک تصویر یا یک موسیقی رو در بر داره .

M.YasPro
یک شنبه 07 آذر 1389, 09:57 صبح
سلام
شما باید از ریسورسها استفاده کنید .
برای اینگار روی نام پروژه راست کلید کنید . properties , تب resources و نوع داده تون رو انتخاب کنید ، داده رو وارد کنید و این پنجره رو بعد از ذخیره کردن ببندید .
برای استفاده از این ریسورسها میتونید به اینصورت عمل کنید :


ProjectName.Properties.Resources.DataName;


موفق باشید.

mirage041
یک شنبه 07 آذر 1389, 10:25 صبح
می شه با یک مثال مطلب رو کامل کنید .
البته برای تصویر مثلا .

M.YasPro
یک شنبه 07 آذر 1389, 10:39 صبح
کجاش نا مفهومه؟
شما انجام دادید و جاییش رو متوجه نشدید ؟

ایمان مدائنی
یک شنبه 07 آذر 1389, 11:01 صبح
چرا در بانك ذخيره نميكنيد
اينطوري روي سرعت و حجمه exe‌هم تاثير نميزاره

debugger
یک شنبه 07 آذر 1389, 13:23 عصر
سلام
شما باید از ریسورسها استفاده کنید .
برای اینگار روی نام پروژه راست کلید کنید . properties , تب resources و نوع داده تون رو انتخاب کنید ، داده رو وارد کنید و این پنجره رو بعد از ذخیره کردن ببندید .
برای استفاده از این ریسورسها میتونید به اینصورت عمل کنید :


ProjectName.Properties.Resources.DataName;


موفق باشید.

ایا میشه یک کامپوننت (dll) را به این صورت در برنامه جای داد ؟؟ آیا برنامه در این صورت هم می تونه از کامپوننت استفاده کنه

چون من یک کامپوننت دارم که نمیخوام افراد دیگه ازش کپی برداری کنند .

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

لطفا راهنمایی بفرمائید

با تشکر

debugger
سه شنبه 09 آذر 1389, 09:30 صبح
جناب M.YasPro ممنون میشم جواب بدین

M.YasPro
سه شنبه 09 آذر 1389, 10:24 صبح
اینجا (http://stackoverflow.com/questions/666799/embedding-unmanaged-dll-into-a-managed-c-dll)رو ببینید .

water_lily_2012
سه شنبه 16 آذر 1389, 21:28 عصر
آقای M.YasPro من فایل فلش خودم را وارد Resource کردم. حالا چگونه در کد زیر از اون استفاده کنم.

private void Login_Load(object sender, EventArgs e)
{
string strPath = Application.StartupPath + "\\LForm.swf";
axShockwaveFlash1.LoadMovie(0, strPath);
}فکر کنم باید اون را در یک پوشه ذخیره کرده و استفاده کنم ولی چگونه و در کجا باید این کد را وارد کنم.

ahrimaneahurai
چهارشنبه 17 آذر 1389, 00:31 صبح
YourNamespace.Properties.Resources
برای استفاده از فایل فلش

water_lily_2012
چهارشنبه 17 آذر 1389, 08:38 صبح
سلام
می دونم که باید با استفاده از این دستور به فایل مورد نظر در ریسورس دسترسی داشته باشم.
مثلا برای فایل من:

Library.Properties.Resources.LForm
درسته؟
حالا باید چه کار کنم. آخه خروجی این تابع بایت هست. اگر لطف کنید یک مثال کامل بنویسید.

private void Login_Load(object sender, EventArgs e)
{
string strPath = Application.StartupPath + "\\LForm.swf";
axShockwaveFlash1.LoadMovie(0, strPath);
}
قبلا در دستور بالا محل فایل فلش را روی درایو تعیین می کردم و به صورت یک رشته به AxShockWave می دادم. الان باید چه کار کنم.

M.YasPro
چهارشنبه 17 آذر 1389, 09:36 صبح
اگر مطمئن هستید که axShockwaveFlash1.LoadMovie اور لودی برای لود فایل فلش نداره ( یعنی پارامتر ورودی تابع از نوع swf باشه ) میتونید از این ترفند استفاده کنید :
هر جا که می خواهید فایل فلش رو پخش کنید اونو توی حافظه ذخیره کنید با این کد :


string path = Environment.GetFolderPath(Environment.SpecialFolde r.ApplicationData);
File.WriteAllBytes( path+ @"\LForm.swf", (WindowsFormsApplication1.Properties.Resources.cus tsat));و هر جا که خواستید مثلا فرم پخش رو ببندید (کارتون با فایل فلش تموم شد) اون رو پاک کنید . با این کد :


File.Delete(path + @"\LForm.swf");

یه بار امتحان کنید ببینید میشه بعد از loadmovie بلافاصله فیل فلش رو از هارد پاک کرد ، احتمالا این تابع بعد از خوندن این فایل اون رو در رم نگه میداره ، که اگر اینجوری باشه امنیت فایلتون بیشتر میشه .

پاورقی:تو کلاس Environment.SpecialFolder فولدرهای پیش فرض ویندوز هستند مثل system32,tempfolder , ... توی هر کدوم از اینا بخواید میتونید این فایل رو بریزید و از همونجا اون فایل رو حذف کنید .

موفق باشید ./

water_lily_2012
چهارشنبه 17 آذر 1389, 11:36 صبح
الان تست می کنم. ولی بعد از لود فلش امتحان کردم برنامه به اون نیازی نداشت.

شرمنده. من در این مباحث تازه کارم.
custsat چیه؟ دیفینیشن وجود نداره.
بعد از لود در حافظه چطور در Axshockwaveflash نشونش بدم.

M.YasPro
چهارشنبه 17 آذر 1389, 12:01 عصر
custsat چیزی نیست فایل ریسورس منه .
با کد من کپی میکنید نه لود ، به هرحال کد شما برای اجرای فلش باسد این باشه :

string path = Environment.GetFolderPath(Environment.SpecialFolde r.ApplicationData);
File.WriteAllBytes(path + @"\LForm.swf", (WindowsFormsApplication1.Properties.Resources.cus tsat));
axShockwaveFlash1.LoadMovie(0, path + @"\LForm.swf");

water_lily_2012
چهارشنبه 17 آذر 1389, 12:29 عصر
به این صورت نوشتم:

string path = Environment.GetFolderPath(Environment.SpecialFolde r.ApplicationData);
File.WriteAllBytes(path + @"\LForm.swf", (Library.Properties.Resources.custsat));
axShockwaveFlash1.LoadMovie(0, path + @"\LForm.swf");

این Error را میده:

Error 1 'Library.Properties.Resources' does not contain a definition for 'custsat' E:\Project C#\Library\Library2\Library\Library\UILogin.cs 47 88 Library

M.YasPro
چهارشنبه 17 آذر 1389, 12:42 عصر
custsat فایل ریسورسه منه
همون Dataname من توی
ProjectName.Properties.Resources.DataNameفایل فلش رو به resource تون اضافه نکردید ؟
هست . به پست شماره 2 همین تاپیک برید .

hadi-z
چهارشنبه 17 آذر 1389, 14:32 عصر
آقای M.YasPro من فایل فلش خودم را وارد Resource کردم. حالا چگونه در کد زیر از اون استفاده کنم.

private void Login_Load(object sender, EventArgs e)
{
string strPath = Application.StartupPath + "\\LForm.swf";
axShockwaveFlash1.LoadMovie(0, strPath);
}فکر کنم باید اون را در یک پوشه ذخیره کرده و استفاده کنم ولی چگونه و در کجا باید این کد را وارد کنم.

چرا میخواید فایل فلش رو حتما از Resource بخونید؟؟؟؟


وقتی از کامپوننت ShockwaveFlash برای فلش استفاده کردید و آدرس فایل فلش رو به خاصیت movie دادید باید خاصیت embed movie رو true کنید تا دیگه بدون وجود خود فایل فلش مورد نظر در کامپیوتر مقصد فایلتون نمایش داده بشه.

با این کار فقط کافیه خاصیت visible کامپوننت axShockwaveFlash1 رو true و false کنید.

water_lily_2012
چهارشنبه 17 آذر 1389, 16:23 عصر
چرا میخواید فایل فلش رو حتما از Resource بخونید؟؟؟؟



با این کار فقط کافیه خاصیت visible کامپوننت axShockwaveFlash1 رو true و false کنید.

این کار را در کامپیوتر خودم انجام دادم. بعد فایل فلش را حذف کردم. دیگه فایل را نشون نداد.

آقای M.YasPro با زحمات شما مشکل حل شد. البته من در ابتدا پست های قبلی را خونده بودم و کارهای لازم را انجام داده بودم. به جای نام custsat نام ریسورس خودم را زده بودم ولی باز هم مشکل داشت. گفتم شاید این نامی که شما انتخاب کرده اید چیزی باید باشه که من خبر ندارم.
اما مشکل از AxShockWaveFalsh بود. من نامش را وارد می کردم و سپس دات را که می گذاشتم لیست باز می شد و LoadMovie را انتخاب می کردم و دستورات بعدی. چون رنگش هم هم رنگ فرم بود نمی دانستم که شی مورد نظر وجود نداره. اومدم یکی دیگه به فرم اضافه کنم که متوجه شدم نیست و حتی مقادیر تعریف شده در دیزاینر فرم هم برای این کامپوننت نبود. تعجب هستم پس چرا بعد از زدن دات لیست توابع را نشون می داد.

خداییش از اینکه از دیروز تا بحال وقت شما را هم گرفته ام شرمنده هستم.
راستی هر فرم یک محل برای ریسورس داره و خود برنامه هم یکی درسته؟ چه فرقی بین این دو هست.

hadi-z
چهارشنبه 17 آذر 1389, 17:21 عصر
این کار را در کامپیوتر خودم انجام دادم. بعد فایل فلش را حذف کردم. دیگه فایل را نشون نداد.



اگه آدرس فایلتون رو به خاصیت movie کامپوننت بدید(نه داخل کد) درست کار میکنه.
من خودم همیشه از این روش استفاده میکنم