PDA

View Full Version : سوال: استفاده از skin دربرنامه



rezabnm
چهارشنبه 18 آذر 1388, 23:03 عصر
با سلام از مهندس عزيزي كه لطف كردن و تواين بخش خواستن روش استفاده از اسكين ها براي فرم هاي برنامه قرار دادن مي خواستم كه يكم واضح تر توضيح بدن تا منم كه كم سواد هستم متوجه بشم چه خبر و چهجوري ميشه از اين فرم ها تو برنامه استفاده كرد اصلا چه جوري تو محيط ويژوال اين كلاس هارو تعريف كنم و ازش استفاده كنم چون ميخوام اگه بتونم ياد بگيرم تو پروژه استادم ازش استفاده كنم تا نمرشو كامل بگيرم البته قبل از استاد اول واسه خودم مهم ياد بگيرم چون كار بسيا جالبي البته اگر شما كمكم كنيد تا بهتر متوجه بشم و ياد بگيرم باتشكر.

Computer.Programmer
چهارشنبه 18 آذر 1388, 23:27 عصر
دوست عزیز برات یک مثال کوچیک میزارم تا بهتر متوجه بشی.
موفق باشی

rezabnm
پنج شنبه 19 آذر 1388, 14:34 عصر
سلام به دوست گرامي عزيز من اصلا بيسوادم شما اگه ميشه يجوري توضيح بده كه منم متوجه بشم من از ويژوال استديو 2005 استفاده ميكنم و پروژه ايروكه بصورت فايل زيپ برام فرستاده بودي رو هم خواستم استفاده كنم كه زماني كه وارد پوشه skinميشدم (البته از اونجاي كه اول برنامه ويژوال نوشته
open: project) و روي فايل Skin.vbproj كليك ميكنم error زير رو بهم ميده:
http://up.iranblog.ir/4/1260524237.jpg
و وقتي رو اين يكي Skin.sln كليك ميكنم اين ارور رو ميده :
http://up.iranblog.ir/4/1260472408.jpg
البته من با add reference اون فايل هاي dll(IrisSkin2.dllو,My Project.Resources.Designer.vb.dllSkin.vshost.exe.m anifest)رو تو referenceهام addكردم و خواستم تا با استفاده از كد هاي كه تو Form1.vb گذاشته بودي يعني كد زير رو تو برنامه اضافه كردم كه errorزير رو داد:
كد:
Dim x As Integer = 1

Dim skn As New Sunisoft.IrisSkin.SkinEngine(Me, "Skins\a (" & x & ").ssk")

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
skn.Active = False
x += 1
skn.SkinFile = "Skins\a (" & x & ").ssk"
skn.Active = True
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
skn.Active = False
x -= 1
skn.SkinFile = "Skins\a (" & x & ").ssk"
skn.Active = True
End Sub
error:
Error 1 Assembly '..\..\Skin\Skin\bin\Debug\Skin.vshost.exe.manifes t' has mismatched identity 'MyApplication.app', expected file name: 'MyApplication.app.manifest'. test2
اصلا هم نذاشت حتي كامپايل بشه لطفا اگه ميشه من رو بيشتر راهنماي كن ممنون ميشم

Computer.Programmer
پنج شنبه 19 آذر 1388, 15:30 عصر
دوست عزیز شما چون از VS 2005 استفاده می کنی و پروژه ای که برات گذاشتم با VS 2008 نوشته شده نمی تونی اونو باز کنی.
حالا بگذریم تکه تکه برات توضیح می دم تا خودت اونو بتونی توی برنامت استفاده کنی و روش کار باهاش که خیلی خیلی ساده هست رو یاد بگیری.

اول فایل IrisSkin2 رو به لیست رفرنسات اضافه کن. بعد در فایل کد فرم مد نظرت بیا تابع New رو ایجاد کن به این صورت:




Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
End Sub



البته با نوشتن کلمات کلیدی Sub New و زدن کلید اینتر مابقیه کدها خودش تولید میشه.
حالا بعد از کد InitializeComponent بیا و شیی از فایل اضافه شده به رفرنسات ایجاد کن. این متغیر باید به این صورت تعریف بشه.




Dim skn As New Sunisoft.IrisSkin.SkinEngine



حالا مسیر اسکینت رو به متغییر ایجاد شده میدی به این صورت:




skn.SkinFile = "Skins\a (1).ssk"



سپس فرمی که قرار است این اسکین بر روی آن اعمال شود را مشص می نمایید به این صورت:




skn.AddForm(Me)



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

برای تغییر این اسکین باید مثلاً با استفاده از یک باتون آدرس فایل اسکین را تغییر داده که قبل از این کار بایستی اسکین جاری را غیر فعال کنید و پس از اعمال تغییرات دوباره آن را فعال نمایید. به این صورت:




skn.Active = False
skn.SkinFile = "Skins\a (2).ssk"
skn.Active = True



امیدوارم مطلب رو خوب رسونده باشم.
اگه سوالی بود بپرس.
موفق باشی.

rezabnm
پنج شنبه 19 آذر 1388, 21:26 عصر
حاجي خدا خيرت بدهه:قلب:
خيلي باحالي كرتيم به مولا:کف::تشویق::تشویق::تشویق: :تشویق:
چه حالي دادي(يه شركت تيتاپ سازيرو زدي به نامم )
دادش فقط يه سوال ديگه شرمنده ها چه جوري ميشه اين اسكين هارو تو برنامه يعني همراه فايل exe قرارداد يعني داخل فايل exeاگه خارجش هم شد فقط راهنماي كن كه چجوري ميشه مسيري كه به فايل skinداديم اگه برنامه تو يه سيستم ديگه خواستم نصب كنم(يعني از برنامه يه فايل نصبي مثل اوناي كه ما توسيستم مون نصب ميكنيم مثل مدياپلير )اگه كاربر برنامه رو خواست تو درايو مثلا dنصب كنه من تو فايل exe براي skinها نوشتم تو درايو c اون موقع كه اجرا نميشه نميدونم تونستم منظورم رو برسونم يا نه ولي خيلي باحالي.:قلب:

Computer.Programmer
جمعه 20 آذر 1388, 17:22 عصر
دوست عزیز از اینکه تونستم کمکت کنم خوشحالم.

برای اینکه شما بتونی یک فایل رو از داخل خود فایل exe اجرا کنی باید اونو به لیست
Resources اضافه کنی و سپس از اون یک FileStream ایجاد کنی که این کار کمی برات پیچیده میشه.

برای راه دوم هم شما کافی تمام فایل های اسکین رو داخل پوشه ای در مسیر فایل اجراییت بریزی. که در این حالت می تونی به دو روش آدرس فایل ها رو به دست بیاری:
1 - با استفاده از دستور My.Computer.FileSystem.CurrentDirectory مسیر فایل رو به دست میاری و سپس در ادامه رشته مسیر پوشه اسکین ها رو اضافه می کنی.

2 - می تونی مسیر فایل رو به این صورت بدی: skins\a(0).ssk . که در اینجا skin نام پوشۀ اسکین هاست و a(0).ssk هم نام فایل اسکین است.

موفق باشی

rezabnm
جمعه 20 آذر 1388, 22:04 عصر
سلام ممنون بابت آموزش هاي مفيدت اما اگه يكم آسون تر راهنماي كني ممنون ميشم چون تو دفه قبلي خيلي واضح بود اگه اين سري هم مثل قبلي بگي ممنون ميشم چون من يكم دير متوجه ميشم دوزاريم نميوفته البته اگه از دست سوال كردناي بيش از اندازه من ناراحت نشده باشي با تشكر.

viper2009
شنبه 21 آذر 1388, 00:18 صبح
دوست گرامی rezabnm

برای رفع مشکل باز کردن آن پروژه :

خودت یک پروژه ایجاد کن و با کلیک راست بر روی Soloution و انتخاب گزینه Existing Item
این پروژه را به پروژه خودت اضافه کن فقط نام فرم اصلیت رو هم همنام فرم اصلی این پروژه تغییر بده

انشاءالله که موفق باشی.

Computer.Programmer
شنبه 21 آذر 1388, 13:07 عصر
اول بگو ببینم من مشکلت رو درست متوجه شدم؟ شما نمی دونی چه طوری با تغییر مسیر برنامت فایل های اسکینت لود بشن. درسته؟
اگه جوابت مثبته جوب این سوال رو این جوری شروع می کنم:
شما در هرجایی که فایل برنامت وجود داره باید پوشه ای با نام skins (یا هرنام دیگه ای که از قبل تعریف کردی) وجود داشته باشه. کاری به این نداریم که برنامه قراره توی کدوم درایو یا زیر شاخه ای باشه ما فقط به این کار داریم که همراه فایل برنامه (در مسیر فایل برنامه) باید پوشه ای با نام skins وجود داشته باشه.
حالا توی برنامه اگه مسیر پوشۀ فایل skins رو نزنی (منظور نام درایو و زیر شاخه هاش هست) و فقط به نوشتن نام خود پوشه اکتفا کنی این کار باعث این می شود که برنامه به دونبال نام پوشۀ وارد شده در مسیری بگردد که خودش قرار دارد. با مثالی موضوع رو واضح تر می کنم:
فرض کنید فایل برنامه شما در مسیر زیر وجود داره:
C:\Users\Documents\Visual Studio 2008\Projects\WindowsApplication1\Debug
و فایل اسکین های شما نیز در همون مسیر یعنی آدرس زیر وجود داره
C:\Users\Documents\Visual Studio 2008\Projects\WindowsApplication1\Debug\Skins
حالا اگه شما در برنامه آدرس فرضاً فایل شماره یک در پوشۀ Skins رو بخواین بدین می تونید به این صورت عمل کنید:(با این فرض که نام فایل شماره یک a(0).ssk هست)

Dim path as String = "Skins\a(0).ssk"

در واقع شما مابقیه آدرس را حذف کرده اید و به برنامه می گویید که پوشۀ Skins رو در مسیر جاری خودش جستجو نماید حالا اگه فایل شما جابجا بشه و ارد درایو d بشه در صورتی که پوشۀ skins هم در کنارش باشه دیگه مشکلی نخواهید داشت.

البته راه های دیگری هم هست که مطمئن تر باشه ولی فکر کنم برای کاری که شما می خواین بکنین نیاز نیست خیلی برای خودتون موضوع رو سخت بگیرین.

امیدوارم توضیحاتم بدردتون بخوره.
در آخر هم شما نیازی نیست بابت سوالاتی که می پرسید خودتو ناراحت کنی. این مکان برای سوال پرسیدن هستش. البته توصیه من اینه که آدم کمی خودش درگیر مشکلات بکنه بعد اگه واقعاً متوجه نشد سوال بپرسه که امیدوارم شما هم همین طور باشید.

موفق باشید دوست من

rezabnm
یک شنبه 22 آذر 1388, 23:50 عصر
سلام دوست عزيز بابت راهنماي شما بسيار ممنونم و برايم جالب و سوال برنگيز بود انشا الله كه از خدا خيرش را ببيني چون شما درواقع نقش يك آموزگار را براي من ايفاكردي كه اين از بالا ترين ارزش ها است اين رو به حساب تملق يا چاپلوسي نذار چون واقعيت هست ولا غير اما دوست عزيز بدليل اينكه من در ياد گيري كمي حرس و طمع دارم (ببخشيد چي كارش ميشه كرد كامپيوتر عشق ديگه) اگر برايت مقدور بود روش ديگر راهم بگي خالي از لطف نيست در آخر باز هم بخاطر آموزش هاي شما به من كمال تشكر را دارم.(در حقيقت كه ساده ترين روش بود)

Computer.Programmer
دوشنبه 23 آذر 1388, 12:09 عصر
در ابتدا باید عرض کنم از اینکه می تونم کمکت کنم خوشحالم.
برای کاری که شما می خوای بکنی روش های زیادی وجود داره ولی من سعی می کنم روشی بگم که نیاز به کد نویسی زیادی نداره و احتمالاً باید برات جالب باشه.

توی این روش می خوایم فایل اسکین رو داخل خود فایل exe بارگذاری کنیم و هر زمان که لازم بود اون رو تبدیل به یک فایل temp کنیم و ازش استفاده کنیم.

برای این کار اول در Solution Explorer دکمه show all رو بزن.
حالا زیر شاخۀ My Project رو باز کن
فایل Resource.rex رو باز کن
در تول بار این پنجره گذینه Add Resourc و سپس Add Existing File رو بزن
حالا مسیر فایل مورد نظر (فایل اسکین) رو بهش بده و بعد اونو به مثلاً نام a تغییر نام بده و پنجره Resource رو ببند.
به فایل کد برنامه بر می گردیم در رویداد Form_Load می خوایم کاری کنیم که این اسکین به فرم اختصاص یابه
برای اینکار باید یک فایل موقت ایجاد کنیم و فرم رو به اون اختصاص بدیم و بعد فایل رو پاک کنیم.
برای ساخت فایل ما باید با نیم اسپیس IO کار کنیم. پس متغییری از نوع IO.BinaryWriter ایجاد می کنیم و داخل اون مسیر فایل موقتمون رو جهت ایجاد بهش می دیم. به صورت زیر:




Dim tempFile As New IO.BinaryWriter(IO.File.Open("temp", IO.FileMode.Create, IO.FileAccess.Write))



این دستور فایل رو ایجاد کرده و نام اون رو temp میزاره.

حالا باید اطلاعات فایلی رو که داخل Resource قرار دادیم رو به صورت byte داخل فایل ایجاد شده بریزیم:




tempFile.Write(My.Resources.a, 0, My.Resources.a.LongLength)



متد Write اطلاعات رو داخل فایل میریزی و فایل ما که الان آرایه ای از بایت هاست به صورت My.Resources.a قابل دسترسی است. (بقیه آرگومانها مربوط به offset و طول آرایه جهت ریختن اطلاعات میشه)

حالا فایل رو می بندیم به این صورت:




tempFile.Close()



حالا ما فایلی از نوع اسکین با نام temp در مسیر جاری داریم که اونو به صورت زیر مانند قبل به فرممون اختصاص می دیم.:




Dim skn As New Sunisoft.IrisSkin.SkinEngine(Me, "temp")



حالا که فایل لود شد می تونیم فایل temp رو پاک کنیم. به این صورت:




IO.File.Delete("temp")



امیدوارم بتونی ازش استفاده کنی.

اگه مشکلی بود سوال کن.
موفق باشی

gigidagostino
جمعه 23 بهمن 1388, 17:34 عصر
سلام
من با راهنماییهاتون از چند تا اسکین استفاده کردم اما تمام رنگ نوشته هام توی فرمهام تغییر کرد.این خاصیت تمام اسکین هاست؟تمام برنامم بهم میریزه اینجوری