ساختن نسخه پرتابل از برنامه مون
سلام به همه برنامه نویس های VB
نکته : چون خواستم میتدی ها هم بتونن این کارو بکنن، آموزش رو به صورت قدم به قدم نوشتم حرفه ای ها خسته نشن:44:
برای ساختن نسخه پرتابل نرم افزارمون ما باید فایل هایی که تو برنامه مون استفاده شده و منبع خارجی داره رو به برنامه مون بچسبونیم و قبل از اجرا شدن برنامه اونا رو همون جایی که لازمه قرار بدیم. مثلا اگه از فایل Dll خواصی تو برنامه استفاده کردیم توی پوشه system32 قرار بدیم یا فونت ها رو تو پوشه Fonts.
ما تو این مثال می خوایم یه فایل Ocx ، یه فایل Dll ، یه فایل فونت (Ttf) و یه فایل Jpg رو به برنامه بچسبونیم تا برناممون دیگه به این فایل ها نیاز نداشته باشه و از تو خودش اجرا کنه.
Visual C++ رو باز کنید از منوی File گزینه New رو انتخاب کنید.
در تب Resource Script،Files رو انتخاب کنید.
تو پنجره ای که اومد کلیک راست کنید و Import رو انتخاب کنید، Files Type رو *.* قرار بدید.
فایل Ocx ای که تو برنامتون استفاده شده رو انتخاب کنید. پنجره ای که باز شده نوع Resource رو می خواد بدید Ocx.
خوب پنجره ای که باز شد رو ببندید و روی فایلی که تو پوشه Ocx هستش کلیک راست کنید و Properties رو بزنید و ID شو عوض کنید مثلا بزارید 1001 .
دوباره کلیک راست کنید و Import رو بزنید و فایل Dll مورد نظرتون رو انتخاب کنید.
نوع ریسورس رو بنویسید Dll و ID شو بزارید 1002. حالا فایل Jpg رو Import کنید و نوع شو بنویسید Jpg و ID ایش هم 1003.
حالا نوبت به فایل Ttf می رسه Import اش کنید و نوع Ttf و ID رو براش 1004 قرار بدید.
کارمون تو این قسمت تموم شد. به منوی فایل برید و گزینه Save as رو بزنید و Save as type رو res.* انتخاب کنید و ذخیرش کنید. حالا به VB برید.
خوب تو قسمت پروژه کلیک راست کنید و از منوی بازشو Add و سپس AddFile... رو انتخاب کنید یا می تونید از منوی Project گزینه Add File… رو انتخاب کنید، فایل ریسورس رو به پروژه تون اضافه کنید.
خوب حالا یه ماژول باز کنید (از منوی Project گزینه Add Module) و توش بنویسید
خوب تو این روال یه متغییر از نوع Byte تعریف کنید
حالا باید فایل های ریسورس رو تو اونجاهایی که می خواییم کپی کنیم. اینجوری
کد:
M = LoadResData(1001, "Ocx")
Open Environ("systemroot") + "\System32\Light Button Control.ocx" For Binary Access Write As #1
Put #1, , M
Close #1
تو خط اول فایل ریسورس رو لود میکنیم می ریزم تو متغییر M و 1001 همون ID فایل هستش و Ocx نوع فایل.
تو خط دوم یه فایل باینری با نام فایل Ocx مون تو مسیری که باید قرار بگیره به عنوان مثال تو System32 باز میکنیم و در خط سوم فایل ریسورس رو تو فایل باینری می نویسم و در خط چهارم فایل باینری رو می بندیم.
برای فایل Dll و Ttf هم از همین روش استفاده می کنیم.
کد:
M = LoadResData(1002, "Dll")
Open Environ("systemroot") + "\System32\BtnLight.dll" For Binary Access Write As #1
Put #1, , M
Close #1
M = LoadResData(1004, "Ttf")
Open Environ("systemroot") + "\Fonts\BNazanin.ttf" For Binary Access Write As #1
Put #1, , M
Close #1
فایل های Jpg رو نمیشه مستقیما تو PictureBox نمایش داد برای همین باید کپی کنیم تو یه مسیری و از اونجا لودش کنیم
کد:
M = LoadResData(1003, "Jpg")
Open Environ("systemroot") + "\Temp\Winter.Jpg" For Binary Access Write As #1
Put #1, , M
Close #1
Picture1.Picture=LoadPicture(Environ("systemroot") + "\Temp\Winter.Jpg")
بجای پوشه Temp از App.Path هم می تونیم استفاده کنیم ، فکر کنم اینجوری بهتر باشه.
اگه فایل تون Bmp بود می تونید از این روش استفاده کنید.
کد:
Picture1.Picture = LoadResPicture(1003, vbResBitmap)
در آخر روال هم فرمی که هنگام شروع باید باز بشه رو نمایش بدید.
نکته : حتما Startup پروژه تون رو Sub Main قرار بدید.(منوی Project گزینه Project1 Properties)
زمانی که فرم1 باز می شه چون تمام فایل های مورد نیازش سرجاشون هستن هیچ اخطاری نمی ده و به درستی کار می کنه. دیگه هیچ احتیاجی به ساختن ستاپ برای برنامه مون نداریم:31:
کل کد ها رو دوباره می نویسم:5:
کد:
Public Sub Main()
Dim M() As Byte
M = LoadResData(1001, "Ocx")
Open Environ("systemroot") + "\System32\Light Button Control.ocx" For Binary Access Write As #1
Put #1, , M
Close #1
M = LoadResData(1002, "Dll")
Open Environ("systemroot") + "\System32\BtnLight.dll" For Binary Access Write As #1
Put #1, , M
Close #1
M = LoadResData(1004, "Ttf")
Open Environ("systemroot") + "\Fonts\BNazanin.ttf" For Binary Access Write As #1
Put #1, , M
Close #1
M = LoadResData(1003, "Jpg")
Open Environ("systemroot") + "\Temp\Winter.Jpg" For Binary Access Write As #1
Put #1, , M
Close #1
Picture1.Picture=LoadPicture(Environ("systemroot") + "\Temp\Winter.Jpg")
Form1.show
End Sub
البته اگه تعداد فایل هاتون زیاده می تونید یه فرم Splash نمایش بدید تا تمام فایل ها لود بشن.
امیدوارم بدردتون خورده باشه:10:
تشکر یادتون نره:46: