رفتن به مطلب

تخته امتیازات

  1. Salar82

    Salar82

    پاسخگو و راهنما


    • امتیاز

      18

    • تعداد ارسال ها

      627


  2. محمدرضا شاهپیری

    محمدرضا شاهپیری

    مدیر کل سایت


    • امتیاز

      10

    • تعداد ارسال ها

      4,152


  3. MR.B4A

    MR.B4A

    پاسخگو و راهنما


    • امتیاز

      9

    • تعداد ارسال ها

      737


مطالب محبوب

در حال نمایش مطالب دارای بیشترین امتیاز از زمان ۰۳/۰۷/۳۰ در همه بخش ها

  1. سلام به دوستان و همکاران عزیزم، دوستان تقریباً خیلی هاتون مارو میشناسید و از فعالیت ها و قصد و نیت ما آگاه هستید. من ضمن اینکه عاشق کارم هستم، عاشق آموزش دادن، یاد دادن، حل مشکلات دیگران و… هم هستم: هدفم از همه‌ی پست های آموزشی، توسعه کتابخانه ها و… اینه که مشکلات دیگران حل بشه و درکل دوست دارم تجربیات خودم رو برای دیگران به اشتراک بذارم. اینکار واقعا سود خاصی نداره و میتونم کلا وقت نذارم براش ولی ضمن علاقه و عشق به این کار باورهایی دارم که نمیتونم یاددادن رو کنار بذارم! ✅ مشکل چیه و چه اتفاقی افتاده؟ همونطور که گفتم هدف ما از توسعه و ساخت کتابخانه و سورس کدهای مختلف کاملا واضح، مشخص و مثبته و همشون برای ارتقا علم شما، برای کمک به توسعه بهتر و راحت تر برنامه های شما ساخته میشه. برای همین فعالیت ماهم بصورت کاملا شناخته شده انجام میشه و هیچوقت نامعلوم یا ناپدید نیستیم و همیشه در دسترسیم(از طریق انجمن و یا تلگرام) و کل اطلاعات بنده (محمدرضا شاهپیری) در سطح اینترنت بخاطر فعالیت های خداروشکر مثبتمون یا شرکت توی مسابقات و چالشهای مختلف برنامه نویسی موجوده، ❗️❗️اما به تازگی نمیدونم اخبار و پیامک های #پلیس_فتا رو دیدین یانه، یک نفر یا چندین نفر اقدام به ساخت #رت و #بدافزار های مختلف و کلاهبرداری های میلیاردی از مردم بدبخت میکنه. خب؟ اکثر این رت ها هم در محیط B4A نوشته شده و از یه سری کتابخانه های من و دیگر دوستان استفاده شده و چون بعد از دیکد کردن(مهندسی معکوس) اینطور اپ ها، از اونجایی که خود افراد سازنده ی این بدافزارها کاملاً مخفی و نامعلوم هستن، اسم Mohamadreza-Shahpiri یا Answercenter بدلیل استفاده از کتابخانه های ما در این بدافزارها که بخاطر تبلیغات داخلش درج کردیم دیده میشه و سر همین موضوع ما هفت هشت ماه با #پلیس_فتا درگیر شدیم، چرا که اکثراً فکر میکنند اون بدافزارها یا سورسش رو ما نوشتیم، درصورتی که فقط از لایبرری ما استفاده شده. حالا شما بگو اون کتابخانه هزاران استفاده‌ی مثبت و کاربردی داشته باشه ولی چون استفاده ی منفی شده همه جا بخش منفیش توی ذهن ها و سرزبون ها میوفته. حالا اون ماجرای درگیری خداروشکر تقریباً تموم شده و عزیزانی که مسئولیت این پرونده رو برعهده داشتن متوجه ی اصل قضیه شدند. ولی بازهم میبینم افرادی به پیوی مراجعه میکنن میگن شما رت میسازی؟ من هرچقدر میخوای پول میدم رت درست میکنی؟ این رت رو شما ساختی میدونم! و کلی فحش هم میخورم سر همین با ایدی های بی نام و نشون و بی هویت… یا دیده میشه دوستان متاسفانه توییت میزنن یا توی کانال هاشون درج میکنن که بعلههه فردی که کلاهبرداری کرده رو پیدا کردیم اینم اسمش اینم شمارش…😄😄 درصورتی که اگر کمی دانش برنامه نویسی اندروید داشته باشن متوجه میشن اون بدافزارها از کلاس یا لایبرری ما استفاده کردند نه اینکه ما اون بدافزار رو نوشته باشیم!! من فقط به این افراد میگم این سوال رو از خودتون بپرسید: کسی که رت یا نرم افزار مخرب میسازه دیوونست که اسم خودش رو درج کنه؟🤔 قطعا مخفی وارد میشه ✋ ما کارمون کاملاً مشخص و واضح هست و هویت‌مون کاملاً مشخصه: نه رت و نرم افزار کلاهبرداری میسازیم نه آموزشش رو میدیم نه وسیله یا سورسی مینویسیم در این رابطه. 🟢 بخش بعدی: دوستان برای مثال اینطور اشخاص از کتابخانه PersianDeviceInfo که میتونه استفاده های کاربردی مختلف برای ایده های مختلف رو داشته باشه میان اقدام به استفاده ی نادرست و کلاهبرداری میکنن. برای مثال اطلاعات دستگاه کاربر رو به یه سرور میفرستن که بعدا ازش توی اپهای فیشینگ و کلاه برداری استفاده کنن.(درصورتی که کار این کتابخانه فقط و فقط نمایش اطلاعات دستگاه هست است و رابطه ای با فیشینگ و کلاهبرداری ندارد) مثلا یکی از ایده هایی که میشه با PersianDeviceInfo انجام داد ایجاد سرویسهای پوش مثل پوش پول هست که شما توی پنل میتونید ببینید یوزرهاتون مثلا چه برند و یا نسخه اندروید و یا اپراتوری دارن. و هزاران ایده های دیگه… 🔺 ولی متاسفانه افراد کلاهبردار با تغییر کدها و شیوه های خودشون ازاینطور موارد استفاده ی کلاهبرداری میکنن ❌ به همین دلیل من مجبور شدم این کتابخونه رو غیرفعال کنم. (شاید بگید چه ربطی داره بذارید هرکی هرجور دوست داره استفاده کنه، بله درسته ولی دوستان به شدت پلیس ایران و حتی خارج درگیر این ماجرا شده و نمیتونیم به دلخواه خودمون عمل کنیم) ضمناً این مورد تنها مربوط به کتابخانه PersianDeviceInfo ما نمیشه، بلکه ممکنه از کتابخانه های دیگه ی ما هم استفاده کرده باشن و بنده اطلاع ندارم. #دردودل واقعا خیلی دلم از این اتفاقات میگیره که از #مردم بدبخت که خودشون هیچی ندارن توی این شرایط و همون اندک چیزی که ته حسابشون هست هم توسط این افراد خالی میشه😔 و اکثر کسایی که حسابشون خالی میشه هم افراد ضعیف و ناآگاه هستن. اصلا میگم #آقای_دزد شما بی خدا و شما بی دین، وجدان تو قبول میکنه که پول چنین افرادی رو بخوری؟ خیلی از همین پول ها پول یارانه افراد هست… 🌸 واقعا خیلی جلوی خودمو نگه داشتم که این مطالب رو نگم ولی اینقدر دیگه پیام میاد ازاین بابت خسته و کلافه شدم و میبینم دیگه تمومی هم نداره یارو اومده ربات ساخته!!! ربات رت ساز که اینکارو ترویج و تکثیر کنه… ✅ حالا چرا اینهارو گفتم و از شما چی میخوام؟ ۱. این پیام یه جور پیام رفع مسئولیت بود که کسایی که از کار و هدف ما آگاه نیستن آگاه بشن! ۲. تا میتونید به پدر و مادر، فامیل ها و آشناهاتون اطلاع بدید و راهنمایی کنید که هر اپلیکیشنی رو دانلود و اطلاعات حسابشون رو هرجایی وارد نکنن ۳. به هیچ وجه روی لینک هایی که براتون پیامک میشه کلیک نکنید! ۴. اگه برنامه نویس هستید خیلی مواظب خودتون باشید از هر لحاظ(هوای خودتون رو داشته باشید و هرکاری رو انجام ندید) ۵. اگه موردی مشکوکی دیدین حتما به #پلیس_فتا یا بنده (https://t.me/answercenter_support) گزارش بدید و کمک کنید هرچه سریعتر ریشه کن بشه این ماجرا چون تقریبا متوجه شدیم که کل این باند زیر سر چند نفره 🔴 مهم: ۱- تمامی مطالب درون سایت و کانال تلگرامی انسرسنتر و کتابخانه های ساخته شده توسط بنده(محمدرضا شاهپیری) کاملاً مثبت و جهت استفاده در برنامه های خوبِ کاربردی می باشد، اما کلاهبردارن با سواستفاده از این کتابخانه های مثبت در بدافزارها هم موجب کلاهبرداری از مردم و هم موجب بدنامی ما و افراد دیگری کار مثبت در این حوزه انجام میدهند خواهند شد. (پ.ن: با ویرایش کدها و تغییرات توسط خودشان بدافزار میسازند) ۲- بنابراین هرگونه سواستفاده از کتابخانه ها، سورس کدها، آموزش ها و تمامی مطالب سایت و کانال تلگرامی ما برعهده خود شخص استفاده کننده است. ۳- تا میتوانید افراد خانواده و آشناهای خود را آگاه کنید و نگذارید روی لینک هایی که برایشان پیامک میشود کلیک کنند. صحبت پایانی: در آخر از دوست خوبم آقا پژمان نیکروان تشکر صمیمانه میکنم به خاطر کمک هایی که به من تو این مساله داشتن چون ما با هم درگیر این قضیه بودیم. خدایا چنان کن سرانجام کار، که تو خشنود باشی و ما رستگار❤️
    4 امتیاز
  2. 🟢 پیاده سازی پرداخت درون برنامه ای مایکت. 🔴 توجه داشته باشید که مایکت حتما باید روی گوشتان نصب باشد و روی گوشی تست کنید نه شبیه ساز. 🏆 سورس بسیار ساده و روان نوشته شده و با چند خط ساده میتوانید این کار را به راحتی انجام دهید. 🏅 کتابخونه مورد نیاز داخل فایل سورس وجود دارد. ❤️❤️ اگر سورس برایتان کاربردی بود، ممنون میشم برای حمایت روی تبلیغ داخل فایل apk کلیک کنید. تهیه و تنظیم مرتضی صباغی MR.B4A 🛑 محصولات MR.B4A https://sourcecity.ir/user/mortezab4a/?section=products سورس کد و کتابخانه های رایگان https://t.me/programmingwithb4a #b4a #basic4android #source_code #programming #android #b4x #MR_B4A #In_app_payment_myket #بیسیک_فور_اندروید #سورس_کد #برنامه_نویسی #اندروید #برنامه_نویسی_اندروید #متغیر_سراسری #سورس_پرداخت_درون_برنامه_ای_مایکت
    2 امتیاز
  3. خط زیر رو اضافه کنید به گریدل احتمالا اکی میشه buildFeatures { aidl = true }
    1 امتیاز
  4. ☯️ بااستفاده از این سورس میتوانید جعبه متن های بسیار زیبا و متریالی و انیمیشنی را در نرم افزار خود پیاده کنید. تهیه و تنظیم مرتضی صباغی MR.B4A سورس و کتابخانه رایگان https://t.me/programmingwithb4a 🛑 محصولات MR.B4A https://sourcecity.ir/user/mortezab4a/?section=products #b4a #basic4android #source_code #programming #android #b4x #MR_B4A #edit_text_material #بیسیک_فور_اندروید #سورس_کد #برنامه_نویسی #اندروید #برنامه_نویسی_اندروید #بلدکردن_کلمه_در_متن #ادیت_تکس_متریالی #جعبه_متن_زیبا
    1 امتیاز
  5. عزیز من با این سایت کار نکردم. با پشتیبانیشون مطرح کنید یا از داکیومنتاشون
    1 امتیاز
  6. 🌟 در این سورس یاد میگیرید که چه طور کدها را در سرویس اجرا کنید. ✅ برای مثال وقتی فایل صوتی را پخش میکنید، به محض پخش فایل صوتی و تمام شدن اجرای فایل، اگر صفحه گوشی خاموش باشد، اپلیکیشن تسک بعدی را اجرا نمیکند. ولی اگر برنامه با استفاده از سرویس نوشته شده باشد، حتی اگر صفحه گوشی هم خاموش باشد؛ بازهم برنامه به کاره خود ادامه میدهد. تهیه و تنظیم مرتضی صباغی MR.B4A سورس و کتابخانه رایگان https://t.me/programmingwithb4a 🛑 محصولات MR.B4A https://sourcecity.ir/user/mortezab4a/?section=products #b4a #basic4android #source_code #programming #android #b4x #MR_B4A #do_in_background #بیسیک_فور_اندروید #سورس_کد #برنامه_نویسی #اندروید #برنامه_نویسی_اندروید #اجرا_در_پس_زمینه
    1 امتیاز
  7. از کتابخونه persianautosizelable استفاده کنید
    1 امتیاز
  8. از متد زیر استفاده کنید. apiKey و مختصات رو جایگذاری کنید خودتون Private Sub getCityNmae(apiKey As String,lat As Double,lng As Double) Dim job As HttpJob job.Initialize("",Me) job.Download($"https://api.neshan.org/v5/reverse?lat=${lat}lng=${lng}"$) job.GetRequest.SetHeader("Api-Key", apiKey) Wait For (job) JobDone(j As HttpJob) If j.Success Then Log(j.GetString) End If job.Release End Sub
    1 امتیاز
  9. 💹 ارسال sms با متنی ثابت به چندین شماره 🏮 دوستان من این سورسو خودم تست نکردم، پس حتما تستش کنید. ❤️❤️ اگر سورس برایتان کاربردی بود، ممنون میشم برای حمایت روی تبلیغ داخل فایل apk کلیک کنید. تهیه و تنظیم مرتضی صباغی MR.B4A 🛑 محصولات MR.B4A https://sourcecity.ir/user/mortezab4a/?section=products سورس کد و کتابخانه های رایگان https://t.me/programmingwithb4a #b4a #basic4android #source_code #programming #android #b4x #MR_B4A #send_sms #بیسیک_فور_اندروید #سورس_کد #برنامه_نویسی #اندروید #برنامه_نویسی_اندروید #متغیر_سراسری #ارسال_پیامک_انبوه
    1 امتیاز
  10. درود برای ارتباط با سرور بهتره از کتابخونه های قدرتمندتری مثه رتروفیت یا okhttp استفاده کنید
    1 امتیاز
  11. 🌕 با استفاده از این مینی سورس میتوانید شمارش معکوس مانند آنچه توی گیم ها استفاده میشود بسازید. ❤️❤️ اگر سورس برایتان کاربردی بود، ممنون میشم برای حمایت روی تبلیغ داخل فایل apk کلیک کنید. تهیه و تنظیم مرتضی صباغی MR.B4A 🛑 محصولات MR.B4A https://sourcecity.ir/user/mortezab4a/?section=products سورس کد و کتابخانه های رایگان https://t.me/programmingwithb4a #b4a #basic4android #source_code #programming #android #b4x #MR_B4A #countdown #بیسیک_فور_اندروید #سورس_کد #برنامه_نویسی #اندروید #برنامه_نویسی_اندروید #متغیر_سراسری #شمارش_معکوس
    1 امتیاز
  12. برای به دست آوردن نام شهر باید از api هایی که برای این کاره استفاده کنید. سرچ کنید زیاد هست که البته غیر رایگانن اکثرا.
    1 امتیاز
  13. 🔑 برای این که بتوانید یک متغیر تعریف کنید که در همه اکتیویتی ها قابل دسترس باشد، باید آن را در ساب Process_Globals تعریف کنید. ❇️ اما برخی از کاربران گزارش کرده اند که این ساب به درستی کار نمیکند. به همین دلیل سورسی را در اختیارتان قرار دادیم تا با استفاده از آن، بتوانید متغیرهای مورد نیازتان را مقداردهی کرده و بین اکتیویتی ها بدون هیچ گونه خطایی پاس بدهید. تهیه و تنظیم مرتضی صباغی MR.B4A 🛑 محصولات MR.B4A https://sourcecity.ir/user/mortezab4a/?section=products سورس کد و کتابخانه های رایگان https://t.me/programmingwithb4a #b4a #basic4android #source_code #programming #android #b4x #MR_B4A #بیسیک_فور_اندروید #سورس_کد #برنامه_نویسی #اندروید #برنامه_نویسی_اندروید #متغیر_سراسری
    1 امتیاز
  14. 🌕 نمایش میلی ثانیه ثانیه دقیقه ساعت در کورنومتر امکان ثبت رکورد امکان مکث رکورد 🌕 🌠 سورس کد و کتابخانه رایگان https://t.me/programmingwithb4a تهیه و تنظیم مرتضی صباغی MR.B4A 🛑 محصولات MR.B4A https://sourcecity.ir/user/mortezab4a/?section=products #b4a #basic4android #source_code #programming #android #b4x #MR_B4A #cornometter #بیسیک_فور_اندروید #سورس_کد #برنامه_نویسی #اندروید #دیتابیس_آنلاین #کورنومتر
    1 امتیاز
  15. نه اینو تغییر ندین. فایل Okhttp.xml رو باز کنید و خطهای زیر رو حذف کنید
    1 امتیاز
  16. جلسه چهارم تو این جلسه، بیشتر با متدهای این کتابخونه آشنا میشیم: MoveTo: MoveTo (X, Y) با این متد، قلم به مختصات داده شده میره. SetX: SetX (X) با نوشتن این کد، قلم به X داده شده در محور Xها میره. SetY: دقیقا عین بالا ولی در محور Y ها... DrawText : DrawText (Text As String) با این متد، یه متن بهش میدی و قلم اون رو مینویسه... البته به هیچ وجه چیزی نیست که فکر میکنین. خودتون امتحان کنید ببینید Home : Turtle.Home با این دستور، قلم به مرکز صفحه بر میگرده(بدون اونکه چیزی بکشه) ClearScreen : Turtle.ClearScreen با این کد، تمام طرح ها، حذف میشن Pause / Resume: این دو متد، نقاشی رو متوقف میکنه و یا ادامه میده Stop: با این کد، بطور کامل طراحی متوقف میشه IsMoving : با این متد، میشه چک کرد که آیا قلم در حرکته یا نه: If Turtle.IsMoving Then 'TODO' End If SetFontAndAlignment : اگر از DrawText استفاده میکنید، با این متد میشه فونتش رو تغییر داد. Turtle.SetFontAndAlignment(xui.CreateDefaultBoldFont(20), "LEFT") RabbitMode / TurtleMode: فعال و غیر فعال کردن RabbitMode(اگر این مد فعال باشه، نقاشی همون اول بدون هیچ حرکتی کشیده میشه) Turtle.RabbitMode 'Enabled RabbitMod' 'Or' Turtle.TurtleMode 'Disabled RabbitMode' GetX / GetY / GetAngle: این سه متد، بترتیب زاویه قلم، موقعیت Y و موقعیت X رو برمیگردونن. به این کدها دقت کنید: Sub Turtle_Start Log(Turtle.GetX) 'outputs 400 (center) Turtle.SetX(200) Log(Turtle.GetX) 'still outputs 400 End Sub دقت کنید، ما اومدیم با SetX، موقعیت 200 رو تعیین کردیم ولی وقتی GetX رو لاگ میگیریم، دوباره 400(موقعیت اولیه) رو برمیگردونه. این نکته رو توصیه میکنم بخاطر داشته باشید که بطور پیشفرض، دستورها در صف قرار میگیرند بخاطر همین دوباره 400 رو برمیگردونه(در حالت بالا) به کدهای زیر هم دقت کنید که چه موقع چه چیزی رو برمیگردونه: Sub Turtle_Start Turtle.RabbitMode Log(Turtle.GetX) 'outputs 400 (center) Turtle.SetX(200) Log(Turtle.GetX) 'outputs 200 End Sub در حالت RabbitMode، وظایف در صف قرار نمیگیرند. Sub Turtle_Start Log(Turtle.GetX) 'outputs 400 (center) Turtle.SetX(200) Wait For Turtle_Done Log(Turtle.GetX) 'outputs 200 End Sub میشه از Wait For هم استفاده کرد. البته بهتره به این صورت نوشته شه: If Turtle.IsMoving Then Wait For Turtle_Done End If در جلسه بعد هم، رویدادهای این کتابخونه رو بررسی میکنیم موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
    1 امتیاز
  17. جلسه سوم در جلسه قبل، بطور کامل با تغییر خصوصیات قلم آشنا شدیم، تو این جلسه رسم رو شروع می‌کنیم... پنج متد بسیار مهم در رسم با B4XTurtle وجود داره که بررسیشون میکنیم: MoveForward: مثال: Sub Turtle_Start Turtle.MoveForward(100) End Sub با این متد، قلم به اندازه 100dip، به سمت جلو(در حالت اولیه به سمت راست) حرکت می‌کنه و یه خط بطول 100dip رسم میکنه: نکته بسیار مهم: در B4XTurtle هرگز از dip استفاده نکنید؛ dip بصورت Internal به کدتون اضافه میشه. MoveBackward: مثال: Sub Turtle_Start Turtle.MoveForward(100) End Sub با این متد، قلم به اندازه 100dip، به سمت عقب حرکت می‌کنه (یعنی اگر نوک قلم بسمت راست باشه، باندازه 100dip، به سمت چپ حرکت میکنه_بدون اینکه قلم تغییر جهت بده_) و یه خط بطول 100dip در خلاف جهت رسم میکنه: TurnLeft: مثال: Sub Turtle_Start Turtle.TurnLeft(90) End Sub TurnRight: مثال: Sub Turtle_Start Turtle.TurnRight(90) End Sub دقت کنید که کارکرد دو متد TurnRight و TurnLeft دقیقا عین هم هستند: در هر دو متد، یک ورودی داریم که درجه رو از ما میگیره؛ بعنوان مثال، TurnRight(90)f ، زاویه قلم ما باندازه 90 درجه به راست میچرخه: از این دو متد، در بسسسسیاری از جاها استفاده میشه. مثلا رسم مربع: با رسم ها و مثال ها در جلسات آینده بیشتر آشنا میشیم. SetAngle: با این متد، یک زاویه بین 0 تا 360 به قلم میدیم. بطوری که زاویه 0، سمت چپ و زاویه 180 درجه، طرف راست هست. یعنی: اگر ما این متد رو برابر 0 بذاریم، قلم بسمت چپ جهت گیری میکنه و اگر رو 180 باشه، جهت قلم سمت راست میشه. مثال: Turtle.SetAngle(135).MoveForward(50) با این کد، زاویه 135 درجه تغییر پیدا میکنه و باندازه 50dip به سمت جلو جرکت میکنه. نتیجه میشه: دو متد کاربردی دیگه که بسیار میتونه کاربردی باشه، PenUp و PenDown هست: * از اسمشون پیداست که کاربردشون چیه، متد PenUp، رسم رو متوقف میکنه(دقت کنید رسم متوقف میشه نه جابجایی، یعنی قلم حرکت میکنه ولی چیزی رسم نمیشه) در واقع قلم رو برمیداره PenDown، دقیقا عکس اینه. مثال: دقت کنید که بعد از رسم دایره، باندازه شعاع، به سمت چپ حرکت میکنه اما چیزی نمیکشه. تا الان با 90 درصد رسم در B4XTurtle آشنا شدیم. دیگر متدها و رویدادها، خیلی مهم نیستن اما در جلسات آینده، حتما بررسی میکنیم. در تاپیک زیر، مثال ها برای B4XTurtle، قرار داده میشه که میتونید استفاده کنید در جلسات آینده، بیشتر این کتابخونه رو بررسی میکنیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
    1 امتیاز
  18. جلسه دوم همونطور که گفته بودم، از این جلسه، وارد کدنویسی برای B4XTurtle میشیم: دقت کنید که B4XTurtle یک کتابخونه b4xlib هست و با بقیه کتابخونه‌ها فرقی نداره B4XTurtle، یه custom view هست که باید از طریق دیزاینر به لایوت اضاف بشه. برای ایجاد یک پروژه با B4XTurtle، میتونید از بخش New Project، گزینه B4XTurtle رو انتخاب کنید. نحوه اضافه کردن ویوی B4XTurtle به لایوت: بعد از فعال کردن کتابخونه B4XTurtle، وارد Designer میشیم و از تب AddView، بخش CustomView، ویوی B4XTurtle رو اضافه می‌کنیم. به همین سادگی دقت کنید که این ویو، فضای کشیدن رو برامون مشخص میکنه. درواقع کاغذ نقاشیمونه شروع کار با B4XTurtle: تا اینجا فهمیدیم که B4XTurtle چی هست... حالا بریم ببینیم چه کارهایی میتونیم با این کتابخونه بکنیم. (سعی میکنم اکثر متدهای این کتابخونه رو بررسی کنیم) *تغییر خصوصیات نقاشی با یسری کدها، میشه خصوصیات نقاشیمون رو مثلا تغییر رنگ، سایز، سرعت کشیدن و .... رو شخصی سازی کرد که ان‌شاءالله در این جلسه، کامل بررسیشون می‌کنیم. 1. تغییر رنگ قلم: با استفاده از متد زیر، میتونید رنگ قلم رو تغییر بدید: Turtle.SetPenColor(Colors.Blue) با این کد، رنگ قلم، مثل این میشه: دقت کنید که با این کد، رنگ قلم همیشه ثابته مگر اینکه دوباره موقع رسم، بطور دستی، دوباره رنگ رو تغییر بدید. یه حالت دیگه هم هست، RandomColor: در این حالت، B4XTurtle، بعد از کشیدن هر خط، رنگ قلم رو بصورت رندم تغییر میده. Turtle.SetPenColor(Turtle.RandomColor) بجای اینکه رنگ رو خودمون تعیین کنیم، از متد RandomColor خود کتابخونه استفاده میکنیم که نتیجش میشه مثل زیر: توجه داشته باشید که الان فقط رنگ مد نظر بنده هست و در جلسات آینده، با مثالها و نحوه رسم هم آشنا میشیم. 2. تغییر سایز قلم: با این متد، براحتی میشه نازکی قلم رو تغییر داد: Turtle.SetPenSize(2) یک شکل که دارای Random Color و سایز های مختلف برای قلم. نحوه تغییر سایز قلم بصورت رندم: برای این منظور، از کد زیر میشه استفاده کرد: Turtle.SetPenSize(Rnd(1, 6)) 3. تغییر سرعت قلم: با کد زیر هم میشه سرعت کشیدن رو کم و یا زیاد کرد: Turtle.SetSpeedFactor(10) هر چی ورودی این متد بیستر باشه، سرعت کشیدن هم بیشتره. 4. نمایش قلم: با اینکار، قلم (مثلث قرمز رنگ) دیگه نمایش داده نمیشه. Turtle.SetTurtleVisible(True)'or flase نوجه داشته باشید که همه‌ی اینها رو میشه تو یه خط نوشت: Turtle.SetPenColor(Turtle.RandomColor).SetPenSize(2).SetSpeedFactor(10).SetTurtleVisible(True) در جلسات بعد، رسم کردن رو شروع میکنیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
    1 امتیاز
  19. جلسه اول با نام و یاد خدا جلسه اول رو شروع میکنیم. قبل از اینکه مبحث رو بطور جدی شروع کنیم، یه مقدمه درمورد B4XTurtle بگم که اصلا چی هست و چه هدفی داره.... اول یه پیش نمایشی با هم ببینیم: به گفته سایت مرجع: B4XTurtle، کتابخونه ای هست که از زبان برنامه نویسی Logo Classic گرفته شده. کتابخونه جزو کتابخونه های داخلی هست کتابخانه، Cross-Platform هست. یعنی براحتی می‌تونید در B4i , B4J , B4A و یا حتی در B4XPages استفاده کنید. هدف این کتابخونه، کمک به آموزش برنامه نویسی با یه طراح بصری (Turtle) به دانش آموزان هست. کار با کتابخونه خییییلی سادست. برای کار با کتابخونه در بیشتر موارد، از علم شیرین هندسه باید استفاده کنیم که ان‌شاءالله در جلسات آینده، کامل بررسی می‌کنیم. دقت داشیته باشید که از نسخه B4A - 10 و B4J-8.5 و B4i-6.8 یا نسخه بالاتر استفاده کنید. براحتی میشه با B4XTurtle، تصاویر زیبایی مثل زیر خلق کرد: دیگه مقدمه ای نمونده و ان‌شاءالله از جلسه آینده، وارد کد نویسی میشیم موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
    1 امتیاز
  20. بسم الله الرحمن الرحیم سلام و درود خدمت همه‌ی اعضای انجمن انسرسنتر B4X چن وقتی هست از یه سری کتابخونه ها رونمایی کرده؛ مثل B4XTurtle و B4XPages و .... که فوق العاده کاربردی هستن. همونطور که قولش رو داده بودم، قرار شد یه دوره کامل و رایگان آموزش کار با این کتابخونه های جامع و کامل رو قرار بدم. که انشاءالله با B4XPages که خیلی مورد استقبال برنامه نویسان قرارگرفته دوره ها رو شروع می‌کنم. منتها قبل از شروع آموزش، یه سری نکات هست که باید خدمت همگی عرض کنم: 1- برای اینکه آموزشها پراکنده نشن، لطفا تو این پست، چیزی نفرستین و اگر موردی، سوالی و یا مشکلی بود، یه پست جدید ایجاد کنید. 2- آموزشها تا اطلاع ثانویه بصورت چند روز یکبار قرار داده میشن (بدلیل کمبود وقت بنده) اما هر زمان که وقت اضاف آوردم، حتما سعی میکنم جلسه بعد رو آماده کنم و بفرستم. (چون خودم هم باید مطالعه در این مورد داشته باشم ) 3- آموزش های مقدماتی همینجا قرار داده میشن و دیگر سورس ها و آموزش های مربوطه، تو یه پست جدید میذارم تا مشکلات مربوط به اونا، همونجا مطرح بشن. 4- البته لینک آموزشهای دیگه هم، اینجا قرار داده میشه. پس تمامی آموزشهای مربوط به B4XPages، همینجا در دسترس هستن. 5- آموزشها، کاملا مطابق با سایت مرجع پیش میره. پس نگران ناقص بودن دوره نباشید 6- مهم ترین نکته‌ای که مد نظر بنده هست و بهمین خاطر آموزش رو رایگان گذاشتم، اینه: هزینه هر آموزش، یه صلوات برای سلامتی و ظهور امام عصر (عج) هست .... ان شاءالله تا چن روز آینده، دوره آموزشی رو شروع می‌کنیم. امیدوارم در تمام مراحل زندگی موفق باشید.
    1 امتیاز
  21. سورس صفحه اسپلش: برای دسترسی به تمامی پستها در مورد B4XPages، کافیه سرچ کنید: B4XPages البته تمامی پست ها، سورس ها و نمونه کدها، همینجا قرار میدم
    1 امتیاز
  22. جلسه پنجم (آخر) در جلسه قبل، نحوه دسترسی به ویوها و متغیرها در دیگر پیج ها رو به طور کامل بررسی کردیم. تو این جلسه هم یه سری توضیحات جزئی میدم و با Eventهای B4XPages آشنا میشیم... اگر میخواین با فراخواندن پیجی دیگر، حتما رویداد Create اجرا بشه، از کد زیر استفاده کنید: B4XPages.AddPageAndCreate("Page_id") نحوه تغییر دادن تایتل هر پیج: B4XPages.SetTitle(Me, "Some Title") دقت کنید که در پیج های دوم به بعد، به غیر از B4XMainPage، یه علامت کنار تایتل میاد که با زدن روی اون، به پیج قبلی بر میگرده: نکته مهم: برای مثال برای رفتن از پیج لاگین به صفحه اصلی، از کد زیر استفاده میکنیم: B4XPages.ShowPageAndRemovePreviousPages("MainPage") با نوشتن این کد، همونطور که قبلا هم توضیح دادم، پیج قبلی(لاگین) حذف میشه و دیگه اون علامت، نمایش داده نمیشه. درضمن با زدن دکمه بک هم، دیگه به پیج لاگین برنمیگرده(چون دیگه اون پیج وجود نداره) رویدادهای B4XPages (دقت کنید که EventName برای این رویدادها، همواره B4XPages هست): B4XPage_Created B4XPage_Appear B4XPage_Disappear B4XPage_Background B4XPage_Foreground B4XPage_Resize (فقط در B4i و B4J) B4XPage_CloseRequest (فقط در B4J و B4A) B4XPage_MenuClick B4XPage_KeyboardStateChanged (فقط در B4i) B4XPage_IconifiedChanged (فقط در B4J) B4XPage_PermissionResult (فقط در B4A) حالا هر مورد رو بررسی میکنیم: 1. این رویداد در دو حالت اجرا میشه: 1) وقتی که پیج برای اولین بار نمایش داده میشه 2) وقتی که پیج رو با B4XPages.AddPageAndCreate فراخوانی کنیم 2. هر زمان که پیج ظاهر شد فراخوانی میشه 3. هر زمان که پیج عوض شد، صدا زده میشه 4. این رویداد کاربردی، زمانی اجرا میشه که که برنامه به پس زمینه میره. این مکان خوبیه که اطلاعاتی رو که میخوایم، ذخیره کنیم چون ممکنه بعدش برنامه بسته بشه... 5. وقتی برنامه از پس زمینه، خارج میشه و اصطلاحاً به پیش زمینه میاد فراخوانی و اجرا میشه 6. هنگام تغییر اندازه صفحه صدا زده میشه (این ساب فقط در B4i و B4J وجود داره) 7. در B4A، وقتی کاربر نشانگر بالا که توضیح دادم و یا دکمه بک رو زد فراخوانی میشه. در B4J هم وقتی روی بستن کلید شد، اجرا میشه (این ساب فقط در B4A و B4J وجود داره) 8. وقتی روی منوها کلیک شد، اجرا میشه 9. با تغییر حالت صفحه کلید، اجرا میشه (این ساب فقط در B4i هست) 10. وقتی صفحه به حداقل اندازه میرسه، اجرا میشه (فقط B4J) 11. این ساب هم که مشخصه، بعد از اجرای rp.CheckAndRequest اجرا میشه. (فقط در B4A) نحوه هندل کردن IME_HeightChanged : (از کتابخونه IME) کدهای زیر رو به اکتیویتی Main اضافه کنید: Sub Globals Private ime As IME End Sub Sub Activity_Create(FirstTime As Boolean) ime.Initialize("IME") ime.AddHeightChangedEvent Dim pm As B4XPagesManager pm.Initialize(Activity) End Sub Sub IME_HeightChanged (NewHeight As Int, OldHeight As Int) B4XPages.GetManager.RaiseEvent(B4XPages.GetManager.GetTopPage, "IME_HeightChanged", Array(NewHeight, OldHeight)) End Sub اکنون رویداد IME_HeightChanged (NewHeight As Int، OldHeight As Int رو در هر صفحه ای که میخواین، ایجاد کنید. با تشکر از استقبال همگی که واقعا بهم انگیزه و روحیه میداد. این سری آموزش هم به پایان رسید و الان میتونید با B4XPages کار کنید و لذت ببرید. این تاپیک دقیقا مطابق با تاپیکی آموزشی B4XPages در سایت مرجع بود که کامل اینجا قرار دادم. لینک پست در سایت مرجع: https://www.b4x.com/android/forum/threads/b4x-b4xpages-cross-platform-and-simple-framework-for-managing-multiple-pages.118901/ نکات اصلی درمورد B4XPages تو این تاپیک گفته و بررسی شد. اما هنوز پست ها و سورس کدهایی در این مورد وجود داره که ان‌شاءالله در آینده قرار میدم. آموزش در این پست طی 7 جلسه به پایان رسید... موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
    1 امتیاز
  23. جلسه چهارم _ بخش دوم بسسسسیار مهههههم قبل از اینکه این جلسه رو شروع کنم، عذر خواهی من رو بابت تاخیر در این جلسه بپذیرید. یکی از دلایل تاخیر، سوالی بود که در سایت مرجع پرسیده بودم؛ سوال مربوط به جابجایی ویوها بین صفحات B4XPages بود: https://www.b4x.com/android/forum/threads/b4xpages-move-view-between-pages.123863/#post-773784 خب همچون جلسات گذشته، در این جلسه هم، بیشتر با کدنویسی در B4XPages آشنا میشیم. بنده یک نکته رو از جلسات گذشته، فراموش کردم خدمتتون عرض کنم: رویداد Initialize در هر بار نمایش صفحات، اجرا میشه.... تو این جلسه، بطور کامل، چگونی دسترسی به ویوها و دیگر متغیرها در دیگر پیج ها و یا حتی جابجایی اونها بین صفحات رو بررسی میکنیم: برای اینکه بتونیم به متغیرها و ویوهای یک پیج، دسترسی داشته باشیم، اول باید به اون پیج دسترسی داشته باشیم؛ این روند منطقی ای هست که باید انجام شه. برای دسترسی به پیج های دیگه، اول از همه باید یه متغیر از اون پیج رو تعریف کرد: Dim P2 As Page2 P2.Initialize Page2، کلاس دیگری هست که ساختیم و اون رو به عنوان یه پیج جدید، به B4XPages اضافه کردیم که در جلسه سوم، کامل توضیح دادم. الان به اون کلاس دسترسی داریم اما هنوز به اون پیج دسترسی پیدا نکردیم. _دقت داشته باشید که در B4XPages، مفهوم هر پیج با هر کلاس فرق داره؛ باین صورت که هر پیج، یه کلاس B4XPages هست اما هر کلاس، لزوماً یک پیج نیست؛ چگونگی تبدیل یک کلاس به پیج رو در جلسات قبل، بطور کامل توضیح دادم خدمتتون_ . همونطور که گفتم، الان به کلاس Page2 دسترسی داریم اما به عنوان یک پیج خیر. در مرحله بعد، با استفاده از متد GetPage از کلاس B4XPages، به اون پیج دسترسی خواهیم داشت: Dim P2 As Page2 P2.Initialize P2 = B4XPages.GetPage("Page2_id") بعد از اینکه متغیرمون رو Initialize کردیم، اون رو از طریق متد GetPage، که یه ورودی از ما میگیره، برابر با متغیر P2 قرار میدیم. در ورودی این متد، همون id یی که برای Page2 در نظر گرفتیم(در جلسات قبل توضیح داده شده) رو وارد میکنیم. الان به پیج مد نظرمون، دسترسی 100 درصدی داریم. طبق چیزی که قبلا گفته شد، ساب Class_Globals، دقیقا عین Process_Globals در اکتیویتی ها هست. یعنی به ما این اجازه رو میده که به متغیرهایی که در این ساب تعریف شدن، دسترسی داشته باشیم. الان برای دسترسی به متغیرها، کافیه از متغیر P2 که از نوع همون کلاس هست، استفاده کنیم. مثلا فرض کنید که متغیر a از نوع Int رو در کلاس Page2، تعریف کردیم. حالا برای اینکه در پیج B4XMainPage، به اون دسترسی داشته باشیم کافیه بشکل زیر عمل کنیم: Dim P2 As Page2 P2.Initialize P2 = B4XPages.GetPage("Page2_id") Log(P2.a) اگر کد زیر در مکانی دلخواه، از هرپیجی که خواستین امتحان کنید. میبینید که دقیقا مقدار متغیر a به ما برمیگردونه. از این روش، میتونید به تمامی متغیرها و ویوها دسترسی داشته باشیم اما برای دسترسی به ویوها، باید یه نکته رو در نظر بگیریم: بطور پیشفرض، با تعریف یک ویو از طریق دیزاینر، اون ویو بصورت Private تعریف میشه. نکته‌ای که هست، اینه که به ویوها و متغیرهایی که بصورت Private تعریف میشن، نمیتونیم در دیگر پیج‌ها دسترسی داشته باشیم. برای رفع این مشکل، کافیه بجای Private، از Public استفاده کنیم: Public Btn1 As Button Public V1 As B4XView به همین سادگی با تغییر Private به Public، میتونیم به اونها دسترسی داشته باشیم. مثلا فرض کنید دو متغیر بالا در Page2 تعریف شدن. ما میتونیم در B4XMainPage، به تمامی اونها دسترسی کامل داشته باشیم: Dim P2 As Page2 P2.Initialize P2 = B4XPages.GetPage("Page2_id") Dim s As String = P2.Btn1.Text P2.Btn1.Text = "abc" با کد بالا، براحتی میتونیم متن یک ویو رو بگیریم و یا حتی اون رو تغییر بدیم. جابجایی ویوها بین پیج‌ها: بعضی وقتها، لازمه خود ویو رو بین پیج‌ها جابجا کنیم(دقت کنید که در اکتیویتی ها، قابلیت تغییر مشخصات یک ویو از دیگر اکتیویتی‌ به هیچ وجه امکان پذیر نیست. چه برسه به اینکه بخوایم ویو رو جابحا کنیم ) به تصویر زیر دقت کنید: در این تصویر، خطی که کشیده میشه، به پیچ قبلش هم منتقل میشه که این واقعا فوق‌العادست.... برای جابجا کردن یک ویو، کافیه از کد زیر استفاده کنیم: Dim P2 As Page2 P2.Initialize P2 = B4XPages.GetPage("Page2") Dim b1 As Button = P2.Btn1 b1.RemoveView Root.AddView(b1, 0, 0, 100%X, 20%Y) در اینجا بعد از تعریف و اینیشالایز کردن متغیر از نوع کلاس مدنظر و دادن دسترسی به اون پیج، میایم یه متغیر از نوع همان ویو(در اینجا، Button) تعریف میکنیم و به روشی که توضیح داده شد، برابر با ویوی مد نظرمون میزاریم. برای اینکه به ارور بر نخوریم، از RemoveView استفاده کردیم، و در نهایت، اون ویو(b1) رو به پیجمون اد میکنیم. به همین راحتی... با 6 خط کد... نکته بسسسسسیار مهم: برای اینکه ویو رو بتونید جابجا کنید، باید اول اینیشالایز شده باشه. مثلا شما نمیتونید ویویی از پیج دیگه که هنوز اون پیج نمایش داده نشده رو جابجا کنید. پس اول باید حداقل یکبار اون پیج، نمایش داده بشه تا اون ویو اد بشه. تو سورس به این موضوع پرداختم. نمونه سورس پیوست شد: Project_B4XPages.zip این جلسه هم به پایان رسید.... ان شاءالله در جلسه آینده بیشتر با قابلیت‌های B4XPages، آشنا میشیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
    1 امتیاز
  24. جلسه چهارم _ بخش اول قبل از اینکه وارد کار با ویوها و نحوه دسترسی بهشون در دیگر پیج ها بشیم، بهتره یه آشنایی با XUIViews داشته باشین: بخش بعد، با خصوصیات منحصر به فرد B4XPages، آشنا میشیم موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
    1 امتیاز
  25. البته اگر دوستان هم در این زمینه همکاری داشته باشن، واقعا خوشحال میشم. به امید پیشرفت روز افزون انجمن...
    1 امتیاز
  26. جلسه سوم _ قسمت 2 سلام دوستان یسری نکات برای استفاده از خاصیت CrossPlatform کلاسهای B4XPages باید در نظر داشته باشیم. مثلا از هر کتابخونه ای استفاده نکنیم. چون کتابخونه هایی که برای اندروید نوشته میشه، قابل استفاده در ios نیست، این مشکل یه سری راه حل داره که اینجا دو موردش رو خدمتتون عرض میکنم: 1- بیسیک برای حل این مشکل، یه سری کدها و کتابخونه هایی طراحی کرده، که هم در B4A، هم در B4i و هم در B4J قابل استفاده هست. کتابخونه های که در این زمینه آماده میشن، کتابخونه های سری b4xlib هستن که مثل کتابخونه های پیشفرض، دوفایل jar و xml نیستن و فقط یک فایل با پسوند b4xlib هست. من این کدها و کتابخونه ها رو تا جایی که بتونم، تو انجمن قرار میدم و برای شناسایی اونا، عنوان رو با *B4X* مشخص میکنم. پس هر تاپیکی از بنده که دارای عبارت *B4X* و یا *B4XPages* بود، میتونید به عنوان یک کتابخونه، در B4XPages و یا دیگر پروژه های B4A، B4i و یا B4J استفاده کنید. 2- دومین روش اینه که در B4XPages چک کنید که مثلاً اگر در B4A بودیم، از فلان کتابخونه استفاده شه و یا اگر در B4i بودیم، از فلان کتابخونه دیگه استفاده کن. در واقع به IDE میفهمونیم، که از چه کتابخونه ای استفاده کنه. چک کردن این مورد، دو راه داره: راه اول استفاده از #: #If B4A Dim p As Phone p.SetRingerMode(i.RINGER_NORMAL) #Else IF B4J Dim j As JFX 'j. #Else '...... #End If اگر این رو هرجایی از بیسیک بنویسید(فرض بر این میگیریم، که هر سه بلوک، دارای کد خاص خودشون باشن)، در بیسیک، موقع کامپایل، فقط کد داخل بلوک B4A کامپایل میشه؛ در B4J، فقط کدهای مربوط به خودش کامپایل میشه و بهمین ترتیب در B4i راه حل دوم برای چک کردن IDE، استفاده از کتابخونه xui هست: Dim xui As XUI If xui.IsB4A Then Dim p As Phone p.SetRingerMode(i.RINGER_NORMAL) Else If xui.IsB4J Then Dim j As JFX 'j. Else End If این هم دقیقا عین بالاس، هیچ فرقی نداره. هر تاپیکی از بنده که دارای عبارت *B4X* و یا *B4XPages* بود، میتونید به عنوان یک کتابخونه، در B4XPages و یا دیگر پروژه های B4A، B4i و یا B4J استفاده کنید.(پس با استفاده از این کتابخونه ها، دیگه لازم نیست چنین شرط‌هایی بذاریم) مثل این پست: پیشنهاد میکنم حتما حتما حتما فیلم آموزشی زیر از خود شخص ارل رو ببینید تا درکتون از این پروژه ها در B4XPages، بره بالاتر. https://vimeo.com/440642051 شرمنده خودم وقت مناسب ندارم که چنین فیلمهایی پر کنم. جلسه بعد، بیشتر با خصوصیات و رفتار B4XPages آشنا میشیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
    1 امتیاز
  27. سلام دوستان همونطور که قول داده بودم، لینک تمامی آموزش‌ها و سورس‌ها رو همینجا قرار میدم. موفق باشید
    1 امتیاز
  28. جلسه سوم همونطور که در جلسه قبل گفته شد، از این جلسه به بعد، وارد کدنویسی میشیم. اما قبل از اون، یه کاربرد بسیار مهم B4XPages رو فراموش کردم بگم: شما میتونید به تمااامی مقادیر، متغیرها، ویوها، انیمیشن‌ها و ... دسترسی 100 درصدی داشته باشین. یعنی که بعنوان مثال، براحتی قادرید متن فلان Button در فلان پیج رو از دیگر پیج ها حتی اگر یه پیج دیگه نمایان باشه، بگیرید، تغییر دهید و یا حتی خود اون Button رو به یه پیج دیگه منتقل کنید. (این نکته رو حتما میدونید که یکی از معضلات بزرگ کار با اکتیویتی‌ها، جابجایی اطلاعات متغیرها بین اونهاست اما B4XPages، این مشکل رو براحتی حل کرده) خب شروع کنیم: از نسخه 10 به بعد بیسیک، IDE بدون اکتیویتی ها باز میشه. برای ایجاد یه پروژه B4XPages، در مسیر زیر، پروژه رو ایجاد میکنیم. Files -> New Project ->B4XPages بطور پیشفرض، با ایجاد یک پروژه B4XPages، همزمان سه پروژه با B4J،B4A و B4i + یک پوشه به اسم SharedFiles و کلاس B4XMainPage ایجاد میشه که این کلاس بین هر سه پروژه مشترک هست. اگر قصد دارید فقط با یک پلتفرم کار کنید، کافیه سه پوشه دیگه رو حذف و کلاس B4XMainPagev رو به پوشه B4A ایجاد شده، انتقال بدید. همین با ایجاد پروژه، همونطور که مشاهده میکنید در اکتیویتی Main، یسری تغییرات ایجاد شده؛ نباید به اینها کاری داشته باشیم و کد نویسی ما بجای اکتیویتی Main، از کلاس B4XMainPage شروع میشه. **** این نکته رو داشته باشید که برای استفاده از B4XPages، باید کتابخونش رو هم فعال کرد که البته بعد از ایجاد یک پروژه B4XPages، بطور پیشفرض، فعاله کلاس B4XMainPages که بطور پیشفرض ایجاد شد، دقیقا عین اکتیویتی Main هست و اولین صفحه‌ایه که نمایش داده میشه. الگوی کلاس‌های B4XPages، بسیار ساده هست: Sub Class_Globals Private Root As B4XView 'ignore Private xui As XUI 'ignore End Sub Public Sub Initialize End Sub 'This event will be called once, before the page becomes visible. Private Sub B4XPage_Created (Root1 As B4XView) Root = Root1 'load the layout to Root End Sub پس بعد از ایجاد پروژه، هر کد اضافی مشاهده کردید، میتونید پاکشون کنید. متغیر B4XView، زمانی بکار میره که بخوایم همزمان برای چند پلتفرم برنامه بنویسیم. همونطور که در جلسات قبل گفته شد، در B4XPages، رویداد Process_Globals وجود نداره و مثل دیگر کلاس‌ها فقط ساب Class_Globals هست که دقیقا کار Process_Globals رو انجام میده. دو متغیر Root و XUI، بطور پیشفرض تعریف شدن. پیشنهاد میکنم این دو رو حذف نکنید... رویداد B4XPage_Created وقتی برای اولین بار پیج نمایش داده می‌شه، اجرا میشه و باید لایوت رو هم، در همین ساب لود کرد؛ دقت کنید پیج‌ها هرگز از بین نمیرن، پس این ساب، فقط یکبار اجرا میشه. بطور پیشفرض، یک کد ماژول به اسم B4XPages در کتابخونه B4XPages وجود داره و برای دسترسی به ویژگی‌های مختلف پیج‌ها(مثل تایتل پیج، ایجاد پیج جدید و ...)، از این ماژول استفاده می‌کنیم. هر پیج، یک id از نوع String داره که به حروف کوچیک و بزرگ هم حساسه، id صفحه اصلی (B4XMainPage)، عبارت "MainPage" هست. *** نحوه لود کردن لایوت در B4XPage_Created: Private Sub B4XPage_Created (Root1 As B4XView) Root = Root1 'load the layout to Root Root.LoadLayout("Layout1") End Sub *** نحوه اضافه کردن یک پیج: برای افزودن پیج، همچون اکتیویتی‌ها، از مسیر Project -> Add New Module -> Class Module -> B4XPage رو انتخاب میکنیم و با نامگذاری نامی مناسب(اینجا، از B4XPage2 استفاده میکنم)، کلاس رو اضافه میکنیم. دقت کنید که الان، فقط کلاس اضافه شده و هنوز پیجی جدید نداریم. برای ایجاد پیج، اول باید یک متغیر از این کلاس ایجاد کنیم و از کد ماژول پیشفرض در کتابخونه B4XPages، بشکل زیر در مکان دلخواه(که بهترین مکان، همون ساب B4XPage_Created هست) استفاده کنیم: Private Sub B4XPage_Created (Root1 As B4XView) Root = Root1 'load the layout to Root Dim Page2 As B4XPage2 Page2.Initialize B4XPages.AddPage("Page 2", Page2) End Sub همونطور که گفتم، اول متغیر Page2 رو از نوع کلاسی که اضاف کردیم، تعریف و اون رو Initialize می‌کنیم. و بعد از متد AddPage کد ماژول B4XPages برای اضافه کردن پیج استفاده میکنیم. همونطور که مشاهده می‌کنید، متد AddPage، دو آرگومان داره، اولی همون id پیج هست (که بالاتر کامل توضیح دادم) و دومی، همون متغیری هست که تعریف کردیم. *** نحوه نمایش یک صفحه: بعد از اینکه پیج رو اد کردیم، در مکانی دلخواه (مثلا در رویداد کلیک دکمه) با کد زیر به صفحه بعد میریم و اون رو نمایش میدیم: B4XPages.ShowPage("Page 2") متد ShowPage، یک ورودی داره که همون id صفحه مورد نظر هست. دقت کنید که در حال حاضر، با این کد، پیج قبلی (MainPage) از بین نرفته و تمام خصوصیات، رویدادها ویوهای اون دردسترس هستن و هرگز ریست نمیشن. (پس نیازی به Initialize دوباره متغیرها نیست) نکته بسیااار مهم دیگه‌ای که هست، اینه که اگر دوباره صفحه MainPage رو نمایش بدیم، دیگه ساب B4XPage_Created اجزا نمیشه اما بعضی وقتها لازم هست، که دوباره یکسری چیزها مقدار دهی شن و یا بهر دلیلی لازم داریم که این ساب دوباره اجرا شه. برای این کار باید بجای استفاده از متد ShowPageٍ، از کد زیر استفاده کنیم: B4XPages.ShowPageAndRemovePreviousPages("Page 2") با اینکار، پیج قبلی، حذف میشه و عملا داریم کاری میکنیم که بعد از بازگشت به این صفحه، ساب B4XPage_Created فراخوانی بشه. برای درک بهتر موضوع، سورس ساده زیر رو حتما بررسی کنید: ThreePagesExample.zip اگر نتوستم درست توضیح بدم، ببخشید جلسه بعد، بیشتر با خصوصیات و رفتار B4XPages آشنا میشیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
    1 امتیاز
  29. جلسه دوم B4XPages، چه مشکلاتی را برای ما رفع می‌کند؟ در ادامه جلسه قبل، تو این جلسه میخوایم بیشتر خصوصیات B4XPages رو بررسی کنیم. B4XPages که از نسخه 10 به بعد بیسیک وارد دنیای B4X شد، خیلی چیزها رو برای ما ساده میکنه. توسعه دهندگان اندروید، با پیچ و خم های اون، کاملا آشنا هستن و میدونن که یه برنامه نویس اندروید، با چه چالش هایی روبرو هست. بخاطر همین، شاید درک سادگی B4XPages برای بعضی‌ها مشکل باشه. همونطور که در جلسه اول گفتم، B4XPages چند هدف داره: Cross Platform Layer (قبلا هم اشاره شد. با یه کد و یه کلاس، میتونید علاوه بر اندروید، برای ios و حتی B4J هم برنامه بنویسین) توسعه برنامه‌های اندرویدی رو بسیار ساده تر میکنه. از مزایای CrossPlatformLayer، این هست که B4XPages میاد اکثر تفاوتهای اکتیویتی‌های B4A، صفحات B4i و فرم های B4J رو پنهان میکنه و این یه نقطه قوت برای این کلاس هست. به همین دلیل خییلی از برنامه نویسان بیسیک، به سمت B4XPages حرکت کردن و تا الان استقبال خیلی خوبی از B4XPages شده. حتی اگر شما فقط به توسعه برنامه اندرویدی علاقه داشته باشید، باز میتونید از B4XPages استفاده کنید. سه نکته مهم درمورد کلاسهای B4XPages: این کلاس‌ها بر خلاف اکتیویتی‌ها، چرخه حیات ندارن (مثلا مثل اکتیویتی ها نیستن که اول Activity_Create فراخوانی بشه و بعد Activity_Resume و مثلا موقع خارج شدن، Activtiy_Paused اجرا بشه.) B4XPages کاملا منظم هست و هیچ وقت از بین نمیره که مثلا بخواد OnPaused داشته باشه و همین کار رو برای شما بسیار ساده تر میکنه.(اگر بطور مثال بخوام بگم، فرض کنید شما از داخل یه اکتیویتی دیگه، مثلا بتونید Title یه اکتیویتی دیگه رو تغییر بدید. چنین قابلیت‌هایی در B4XPages، فوق العاده کاربردی هستن.) متغیرها و ویوهای یک پیج، هرگز Reset و بازنشانی نمیشن و این بسیار مهمه. در B4XPages، بجای هر اکتیویتی، یک پیج داریم. سه نکته بالا، خیلی از کارها رو ساده میکنن. برای مثال، یه لیستی از اون‌ها رو آوردم: رویدادها، هرگز از بین نمیرن و یا در صف قرار نمیگیرن حالت خواب، هرگز صدا زده نمیشه و بعنوان مثال، دیگه لازم نیست انیمیشن ها رو تو Activity_Resume مجددا restart کرد. در بیشتر موارد، دیگه نیازی از سرویس Starter نیست UI برنامه، هرگز از بین نمیره با استفاده از B4XPages، بطور مستقیم میشه ساب های مختلف در دیگر پیج ها رو فراخوانی کرد و دیگه نیاز به استفاده از CallSub و یا CallSubDelayed نیست. بطور مستقیم میتونیم به متغیرهای دیگر پیج ها دسترسی داشته باشیم. بطور مستقیم میشه به ویوهای دیگر پیج ها، دسترسی داشت و اونا رو دستکاری کرد. میشه یه ویو رو با تمام خصوصیاتش، بین پیج های B4XPages، جابجا کرد.(همونطور که در تصویر جلسه قبل هم مشخص بود) میتونید در یک پیج، پیج های دیگری اضافه کنید. (با کد) خیلی جاها، دیگه لازم نیست FirstTime = True رو چک کرد مدیریت دکمه بک گوشی، بسیار ساده تر است. اگر سورس چت بلوتوثی با اکتیویتی ها و B4XPages رو با هم مقایسه کنید، کاملا این سادگی رو متوجه میشید: سورس چت بلوتوثی قدیمی (با استفاده از اکتیویتی ها) Bluetooth.zip سورس چت بلوتوثی جدید (با B4XPages) خودتون این دو سورس رو مقایسه کنید. تا سادگی کار و کدها رو حس کنید. با این وجود، هیچ کسی مجبور نیست که از B4XPages استفاده کنه. در جلسه قبل هم گفته شد، B4XPages هنوز دارای یسری محدودیت ها هست. از جلسه بعد وارد کد نویسی و ایجاد این کلاس میشیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
    1 امتیاز
  30. جلسه اول خدا رو شکر جلسه اول آماده شد. امیدوارم کامل و مفید باشه. اول از همه، بهتره یه مقدمه از B4XPages بگم تا بفهمیم اصلا چی هست و بدرد چی میخوره و چه مزیت هایی داره. در واقع B4XPages، یه پنله داخل یه اکتیویتی اما در عمل، یه کلاس جایگزین برای Activity ها هست. یعنی کسی که با این کلاس کار میکنه، لایوت رو تو همین کلاس لود میکنه و کدهاشم همینجا مینویسه و دیگه کاری به اکتیویتی ها نداره. مهمترین فایده‌ی B4XPages، اینه که دیگه لازم نیست با رویدادها و چرخه حیات یک اکتیویتی (مثل Activity_Create , Activity_Resume , Activity_Resume , Activity_KeyPress و ....) سر و کله بزنیم؛ صفحات هیچ وقت از بین نمیرن و براحتی از هر کجا میشه به صفحات دیگه دسترسی داشت (که ان‌شاءالله در جلسات بعد، کامل بررسی میکنیم) این کلاس واقعا کار رو برای یه توسعه دهنده اندروید ساده میکنه. فایده دیگه ای که داره، اینه که با یه کد، میتونید همزمان برای اندروید و ios برنامه بنویسین. (البته نه دقیقا، یه سری تفاوتها هست که ان‌شاءالله در آینده در این مورد بحث خواهیم کرد) خب قبل از اینکه بطور تخصصی وارد آموزش بشیم بهتره که این موارد رو درنظر بگیریم: 1- هیچ کسی مجبور نیست از این روش برای نوشتن برنامش استفاده کنه. 2- هنوز یه سری محدودیت ها داره که ان‌شاءالله رفع میشه. یکی از مهمترین محدودیتهاش اینه که انیمیشن بین صفحات، فقط در یک جهت حرکت میکنن و قابل تغییر هم نیستن. 3- برای استفاده از B4XPages، باید از نسخه 10 به بعد بیسیک استفاده کنید. اینم یه پیشنمایش از B4XPages: سعی کردم حجم آموزش رو کمتر و در عوض، آموزشها رو پیوسته‌تر کنم. ان‌شاءالله در جلسه بعد، بیشتر بررسی می‌کنیم که B4XPages، دقیقا چه مشکلاتی رو برای برنامه نویس رفع میکنه. اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
    1 امتیاز
×
×
  • اضافه کردن...