رفتن به مطلب

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

  1. Salar82

    Salar82

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


    • امتیاز

      717

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

      559


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

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

    مدیر کل سایت


    • امتیاز

      616

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

      3,256


  3. mahdi tahan

    mahdi tahan

    کاربر فعال


    • امتیاز

      143

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

      878


  4. Mr.Kafiri

    Mr.Kafiri

    کاربر رو به رشد


    • امتیاز

      127

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

      231



مطالب محبوب

در حال نمایش مطالب دارای بیشترین امتیاز از زمان سه شنبه, 6 اسفند 1398 در پست ها

  1. 13 امتیاز
    بسم الله الرحمن الرحیم سلام و درود خدمت همه‌ی اعضای انجمن انسرسنتر B4X چن وقتی هست از یه سری کتابخونه ها رونمایی کرده؛ مثل B4XTurtle و B4XPages و .... که فوق العاده کاربردی هستن. همونطور که قولش رو داده بودم، قرار شد یه دوره کامل و رایگان آموزش کار با این کتابخونه های جامع و کامل رو قرار بدم. که انشاءالله با B4XPages که خیلی مورد استقبال برنامه نویسان قرارگرفته دوره ها رو شروع می‌کنم. منتها قبل از شروع آموزش، یه سری نکات هست که باید خدمت همگی عرض کنم: 1- برای اینکه آموزشها پراکنده نشن، لطفا تو این پست، چیزی نفرستین و اگر موردی، سوالی و یا مشکلی بود، یه پست جدید ایجاد کنید. 2- آموزشها تا اطلاع ثانویه بصورت چند روز یکبار قرار داده میشن (بدلیل کمبود وقت بنده) اما هر زمان که وقت اضاف آوردم، حتما سعی میکنم جلسه بعد رو آماده کنم و بفرستم. (چون خودم هم باید مطالعه در این مورد داشته باشم ) 3- آموزش های مقدماتی همینجا قرار داده میشن و دیگر سورس ها و آموزش های مربوطه، تو یه پست جدید میذارم تا مشکلات مربوط به اونا، همونجا مطرح بشن. 4- البته لینک آموزشهای دیگه هم، اینجا قرار داده میشه. پس تمامی آموزشهای مربوط به B4XPages، همینجا در دسترس هستن. 5- آموزشها، کاملا مطابق با سایت مرجع پیش میره. پس نگران ناقص بودن دوره نباشید 6- مهم ترین نکته‌ای که مد نظر بنده هست و بهمین خاطر آموزش رو رایگان گذاشتم، اینه: هزینه هر آموزش، یه صلوات برای سلامتی و ظهور امام عصر (عج) هست .... ان شاءالله تا چن روز آینده، دوره آموزشی رو شروع می‌کنیم. امیدوارم در تمام مراحل زندگی موفق باشید.
  2. 13 امتیاز
    جلسه اول خدا رو شکر جلسه اول آماده شد. امیدوارم کامل و مفید باشه. اول از همه، بهتره یه مقدمه از B4XPages بگم تا بفهمیم اصلا چی هست و بدرد چی میخوره و چه مزیت هایی داره. در واقع B4XPages، یه پنله داخل یه اکتیویتی اما در عمل، یه کلاس جایگزین برای Activity ها هست. یعنی کسی که با این کلاس کار میکنه، لایوت رو تو همین کلاس لود میکنه و کدهاشم همینجا مینویسه و دیگه کاری به اکتیویتی ها نداره. مهمترین فایده‌ی B4XPages، اینه که دیگه لازم نیست با رویدادها و چرخه حیات یک اکتیویتی (مثل Activity_Create , Activity_Resume , Activity_Resume , Activity_KeyPress و ....) سر و کله بزنیم؛ صفحات هیچ وقت از بین نمیرن و براحتی از هر کجا میشه به صفحات دیگه دسترسی داشت (که ان‌شاءالله در جلسات بعد، کامل بررسی میکنیم) این کلاس واقعا کار رو برای یه توسعه دهنده اندروید ساده میکنه. فایده دیگه ای که داره، اینه که با یه کد، میتونید همزمان برای اندروید و ios برنامه بنویسین. (البته نه دقیقا، یه سری تفاوتها هست که ان‌شاءالله در آینده در این مورد بحث خواهیم کرد) خب قبل از اینکه بطور تخصصی وارد آموزش بشیم بهتره که این موارد رو درنظر بگیریم: 1- هیچ کسی مجبور نیست از این روش برای نوشتن برنامش استفاده کنه. 2- هنوز یه سری محدودیت ها داره که ان‌شاءالله رفع میشه. یکی از مهمترین محدودیتهاش اینه که انیمیشن بین صفحات، فقط در یک جهت حرکت میکنن و قابل تغییر هم نیستن. 3- برای استفاده از B4XPages، باید از نسخه 10 به بعد بیسیک استفاده کنید. اینم یه پیشنمایش از B4XPages: سعی کردم حجم آموزش رو کمتر و در عوض، آموزشها رو پیوسته‌تر کنم. ان‌شاءالله در جلسه بعد، بیشتر بررسی می‌کنیم که B4XPages، دقیقا چه مشکلاتی رو برای برنامه نویس رفع میکنه. اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
  3. 9 امتیاز
    جلسه دوم 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 هنوز دارای یسری محدودیت ها هست. از جلسه بعد وارد کد نویسی و ایجاد این کلاس میشیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
  4. 8 امتیاز
    مشاهده فایل PersianAudioRecorder با سلام. با یه کتابخونه بسیار کاربردی دیگه در خدمت دوستان هستیم. یکی از مواردی که اکثر دوستان باهاش مورد داشتن ضبط صدای با کیفیت توی اندروید هست. این کتابخونه این امکان رو برای شما فراهم میکنه که یک ضبط صدای با کیفیت دلخواه داشته باشین. این کتابخونه تقریبا از تلگرام قسمت voice برداشته شده و قاعدتا خیلی حرفه ای روش کار شده. کار با کتابخونه خیلی راحت هست به این ترتیب که اول به صورت زیر اینشیالایز میکنید Private audiorecord As PersianAudioRecorder audiorecord.Initialize("audio",audiorecord.ENCODING_PCM_16BIT,audiorecord.CHANNEL_IN_MONO,44100,32000) ورودی اول که ایونت هست ورودی دوم اینکدینگ هست که دو حالت pcm8 و pcm16 رو دارین که دومی کیفیتش بالاتر هست. همینطور وردی سوم کانال ضبط هست که مونو و استریو هست و وردی چهرم و پنجم هم سمپل ریت و بیت ریت هست که به صورت دلخواه میتونید بدید. و اما ضبط صدا هم که به شکل زیر باید درخواست بدید audiorecord.startRecord(dir) ورودی این متد یه استرینگه که میتونید مسیر دلخواه برای ذخیره فایل بدین یا اینکه یه رشته خالی رو بدین که پیش فرض توی File.DirDefaultExternal ذخیره میشه. برای متوقف کردن هم میتونید از دستور زیر استفاده کنید audiorecord.stopAudioRecorder این متد یه استرینگ برمیگردونه که مسیر کامل فایل ضبط شده هست. برای پخش صدای ضبط شده هم متدی رو قرار دادیم. audiorecord.playAudio(prf.GetUriFromFile(audioPatch)) که prf رو از کتابخونه PersianFileProvider میتونید استفاده کنید. سورس کامل کار با کتابخونه. voicerecorder.zip ارسال کننده محمدرضا شاهپیری ارسال دوشنبه, 26 اسفند 1398 دسته کتابخانه ها
  5. 7 امتیاز
    سلام خدمت اعضای محترم انجمن قبل از هر چیز، از استاد @ محمدرضا شاهپیری عزیز که به من در تهیه این کتابخونه خیلی کمک کردن، تشکر فراوان میکنم. ان‌شاءالله در تمام مراحل زندگی، موفق باشن. همونطور که می‌‌دونید، اسلایدر عکس، یه ویوی بسیار کاربردی هست که می‌تونه تو زیبایی رابط کاربری برنامه، بسیار مؤثر باشه. بهمین جهت، در اکثر برنامه‌هایی که میشناسید، بکار رفته. از اونجایی که بیسیک در زمینه اسلایدر عکس، خیلی ضعیف عمل کرده، سعی بر این داشتم که این نقص رو برطرف کنم و میشه گفت یکی از کاملترین و حرفه‌ای ترین کتابخونه‌ها در این زمینه رو بصورت اختصاصی برای انسرسنتری‌ها آماده کردم. قابلیت هایی که کتابخونه داره: 1- کار باهاش خیلی راحته 2- تغییر فونت متن 3- تغییر رنگ متن 4- تغییر Gravity متن 5- تغییر سایز متن 6- ایجاد سایه روی اسلایدر 7- استفاده از ریسایکلرویو 8- تغییر سایز Indicator 9- تغییر رنگ Indicator 10- تغییر فاصله بین Indicator ها 11- 10 انیمیشن متفاوت برای Indicator ها 12- تغییر زمان اسکرول 13- تغییر جهت اسکرول 14- 22 انیمیشن متفاوت برای جابجایی هر اسلاید 15- استفاده از کتابخونه قدرتمند Glide در ShImageSlider 16- دارای رویداد OnItemClick 17- تغییر موقعیت Indicator ها (ان‌شاءالله نسخه های آینده) 18- افقی یا عمودی کردن Indicator ها (ان‌شاءالله نسخه های آینده) لینک فروشگاه: تصاویر: دانلود فیلم آموزشی (15 دقیقه): امیدوارم مفید باشه.
  6. 7 امتیاز
    جلسه سوم _ قسمت 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 آشنا میشیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
  7. 7 امتیاز
    با سلام خدمت همه عزیزان. یه کتابخونه فوقلاده زیبا و کاربردی رو براتون آماده کردیم. امروزه اپلیکیشنها واقعا از لحاظ بصری پیشرفتهای چشمگیری کردن و کمتر اپلیکیشن موفقی رو میبیند که طراحی و گرافیکش ضعیف باشه. بنابر این برای اینکه یه اپ موفق و جذاب داشته باشین باید حتما روی طراحی و گرافیکش کار کنید. تو کتابخونه حاظر یکی از جالبترین افکتها و طراحی ها یعنی پارالاکس رو براتون اماده کردیم. تو این کتابخونه تا جایی که تونستیم دست کاربر رو توی شخصی سازی باز گذاشتیم. اضافه کردن دکمه ها در جای دلخواه اضافه شدن دکمه منو. امکان چپ پین کردن و راست چین کردن دکمه ها امکان مخفی سازی خودکار تولبار حین اسکرول استفاده از فونت دلخواه. سازگاری کامل با ریسایکلرویو و ahnavigation جهت ساخت اسلاید منو. و بسیاری از قابلیتای دیگه که توی اموزش ذکر شده. *******این کتابخونه قبلا به صورت محدودتر توی ریسایکلر ویو وجود داشت. بنابراین دوستانی که ریسایکرویو رو دریافت کردن این کتابخونه به رایگان بهشون تعلق میگیره.******* لینک آموزش کار با کتابخانه. پیشنمایش.
  8. 6 امتیاز
    سلام به همه دوستان. نسخه جدید بیسیک رو سایت مرجع منتشر کرده.از لینک زیر میتونید دریافت کنید https://www.b4x.com/android/forum/threads/b4a-v10-50-is-available-for-download.126164/ لیست تغییرات New libraries tab: Find all references feature was rewritten. Previously it couldn't handle more complex cases, where a sub or field are called indirectly: For example: The various IDE notifications also appear in the logs: #CustomBuildAction - direct support for jar files, including Java 11+ UI jars. Default manifest updated. This allows resetting the manifest by removing the manifest text and saving. Dexer optimization can be disabled through the ini file. Updated or new internal libraries: XUI, XUI Views, B4XDrawer, BCTextEngine, OkHttpUtils2, GooglePlayBilling, KeyValueStore, B4XPages template, GooglePlayBIlling and FileProvider. Bug fixes and other minor improvements. This includes a long-standing bug where the wrong context was used after a resumed sleep in some edge cases (fix is relevant to B4XPages). I wish you all a great 2021!
  9. 6 امتیاز
    مشاهده فایل کتابخانه بسیار کاربردی PersianTimer با سلام خدمت دوستان عزیز امیدوارم که حالتون خوب باشه و کدهاتون بی ارور با یک کتابخونه بسیار کاربردی و واجب در خدمتتون هستم. کتابخونه timer خود بیسیک واقعا ضعیف و بدون امکانات هست. و گزارشهایی هم شده که کتابخونه به درستی کار نمیکنه. تو این کتابخونه به جای خود تایمر اندروید و یا handler اومدیم و از scheduledexecutorservice که از خانواده قدرتمند ThreadPoolExecutor هست استفاده کردیم. یکی از مزیت های بسیار خوب این کتابخونه این هست که به راحتی میتونید بینهایت کار رو به صورت همزمان توی نخهای متفاوت بدون هیچ گونه تداخلی انجام بدین.این کار به وسیله Future ها انجام میشه و توی کتابخونه به وسیله tag تایمرها از هم متمایز میشن. امیدوارم که از کتابخونه واقعا کاربردی بهترین استفاده رو بکنید. لینک آموزش و سورس کتابخونه واما نحوه استفاده از کتابخونه. ابتدا کتابخونه رو تیک بزنید و اونو اینشیالایز کنید Dim prt As PersianTimer prt.Initialize("prt") توی این کتابخونه سه تا متد اصلی هست. متد اول متد schedule هست. این متد کارش اینه که یک کار مشخص رو بعد از یک تایم مشخص انجام میده. در واقع تایمر رو برای تایم مشخص ست میکنه. مثال. prt.schedule("schedule",prt.TimeUnit_SECONDS,10) Private Sub prt_onTick(Tag As String,TimeUntil As Int) بعد از 10 ثانیه این متد اجرا میشه End Select متد دوم scheduleAtFixedRate هست. این متد تایمر رو با یک وقفه مشخص برای یک دوره زمانی متناوب ست میکنه. مثال. prt.scheduleAtFixedRate("scheduleAtFixedRate",prt.TimeUnit_SECONDS,3,1) ' یعنی اینکه بعد از 3 ثانیه هر یک ثانیه تیک بخور تا زمانی که اونو کنسل نکنید به همین صورت هر یک ثانیه یک بار متد زیر اجرا میشه Private Sub prt_onTick(Tag As String,TimeUntil As Int) این متد هر یک ثانیه اجرا میشه End Select متد سوم متد scheduleCountDown هست. این متد یک تایمر معکوس با تایم مشخص و دوره تیک مشخص ایجاد میکنه. مثال prt.scheduleCountDown("scheduleCountDown1",prt.TimeUnit_SECONDS,30,1) ' یعنی اینکه از 30 شروع کن و تا صفر یک ثانیه یک ثانیه بیا Private Sub prt_onTick(Tag As String,TimeUntil As Int) Log("Tick : "&Tag&" TimeUntil : "&TimeUntil) ' TimeUntil مقدار زمان باقیمانده تا صفر هست به ثانیه End Select End Sub بعد از 30 ثانیه تایمر تموم میشه و متد زیر اجرا میشه Private Sub prt_onFinish(Tag As String) Log("Finish : "&Tag) End Sub ارسال کننده محمدرضا شاهپیری ارسال جمعه, 26 بهمن 1397 دسته کتابخانه ها
  10. 6 امتیاز
    جلسه سوم همونطور که در جلسه قبل گفته شد، از این جلسه به بعد، وارد کدنویسی میشیم. اما قبل از اون، یه کاربرد بسیار مهم 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 آشنا میشیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
  11. 6 امتیاز
    سلام دوستان انسر سنتری، بنا به دلایلی چند وقتی میشه فعالیت خاصی نداشتم گفتم عرض اندامی کنم. خب توی سایت B4X گشت و گذاری داشتم و دیدم آقای ارل یک پستی رو مبنی بر بیان اشتباهات رایجی که ما توی کدنویسی حالا سهوا یا از روی ندانستن صورت میگیره رو داره. این نکاتی که توی پست آقای ارل بیان شده، زمانی براتون قابل ملموس هست که پروژه های نسبتا متوسطی دستتون باشه و پیچیدگی های خاصی توی کار وجود داشته باشه.خب ما اگر بخواییم به پیچیدگی های معمولِ کار اضافه کنیم، در روند اجرایی پروژمون قطعا دچار مشکل در خطایابی و درک مسئله خواهیم شد. خب بهتره پس بتونیم کد تمیز و درست بنویسیم.حالا کد تمیز نوشتن مفهوم بر این نیست که تعداد خط کمتری داشته باشه، خیر.گاها لازمه یکسری کدهای حالا اصطلاحا استاتیک رو تبدیل کنیم به یکسری کد بهتر و پویاتر و به نوبه ای هوشمند تر. اینکه بخواییم با مشخصه های ثابت و کمی سر و کله بزنیم، دست و بالمون توی توسعه بسته میشه.باید کد نویسی منعطف و پویایی داشته باشیم تا زمانیکه توی پروژه پارامتری کم و زیاد شد ما دیگه نیازی به تغییرات بزرگ نداشته باشیم و باز پروژه نیاز به تغییرات زیادی نداشته باشه. خلاصه کنم براتون پست خوبیه و پیگیر باشید که نکات جالبی رو میگه و میتونه توی توسعه پروژه هاتون مفید باشه. برنامه نویسی حد و حدود نداره و دریایی بیکران هستش و ما هیچوقت به سرحدات کمال نمیرسیم چون توی هر سطحی که باشیم بازم چیزای جدیدی هست که باید یاد بگیریم.ویژگی علم به پویاییشه.دریابید و بروز بشید و مث من نباشید سالی یبار یادی کنیم از برنامه نویسی "Code Smells" - common mistakes and other tips
  12. 6 امتیاز
    سلام چند وقت پیش کتابخونه آقا پژمان رو (ٍEditTextPlus) از تاپیک زیر دانلود کردم. دیدم کتابخونشون بسیار کاربردیه ولی چون با نسخه جدید(9.8 َAndroidx) بیسیک مشکل داره، نمی شه ازش استفاده کرد. بخاطر همین یه سری تغییرات داخل کتابخونه انجام دادم و اونو بروز کردم. از جمله: 1- اضافه شدن کاستوم ویو کتابخونه 2- امکان ویرایش ادیت تکست در Designer 3- تلفیق خصوصیات ادیت تکست با کتابخانه و... دانلود نسخه 1 : ShEditText_v1.00.rar نسخه 1.2 : (افزوده شدن متد MaxLength و نمایش خطای مربوطه) ShEditText_V1.2.rar ممنون از زحمات آقای نیکروان
  13. 5 امتیاز
    باسلام، با یک آموزش دیگر با عنوان(رپ کتابخانه برای بیسیک فور اندروید)در خدمتتون هستم. شما میتوانید جهت سهولت در کار خودتان و یاحتی سایر توسعه کنندگان کتابخانه های کاربردی برای B4a رپ کنید و حتی میتوانید از فروش فایل کتابخانه درآمد کسب کنید. ابتدا ببینیم که رپ کردن(Wraping)به چه معناست: Wrap به معنای بسته بندی کردن می باشد و در واقع در برنامه نویسی به فرایندی گفته می شود که توابع و سایر کدها را در قالب یک class جمع آوری می کند و میتوان توابع آن ها را در اکتویتی ها و کلاس های دیگر فراخوانی کرد. کتابخانه ها منحصر به پلتفورم B4a نمی شوند و حتّی ما در اندروید استودیو،فلاتر،ری اکت نیتیو و سایر محیط های برنامه نویسی نیز از کتابخانه ها استفاده می کنیم. برای B4a میتوان از طریق خود محیط مذکور، جاوا، کاتلین و... کتابخانه رپ کرد. بنده در این تاپیک آموزشی قصد دارم تا به طور رایگان آموزش رپ کتابخانه رو از طریق خود B4a براتون آموزش بدم. امّا اگر از این تاپیک استقبال خوبی بشه قول میدم براتون آموزش رپ کتابخونه از جاوا رو هم در انجمن قرار بدم 1-خب B4a رو باز کنید. یک پروژه جدید ایجاد کنید. 2-کتابخانه ها همانند برنامه ها دارای یک پکیج نیمی هستند، ابتدا از منوی project گزینه build configurations رو انتخاب کنید و پکیج نیم کتابخونه تون رو وارد کنید.(مثل تصویر زیر) 3-به تصویر زیر دقت کنید: خب همانطور که در تصویر بالا می بینید در این مرحله با Region Project Attributes کار داریم که همون محلی هست که هنگام توسعه پروژه ای نام،ورژن،قابلیت نصب روی کارت SD، افقی یا عمودی بودن و... رو تعیین می کنیم. توی تصویر بالا کلیه نکاتی که لازم هست برای ساخت کتابخانه ای در این قسمت انجام بشه رو خدمتتون گفتم. فقط ممکنه بعضی از تگ ها مثل(#LibraryName) بصورت پیشفرض وجود نداشته باشه که باید خودتون اضافه کنید. 4-از منوی project با کلیک روی add new module و سپس class module یک standard class ایجاد کنید. Dim a As نام standard class در این مرحله هرنامی که وارد کنید کتابخانه با همان نام بصورت متغیری تعریف خواهد شد.(بهتر است که نام کتابخانه خود را در این بخش قرار دهیم زیرا کاربر جهت استفاده در B4a باید از کجا بداند که کتابخانه را با چه تایپی(نوعی) تعریف کند؟ اولین مورد که به ذهن کاربر می رسد این است که نام کتابخانه را وارد می کند. بدین شکل: Dim a As نام کتابخانه 5-پس از انجام مراحل بالا یک class به شکل زیر باز خواهد شد: توجه کنید که در این بخش همواره با sub ها سر و کار خواهیم داشت زیرا ما در اینجا توابع آماده را قرار می دهیم و کاربر(استفاده کننده از کتابخانه شما)این توابع را بصورت متد در اکتویتی های خود فراخوانی میکند. بنابراین دانستن چند امر ضروری است: اگر قبل از sub مورد نظر هیچی قرار ندهیم یا عبارت public را قرار دهیم در آن صورت کاربر به این تابع دسترسی خواهد داشت مثلا در تصویر بالا initialize و همچنین class_globals قابل مشاهده خواهند بود(جهت امتحان کتابخانه به اکتویتی Main مراجعه می کنیم و متغیری از نوع کلاسی که ساختیم تعریف می کنیم) : همانطور که می بینید سه متد از کتابخانه(class)ما معرفی میشود. مثلا شاید اصلا به متدهای class_Globals و initialize و حتی isInitialized نیازی نباشد. بنابراین به class خود باز می گردیم و پشت sub هایی که میخواهیم با تعریف کتابخانه نمایان نشوند واژه ای به نام(Private)قرار میدهیم: الان نباید class_globals معرفی شود. بله!!! الان دیگر class_globals نیامده است شما میتوانید برای بقیه توابع نیز اینکار را انجام دهید. یک نکته دیگه هم وجود دارد اینکه شاید نخواهیم isinitialized نیز نمایان نشود اما در class ما تابعی با نام مذکور وجود ندارد تا آن را private کنیم! برای این کار باید قطعه کد زیر را به class خود اضافه کنید. Private Sub IsInitialized End Sub خب! در class خود باید توابع مورد نظر را بنویسیم و آن توابعی که باید توسط کاربر مقدار دهی شوند را هرگز نباید private کنیم. مثلا: همانطور که در تصویر بالا می بینید چون به بقیه sub ها احتیاج نیست اون هارو private کردیم. البته ممکنه خودمون نیاز داشته باشیم مثلا از Class_Globals استفاده کنیم و متغیرهامونو توش تعریف کنیم و در کتابخانه استفاده کنیم اما لزوما کاربر به آن احتیاجی نخواهد داشت.بلکه مثلا در اینجا تنها چیزی که کاربر احتیاج دارد Sub پلاس هست(خودمون نام ساب رو plus گذاشته ایم، این نام دلخواهی است)که دو مقدار عددی میگیرد آنها را جمع کرده و برمیگرداند. اگر بخواهیم کتابخانه خود را در Main امتحان کنیم چنین چیزی خواهد شد: همانطور که می بینید فقط یک متد نمایان می شود. میتوانیم از کتابخانه خود به شکل زیر استفاده کنیم: اگر از a.sub(5,8) مثلا در یک msgbox استفاده کنیم عدد 13 نمایش داده خواهد شد. 6-ما میتوانیم جهت درک بیشتر کاربر از کامنت های توضیحات برای کتابخانه خود استفاده کنیم و حتی میتوانیم مثال نیز برای آن قرار دهیم تا کاربر مثالی از نحوه تعریف و استفاده از کتابخانه را ببیند و حتی بتواند آن را copy و paste کند. برای این کار به تصویر زیر دقت فرمایید: جهت توضیحات دقیقا یک خط بالاتر از Sub موردنظر یک تک کوتیشن(') میگذاریم و توضیحات خود را مینویسیم. جهت درج مثال پس از درج توضیحات یک Enter میزنیم تا به خط بعد منتقل شویم. سپس واژه(Example:) را مینویسیم و دوباره Enter را میزنیم. درخط جدید واژه(<code>) را پس گذاشتن(')مینویسیم و دوباره Enter را میزنیم.در این خط و هر خط بعد از آن میتوانیم کدهای خود(مثال کتابخانه مان) را بصورت کامنت شده(با تک کوتیشن('))قرار دهیم. وسپس میتوانیم با نوشتن واژه(</code>)مثال خود را خاتمه دهیم. پس فرم کلی به شکل زیر شد: 'توضیحات 'Example: '<code> محل قرار گرفتن مثال های شما(قبل از هر خط مثال از تک کوتیشن استفاده کنید) '</code> sub mysub endsub نتیجه بصورت زیر خواهد بود: 7-خب حالا چگونه کتابخانه خود را رپ کنیم؟ یعنی دو فایل jar و xml تولید شود؟ روی class خود بروید و دکمه های Alt+5 را همزمان فشار دهید یک پنجره ای باز خواهد شد که مسیر ذخیره کتابخانه را باید تعیین کنید. ترجیحا یک پوشه بسازید و آن را انتخاب کنید. اما میتوانید جهت راحتی کار در مسیر کتابخانه های b4a ذخیره کنید تا در b4a کتابخانه خود را تیک بزنید و امتحان کنید.(فقط باید در پنجره کتابخانه راست کلیک کرده و گزینه Refresh را انتخاب کنید تا لیست کتابخانه ها بروز شود.) خب مثالی که ما در این تاپیک زدیم خیلی ساده بود و کتابخونه مون میومد دوتا عدد رو جمع می کرد قطعا شما میتونید کتابخانه های بسیار کاربردی و قدرتمندی رو رپ کنید. لازم میدونم یک نکته روهم اینجا بگم: اون سری هم یک کتابخانه ساخت کتاب با متن و تصویر رو براتون قرار داده بودم، برخی از دوستان عزیز لطف کردند اومدن پی وی بنده و قدردانی کردند(این قدردانی ها انگیزه ای برای فعالیت بهتر بنده هستن.) و همچنین گفتند که شما این همه زحمت می کشید چرا محصول خود را بصورت رایگان در دسترس عموم قرار میدید؟ بنظرم جواب این سوال بسیار واضح و آشکار هست و اون چیزی جز خدمت به برنامه نویسان عزیز کشورم نیست و این زحمات بنده بسیار ناچیز می باشد و امیدوارم مورد قبول حق قرار بگیرد. امیدوارم از این آموزش نهایت استفاده رو برده باشید. یاعلی
  14. 5 امتیاز
    سلام و عرض ادب دارم خدمت همه دوستان عزیز انجمن امروز یک قطعه کد براتون آماده کردم که میتونید باهاش یک ToastMessage کاملا سفارشی بسازید(رنگ زمینه و رنگ متن Toast رو خودتون تعیین میکنید.) خب بریم شروع کنیم ابتدا کتابخانه Javaobject رو تیک بزنید، سپس کد زیر رو بین دوتا sub کپی و سپس پیست(copy & past)کنید Sub ToastMessageShow_Custom(Message As Object, LongDuration As Boolean, BackgroundColor As Int , message_color As Int) Dim cs As CSBuilder cs.Initialize.Color(message_color).Size(20).Append(Message).PopAll Message=cs Dim ctxt As JavaObject ctxt.InitializeContext Dim duration As Int If LongDuration Then duration = 1 Else duration = 0 End If Dim toast As JavaObject toast = toast.InitializeStatic("android.widget.Toast").RunMethod("makeText", Array(ctxt, Message, duration)) Dim v As View = toast.RunMethod("getView", Null) Dim cd As ColorDrawable cd.Initialize(BackgroundColor, 20dip) v.Background = cd toast.RunMethod("show", Null) End Sub حالا هرکجا که میخواهید یک toast سفارشی نمایش بدین اینطوری تابع بالارو فراخوانی کنید: ToastMessageShow_Custom("Answercenter.ir",True,Colors.Blue,Colors.White) 1-توی پارامتر اول متن مورد نظرتون رو قرار بدید. 2-توی پارامتر دوم اگر true بزارید مدت زمان نمایش بیشتر و اگر false بزارید این مدت کم میشه. 3-پارامتر سوم رنگ زمینه toast رو میگیره که اینجا من آبی دادم. 4-پارامتر چهارم هم رنگ متن رو میگیره که من اینجا سفید دادم. نتیجه کارمون این میشه: موفق و سربلند باشید، یاعلی
  15. 5 امتیاز
    سلام کتابخانه RuntimePermissions را از پنجره librarys تیک بزنید. سپس در globals یک متغیر از کلاس این کتابخونه تعریف کنید. به این شکل: Sub Globals Private r As RuntimePermissions End Sub سپس به این شکل استفاده کنید(این کدهارا در activity_create و بالاتر از همه کدها قرار بدید. البته باید قبل از اجرای کدهایی که از دسترسی استفاده می کنند قرار دهید.) : r.CheckAndRequest(r.PERMISSION_WRITE_EXTERNAL_STORAGE) Wait For Activity_PermissionResult (Permission As String, Result As Boolean) If Result = False Then Msgbox("اجازه دسترسی صادر نشد. بنابراین برنامه نمیتواند کار کند.","") Activity.Finish Return End If در کد بالا به جای عبارت(PERMISSION_WRITE_EXTERNAL_STORAGE) دسترسی مدنظر خود را قرار دهید. PERMISSION_WRITE_EXTERNAL_STORAGE دسترسی حافظه را میگیرد. اگر Result برابر با false باشد یعنی اینکه کاربر اجازه دسترسی را صادر نکرده است و جهت جلوگیری از اختلال در کار برنامه یا فورس کلوز باید از اجرای خط های بعدی جلوگیری کرد. همچنین این تایید دسترسی کافیست تا یک بار توسط کاربر صادر شود و در دفعه های بعدی که کاربر وارد برنامه می شود بصورت خودکار تشخیص داده میشود که اجازه دسترسی روشن است و دیگر درخواستی مبنی بر اجازه دسترسی ظاهر نمیشود. همچنین اگر اندروید پایین تر از شش باشد دیگر اجازه دسترسی درخواست نخواهد شد. موفق باشید
  16. 5 امتیاز
    سلام وقت بخیر امروز صبح گیت هاب به من ایمیلی به من داد که خلاصش این میشه: گیت هاب در مورد حساب کاربری شما و دیگر افرادی که در ایران زندگی می کنند، با ایالات متحده صحبت داشته و مجوز استفاده توسعه دهندگان ایرانی را از ایشان گرقته. از هم اکنون می‌توانید از فضای ابری خود استفاده کنید..... خب اینم یه خبر خوب.... اطلاعات بیشتر در: https://docs.github.com/en/free-pro-team@latest/github/site-policy/github-and-trade-controls
  17. 5 امتیاز
    سلام، بنده لازم دانستم تا از آقای شاهپیری تشکر و قدردانی ویژه ای داشته باشم. ایشان بدون چشم داشت و با دلسوزی علم و دانش خود را در زمینه برنامه نویسی به اشتراک می گذارند. همچنین کتابخانه های متعددی نیز با قیمت های بسیار ناچیز در انجمن قرار داده اند در حالی که ارزش آن کتابخانه ها چندین برابر قیمت هایشان می باشد. تلاش و کوشش و زحمات آقای شاهپیری در این زمینه بی همتا و ستودنی است. باید بخاطر علمی که در زمینه برنامه نویسی به دست آورده ایم مدیون آقای شاهپیری و دیگر اساتید عزیز باشیم. با تشکر از شما، ارادتمند شما
  18. 5 امتیاز
    مشاهده فایل دریافت کتابخانه PersianGlide با سلام خدمت دوستان عزیز. یکی از موضوعاتی که ضعفش به شدت توی بیسیک احساس میشد نبود کتابخونه لود ایمیج درست درمونه. نگران نباشید ما همیشه یه چی تو چنته داریم کتابخونه گلاید رو که همه میشناسین. نسخه هایی هم ازش رپ شده ولی خیلی قدیمی هست و امکانات کامل رو نداره. بنابراین ما وارد عمل شدیم و آخرین نسخه کتابخونه رو به همراه تمامی امکانات برای دوستان رپ کردیم. کتابخونه تقریبا از تمامی فایل ها از جمله گیف و فایلهای تصویری از url از حافظه از asset و حتی از ریسورس پشتیبانی میکنه. میتونید مستقیم به ایمیج ویو بدین میتونید یه کاستوم تارگت بسازید و عکس لود شده رو هرجایی استفاده کنید. انواع متدهای کش توش قرار داده شده. یکی از قابلیتهای جالب کش اینه که با یک بار لود دیگه نیازی نیست به اینترنت متصل باشید برای لود مجدد. و کلی امکانات جذاب دیگه برید حالشو ببرید. دانلود سورسها. glide_source.zip ارسال کننده محمدرضا شاهپیری ارسال پنجشنبه, 4 دی 1399 دسته کتابخانه ها
  19. 5 امتیاز
    با سلام خدمت همه دوستان.همونجوری که مطلع هستین سیستم عامل اندروید تو نسخه های جدید به خوبی از سنسور اثر انگشت پشتیبانی میکنه. و بسیاری از مواقع لازم میشه که برای برنامه قفل بزاریم.یکی از روشهای قفل گذاری استفاده از اثر انگشت خود گوشی هست.کتابخونه های موجود برای این کار ضعفهایی داشتن و به همین دلیل کتابخونه ای رو برای دوستان آماده کردیم که این ضعفها رو نداشته باشه. امیدواریم از این کتابخونه نهایت استفاده رو ببرید
  20. 5 امتیاز
    ‏‏نرم‌افزار اندرویدی دریای سخن کتابخانه‌ای بزرگ و ارزشمند از اشعار و سخنان شاعران گرانقدر ادب فارسی است که در این مطلب سورس کد آن را با شما عزیزان به اشتراک گذاشته‌ایم. از علاقه مندان نیز درخواست همکای در توسعه هر چه بیشتر این پروژه را داریم. ویژگی‌های سورس کد پروژه اندرویدی دریای سخن کدها کاملاً خوانا هستند زبان برنامه نویسی جاوا و اندکی کاتلین می‌باشد بدون نیاز به دسترسی‌های خاص 90 درصد تصاویر استفاده شده به صورت وکتور هستند کدنویسی براساس آخرین ورژن SDK اندروید استفاده از کتابخانه‌های Androidx استفاده از آخرین ورژن Cradle و اندروید استودیو ویژگی‌های نرم افزار خروجی پروژه دریای سخن دارای 66 مجموعه شعر از 15 شاعر بزرگ به صورت پیشفرض قابلیت دریافت و نصب خودکار صدها مجموعه شعر جدید از مخزن آنلاین نرم‌افزار به صورت رایگان امکان حذف مجموعه اشعار موردنظر دارای جستجوگر پیشرفته: امکان جستجوی کلمه در تمام اشعار و یا یک اشعار یک شاعر خاص امکان ارسال کلمه جهت جستجو در دریای سخن از محیط نرم افزارهای دیگر از طریق اشتراک‌گذاری رابط کاربری زیبا، آسان و به روز قابلیت برگزیدن اشعار دلخواه و دارای لیست گزیده‌ها امکان خوانش(فایل صوتی) اشعار برخی از شاعران مانند حافظ و سعدی تفأل زدن در اشعار شاعران دلخواه دسترسی به آخرین شعری که خوانده‌اید جا به جایی آسان بین اشعار با کشیدن انگشت لمس به چپ یا راست امکان کپی کردن متن شعر به صورت کامل یا قسمت انتخاب شعر آن امکان اشتراک‌گذاری متن شعر مورد نظر برای دوستان و آشنایان امکان درج امضا در انتهای اشعاری که به اشتراک می‌گذارید دارای تنظیماتی نظیر شماره‌گذاری لیست شاعران، شماره‌گذاری مصراعهای شعر، تغییر زبان، تغییر اندازه متن، تغییر محدوده تفأل و افزودن امضا قابلیت تماس با ما دارای راهنما و ... لینک سورس کد پروژه اندرویدی دریای سخن در مخزن گیت هاب برای دسترسی به پروه دریای سخن در گیت‌هاب اینجا کلیک کنید.
  21. 5 امتیاز
    سلام به همه دوستان بالاخره کتابخونه‌ای که خیلی از دوستان درخواست داده بودن، آماده شد ShScrollingLabel خیلی از مواقع برامون پیش میاد که متن یه لیبل، بزرگتر از خود اونه و این باعث بروز خیلی از مشکلات میشه که مهمترینش، از بین رفتن زیبایی رابط کاربری برنامه هست. با این کتابخونه، میشه مشکل رو براحتی حل کرد. کتابخونه ShScrollingLabel، یک کاستوم ویو هست که در اون یه اسکرول ویو قرار داره که ارتفاع اون، بر اساس ارتفاع اتوماتیک تنظیم میشه؛ این ویژگی، یه سری قابلیت ها به ویو اضافه کرده که در ادامه اونا رو بطور کامل بررسی میکنیم: سادگی کار با کتابخونه امکان اضافه کردن ویو از دیزاینر فعال و یا غیر فعال کردن ScrollBar تغییر جهت ScrollBar (چپ و یا راست بودن) تغییر رنگ ScrollBar تغییر سایز و عرض ScrollBar تغییر گردی گوشه های ScrollBar تمام این تغییرات، در دیزاینر قابل تغییر هستن و نیاز به کدنویسی نیست. دارای سه رویداد Click LongClick ScrollChanged دسترسی کامل به لیبل: یعنی براحتی به لیبل داخل اسکرول ویو، دسترسی دارید و میتونید مثل یه لیبل معمولی، از اون استفاده کنید. دسترسی کامل به اسکرول ویو: قابلیت تغییر تمام خصوصیات اسکرول ویو. (از جمله تغییر ارتفاع و یا حتی اضافه کردن ویویی دیگر به اون) اختصاصی انجمن AnswerCenter برای اضافه کردن ویو در دیزاینر، بعد از تیک زدن کتابخونه، از تب AddView، قسمت CustomView، ویوی ShScrollingLabel رو اضافه کنید. کتابخونه و نمونه سورس(رمز answercenter.ir) : ShScrollingLabel.zip ShScrollingLabel_Lib.zip ShScrollingLabel_Lib_v1.2.zip ShScrollingLabel_B4A.zip موفق باشید
  22. 5 امتیاز
    جلسه دوم همونطور که گفته بودم، از این جلسه، وارد کدنویسی برای 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) در جلسات بعد، رسم کردن رو شروع میکنیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
  23. 5 امتیاز
  24. 5 امتیاز
    سلام دوستان همونطور که قول داده بودم، لینک تمامی آموزش‌ها و سورس‌ها رو همینجا قرار میدم. موفق باشید
  25. 5 امتیاز
    برای استفاده از این کتابخونه هم باید سمت سرور و هم سمت بیسیک را آموزش بدهم. فعلا قسمت بیسیک رو آموزش داده و در ادامه سمت سرور را با مثالی آموظش میدهم. مپ دیتا مپ دیتای موجود در این کتابخونه برای ارسال و دریافت اطلاعات با سرور مورد استفاده قرار میگیرد در ابتدا به متغیر ساخته شده با مپ دیتا نام سابی که قرار است اطلاعات به آن برگشت داده شود نوشته خواهد شد و در ادامه اطلاعات را همانند مپ های مرسوم بیسیک به صورت کلید/مقدار وارد نمایید. Dim ird As irMapData ird.init("net_test") ird.put("msg","test") ماژول کلوسیوس این ماژول اصلی این کتابخانه می باشد.و دارای ساب های زیر میباشد init مقدار دهی اولیه متغیر مربوط به ماژولی که ساب های برگشتی آن باید اجرا شود را وارد نمایید connect اتصال به سرور - آدرس سرور را وارد نمایید create ساخت یک کلن جدید join اتصال به یک کلن joinOrCreate اتصال و یا ساخت کلن (اگر کلنی خالی نبود یک جدید بساز) joinById اتصال به کلنی با آیدی خاص reJoin اتصال به کلن قبلی در موارد قطع و وصلی اینترنت کاربرد دارد getRoomID گرفتن آیدی یک کلن getRoomSession گرفتن نشس یک کلن close بستن اتصال send ارسال اطلاعات به سرور مثال: Sub Globals Dim ir As irColyseus End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("l") ir.init(Me) End Sub Sub Button1_Click ir.connect("ws://192.168.1.100:3333") ir.joinOrCreate("exam",Null) End Sub Sub Net_Join(str As String) Log(str) End Sub Sub Button2_Click Dim ird As irMapData ird.init("net_test") ird.put("msg","amin") ir.send(ird) End Sub Sub net_test(ird As irMapData) Log(ird.get("msg")) ToastMessageShow(ird.get("msg"),False) End Sub «موفق باشید.»
  26. 5 امتیاز
    سلام خدمت همه‌ی دوستان من همیشه دلم می‌خواست عکس‌هایی که تو برنامم میذارم، قابلیت زوم داشته باشه؛ خیلی از کتابخونه‌هایی هم که برای این کار رپ شده بودن چیزی نبود که می‌خواستم. برای همین بعد از تحقیق زیاد، تونستم کتابخونه‌ای در این زمینه رپ کنم که عکس‌ها رو از فایل گوشی میگیره و تو وب‌ویو نشون میده؛ گفتم اونو تو انجمن بذارم تا بقیه هم استفاده کنن. امیدوارم برا همگی مفید باشه لینک دانلود
  27. 4 امتیاز
    سلام و عرض احترام، پس از دو روز تلاش بلاخره کتابخانه Custom_Dialog رو آماده کردم. حتما براتون پیش اومده که بخواهید Msgbox2 خودتون رو سفارشی کنید و از ظاهر بد و سیاه(یا سفید)رنگش خلاص بشیدو خودتون یک جعبه پیغام سفارشی ایجاد کنید...پس این کتابخونه برای شماست!!! استفاده از این کتابخونه بسیار آسان هست. ویژگی ها: -امکان تعیین رنگ پس زمینه دیالوگ -امکان تعیین رنگ متن دیالوگ -امکان تعیین رنگ دکمه های دیالوگ -امکان تعیین رنگ متن دکمه دیالوگ -فیت شدن خودکار متن دیالوگ با اندازه دیالوگ(دیگر متن از کادر بیرون نمیزنه و یا خیلی کوچک نمیشه(یعنی با سایز صفحه نمایش دستگاه های مختلف متناسب است)) -امکان گذاشتن آیکون برای دیالوگ -امکان محو کردن دیالوگ -امکان تعریف رویداد کلیک برای دکمه های دیالوگ -قابلیت استفاده بصورت بسیار راحت و... نحوه استفاده: هنگامی که فایل رو دانلود کردید دوتا فایل xml وjar رو توی پوشه librarys بیسیک فورتون کپی پیست کنید. همچنین داخل فایل zip سورس نمونه نیز قرار دارد که میتوانید براساس اون پیاده کنید. علاوه براین ها متدهای کتابخانه دارای توضیحات فارسی هستند. تصویری از دیالوگ ساخته شده با این کتابخانه: رمز فایل: Answercenter.ir هزینه استفاده: سه صلوات لینک دانلود کتابخانه+سورس نمونه: https://s16.picofile.com/file/8425789576/Custom_Dialog.zip.html موفق باشید
  28. 4 امتیاز
    باعرض سلام و ادب خدمت همه دوستان عزیز انجمن خوب Answercenter، بنده اگر خاطرتون باشه چندی پیش یک تاپیک زده بودم: خیلی مشکل بد و آزار دهنده ای بود و موجب شده بود تا با ترس و استرس برنامه هامو بنویسم که نکنه آخر سر ویروسی شناسایی بشه و زحماتم به باد بره پس از تقریبا 10 روز بررسی تونستم این مشکل بزرگ و نگران کننده رو حل کنم به دلیل اهمیت زیاد موضوع با اجازه بزرگان انجمن و بقیه دوستان یک تاپیک ایجاد کردم تا تجربه مو با شماها به اشتراک بزارم خب واقعیتش توی انجمن مرجع پرسیدم کسی پاسخ نداد و اینجا هم دوتا از دوستان عزیز(آقای شاهپیری و معینی) تلاش کردند تا مشکل رو حل کنند ولی تاثیری نداشت. از همینجا از شون هم قدردانی میکنم. ده روز هست که خودم آزمایش میکردم تا در نهایت مشکل رو حل کنم و به نتیجه هم رسیدم(جوینده یابنده است) خب زیاد حرف میزنم هاا بریم سر اصل مطلب من این کارهارو کردم برنامه رو کامپایل کردم با نهایت تعجب و در قله نومیدی دیدم که آنتی ویروس مکافی دیگه گیر نداد: 1-حتما نام برنامه رو عوض کنید. 2-حتما پکیج نیم رو عوض کنید و به فرم استاندارد بنویسید: (نام شرکت یا توسعه دهنده).(نام برنامه).(نام دامنه کشور(ir) یا بین المللی(com)) 3-سرویس استارتر که پیشفرض توی پروژه وجود داره رو remove کنید(روی سرویس starter کلیک کنید. از سربرگ ابزار ها گزینه project رو کلیک و سپس روی Remove Module کلیک و در نهایت گزینهyes رو بزنید جهت اطمینان نیز به پوشه پروژه خود مراجعه و فایل starter.bas رو حذف کنید. نمیدونم واقعا بخاطر چی این آنتی ویروس مکافی به سرویس استارتر گیر میده (البته شاید برای بعضی پروژه هاهم گیر نده ولی من حذف کردم درست شد) من میگم شاید میگه این سرویس توی پس زمینه کار کنه و کارهای خرابکارانه روی گوشی کاربر انجام بده. 4-حتما IncludeTitle رو روی false بزارید تا برنامه کاربردی تر نشون داده باشه. اگه روی true باشه به نظرم آنتی ویروس میگه این یک برنامه الکی و بدافزار هست که به جزئیاتی مثل IncludeTitle توجه نکرده است. 5- حتما پروژه تون رو پرمحتوا کنید به دلیل اینکه شاید آنتی ویروس میگه که این برنامه که خالیه و کاربردی نداره برای این نصب شده که برای یک لحظه اطلاعات کاربر رو به سرقت ببره در حالی که اینطور نیست. 6-حتما از یک کلید(key store) معتبر استفاده کنید که مورد تایید گوگل هست. البته این رو بنده امتحان کردم ولی تاثیری نداشت و همچنان برنامه ویروسی شناخته می شد اما محض احتیاط میگم. خلاصه بنده وقتی یک پروئژه خالی رو با نام و پکیج نیم پیشفرض که دارای سرویس استارتر نیز بود و IncludeTitle هم true بود کامپایل میکردم این آنتی ویروس مکافی بهم گیر میداد و موجب نگرانی بنده و برخی از دوستان شده بود که با این راه حل های بالا حل کردم. امیدوارم که هرگز چنین مشکلی براتون پیش نیاد ولی اگر پیش اومده و دارید الان این تاپیک رو مطالعه می کنید راه حل های بالا رو امتحان کنید.99 درصد حل خواهد شد و اگر حل شد برام یک صلوات بفرستید. موفق و پیروز باشید
  29. 4 امتیاز
    با این قطعه کد میتونین رنگ Scrollbar رو تغییر بدید حتما تو پروژه هاتون استفاده کنید خوشگیل میشه Sub SetScrollbarColor(sv As ScrollView, clr As Int) Dim r As Reflector r.Target = sv r.Target = r.GetField("mScrollCache") r.Target = r.GetField("scrollBar") Dim cd As ColorDrawable cd.Initialize(clr, 5dip) r.RunMethod4("setVerticalThumbDrawable", Array(cd), Array As String("android.graphics.drawable.Drawable")) End Sub کافیه ScrollView رو بهش پاس بدین و یک رنگ متریال ناناز هم بهش بدید.
  30. 4 امتیاز
    سلام، احتمالا با دیدن عنوان این تاپیک به یاد فرمت داده جیسون بیفتید که مزیت های بسیاری دارد. اما من در این تاپیک آموزشی، قصد آموزش جیسون رو ندارم بلکه میخواهم آموزش بدم تا چطوری داده هایی مثل متن ها و عدد رو توی یک فایل txt قرار بدیم و همچنین اونارو بخونیم. درک بهتر: فرض کنید ما چهارتا عدد داریم:1001و1002و1003و1004 اگر از دیتابیس استفاده نکنیم مجبوریم برای ذخیره هر کدام از این اعداد از دستور writestring فایل txt بسازیم و در نتیجه 4 تا فایل txt خواهیم داشت که زیاد جالب نیست. الان ما میخواهیم همه این اعداد را فقط توی یک فایل txt ذخیره کنیم. به این صورت: 1001,1002,1003,1004, به عنوان مثال ما در این آموزش فرض می کنیم 4 تا ادیت تکست داریم که کاربر بایستی در هر کدام از آن ها عددی وارد کرده و سپس روی دکمه کلیک کند و این اعداد کاربر داخل یک فایل txt ذخیره گردد و بعدا در صورت نیاز این اعداد تجزیه شده و دوباره بصورت جداگانه به نمایش در آیند. Dim a As string=edittext1.text Dim b As string=edittext2.text Dim c As string=edittext3.text Dim d As string=edittext4.text Dim total_num As string=a&","&b&","&c&","&d&"," File.WriteString(File.DirInternal,"my_numbers.txt",total_num) توضیح کدهی بالا: چهارتا متغیر تعریف کردیم از نوع استرینک تا متن، عدد و هر رشته ای رو که کاربر توی ادیت تکست وارد کرد بصورت موقت ذخیره کنه. یک متغیر دیگه به نام total_num تعریف می کنیم تا ورودی های ادیت تکست رو به وسیله"," از هم جدا کنه. نکته بسیار مهم: باید بعد از آخرین ورودی(در اینجا ورودی edittext4) هم دارای کاراکتر"," باشه. و در آخر هم این ورودی ها کنار هم توی یک فایل txt و در حافظه dirinteral برنامه ذخیره میشه. اما اگر بخواهیم تا این ورودی های کاربر رو در صورت لزوم نمایش بدیم باید اینگونه عمل کنیم: این sub زیر رو بین دوتا sub دیگه درج کنید. به کامنت درج شده درون این sub توجه گردد. Sub checkints(txt As String) Dim i1 As String=0 Dim i2 As String For i = 0 To txt.Length Try If txt.CharAt(i) = "," Then i2 = i If txt.SubString2(i1,i2) <> "" Then Dim mystring As String=(txt.SubString2(i1,i2)) 'اینجا کدی رو که میخواهیم پس از تجزیه اجرا بشه می نویسیم مثلا من میخوام برای هر کدام از ورودی هایی که تجزیه میشود یک جعبه پیغام نمایش داده شود. msgbox(mystring,"ورودی تجزیه شده") End If Try i1=i+1 Catch End Try End If Catch End Try Next End Sub حالا هرجا که میخواهیم میتوانیم با استفاده از کد زیر به تمامی ورودی های کاربر به صورت جداگانه دسترسی داشته باشیم: checkints(File.readString(File.DirInternal,"my_numbers.txt")) نکته: اگر من قطعه کد بالارو مثلا توی رویداد یک دکمه به کار بگیرم به محض کلیک روی دکمه 4 تا msgbox به ترتیب نمایش داده خواهد شد که هر کدام به ترتیب ورودی هایی را نمایش خواهد داد که کاربر قبلا توی ادیت تکست وارد کرده بود. اگر شما میخواهید به جای msgbox کار دیگری انجام دهید، مثلا ورودی ها را توی یک لیبل بچینیدیا... باید توی sub که بالا درج کردم پایین اون کامنت دستور مدنظر رو بنویسید. همچنین شما میتوانید هر تعداد ورودی را بین "," قرار دهید و به صورت دلخواهی می باشد و ما در اینجا 4 ورودی را مثال زدیم. موفق و کامروا باشید
  31. 4 امتیاز
    سلام و درود خدمت شما دوست گرامی. ممنون بابت تاپیک پرمهرتون. انجام وظیفه بوده قطعا. انشالا عمری باشه بیشتر از اینها در خدمت باشیم.
  32. 4 امتیاز
    مشاهده فایل دریافت کتابخانه PersianAutoSizeLabel با سلام خدمت همه دوستان. یکی از مشکلات اساسی دوستانی که با بیسیک کار میکنن مشکل سایز بندی لیبل هست. واسه همین تصمیم گرفتیم یه کتابخونه استاندارد و درست درمون برای دوستان آماده کنیم. این کتابخونه علاوه بر سایز بندی خودکار قابلیت اسکرول رو هم داره یعنی اگه متن از ارتفاع لیبل بلندتر شه اسکرول فعال میشه و خیلی از امکانات دیگه. سورس کتابخونه هم پیوست شده.امیدوارم مورد استفاده قرار بگیره دانلود سورس ارسال کننده محمدرضا شاهپیری ارسال جمعه, 21 آذر 1399 دسته کتابخانه ها  
  33. 4 امتیاز
    سلام خدمت شما دوست عزیز این چیزی که شما فرمودید قبلا سورسش آماده شده: قبل از هر چیز به نظرم دیتابیس رو کامل یاد بگیرید.
  34. 4 امتیاز
    کتابخانه ShSlideToAct (رپ شده از کاتلین) سلام به همه دوستان با یه کتابخونه فوق العاده دیگه درخدمتتون هستم. این کتابخونه، رپ شده این پروژه گیت‌هاب به زبان کاتلین هست.... هزینه دریافت کتابخونه، 5 صلوات برای سلامتی امام عصر (عج) قابلیت های کتابخونه: قابلیت افزودن ویو از طریق دیزاینر تغییر رنگ متن تغییر سایز متن تغییر فونت متن قفل کردن اسلایدر ساپورت کردن RTL تغییر گردی گوشه ها تغییر اندازه دکمه تغییر رنگ پس زمینه ویو تغییر رنگ دکمه تغییر مدت زمان انیمیشن قابلیت افزودن حالت Vibrate تغییر آیکون تغییر رنگ آیکون تغییر آیکون پایانی تغییر رنگ آیکون پایانی ریست کردن اسلایدر با انیمیشن دارای 6 رویداد: CompleteAnimationStarte CompleteAnimationEnded ResetAnimationStarted ResetAnimationEnded SlideComplete SlideFailed موفق باشید ارسال کننده Salar82 ارسال جمعه, 14 آذر 1399 دسته کتابخانه ها
  35. 4 امتیاز
    جلسه چهارم تو این جلسه، بیشتر با متدهای این کتابخونه آشنا میشیم: 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 در جلسه بعد هم، رویدادهای این کتابخونه رو بررسی میکنیم موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
  36. 4 امتیاز
    بسم الله الرحمن الرحیم سلام و درود خدمت همه‌ی اعضای انجمن انسرسنتر B4X چن وقتی هست از یه سری کتابخونه ها رونمایی کرده؛ مثل B4XTurtle و B4XPages و .... که فوق العاده کاربردی هستن. همونطور که قولش رو داده بودم، قرار شد یه دوره کامل و رایگان آموزش کار با این کتابخونه های جامع و کامل رو قرار بدم که خدا رو شکر آموزش B4XPages به اتمام رسید و خوشبحتانه با استقبال زیادی روبرو شد. ان‌شاءالله بزودی دوره B4XTurtle رو شروع می‌کنیم منتها قبل از شروع آموزش، یه سری نکات هست که باید خدمت همگی عرض کنم: 1- برای اینکه آموزشها پراکنده نشن، لطفا تو این پست، چیزی نفرستین و اگر موردی، سوالی و یا مشکلی بود، یه پست جدید ایجاد کنید. 2- آموزشها تا اطلاع ثانویه بصورت چند روز یکبار قرار داده میشن (بدلیل کمبود وقت بنده) اما هر زمان که وقت اضاف آوردم، حتما سعی میکنم جلسه بعد رو آماده کنم و بفرستم. (چون خودم هم باید مطالعه در این مورد داشته باشم ) 3- آموزش های مقدماتی همینجا قرار داده میشن و دیگر سورس ها و آموزش های مربوطه، تو یه پست جدید میذارم تا مشکلات مربوط به اونا، همونجا مطرح بشن. 4- البته لینک آموزشهای دیگه هم، اینجا قرار داده میشه. پس تمامی آموزشهای مربوط به B4XTurtle، همینجا در دسترس هستن. 5- آموزشها، کاملا مطابق با سایت مرجع پیش میره. پس نگران ناقص بودن دوره نباشید 6- مهم ترین نکته‌ای که مد نظر بنده هست و بهمین خاطر آموزش رو رایگان گذاشتم، اینه: هزینه هر آموزش، یه صلوات برای سلامتی و ظهور امام عصر (عج) هست .... ان شاءالله تا چن روز آینده، دوره آموزشی رو شروع می‌کنیم. امیدوارم در تمام مراحل زندگی موفق باشید.
  37. 4 امتیاز
    جلسه سوم در جلسه قبل، بطور کامل با تغییر خصوصیات قلم آشنا شدیم، تو این جلسه رسم رو شروع می‌کنیم... پنج متد بسیار مهم در رسم با 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، قرار داده میشه که میتونید استفاده کنید در جلسات آینده، بیشتر این کتابخونه رو بررسی میکنیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
  38. 4 امتیاز
    جلسه اول با نام و یاد خدا جلسه اول رو شروع میکنیم. قبل از اینکه مبحث رو بطور جدی شروع کنیم، یه مقدمه درمورد B4XTurtle بگم که اصلا چی هست و چه هدفی داره.... اول یه پیش نمایشی با هم ببینیم: به گفته سایت مرجع: B4XTurtle، کتابخونه ای هست که از زبان برنامه نویسی Logo Classic گرفته شده. کتابخونه جزو کتابخونه های داخلی هست کتابخانه، Cross-Platform هست. یعنی براحتی می‌تونید در B4i , B4J , B4A و یا حتی در B4XPages استفاده کنید. هدف این کتابخونه، کمک به آموزش برنامه نویسی با یه طراح بصری (Turtle) به دانش آموزان هست. کار با کتابخونه خییییلی سادست. برای کار با کتابخونه در بیشتر موارد، از علم شیرین هندسه باید استفاده کنیم که ان‌شاءالله در جلسات آینده، کامل بررسی می‌کنیم. دقت داشیته باشید که از نسخه B4A - 10 و B4J-8.5 و B4i-6.8 یا نسخه بالاتر استفاده کنید. براحتی میشه با B4XTurtle، تصاویر زیبایی مثل زیر خلق کرد: دیگه مقدمه ای نمونده و ان‌شاءالله از جلسه آینده، وارد کد نویسی میشیم موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
  39. 4 امتیاز
  40. 4 امتیاز
  41. 4 امتیاز
  42. 4 امتیاز
  43. 4 امتیاز
    جلسه پنجم (آخر) در جلسه قبل، نحوه دسترسی به ویوها و متغیرها در دیگر پیج ها رو به طور کامل بررسی کردیم. تو این جلسه هم یه سری توضیحات جزئی میدم و با 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 جلسه به پایان رسید... موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
  44. 4 امتیاز
    جلسه چهارم _ بخش دوم بسسسسیار مهههههم قبل از اینکه این جلسه رو شروع کنم، عذر خواهی من رو بابت تاخیر در این جلسه بپذیرید. یکی از دلایل تاخیر، سوالی بود که در سایت مرجع پرسیده بودم؛ سوال مربوط به جابجایی ویوها بین صفحات 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، آشنا میشیم. موفق باشید اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم.
  45. 4 امتیاز
    مشاهده فایل irColyseus کتابخانه کلوسیوس کتابخانه ای کاربردی در جهت آنلاین نمودن بازی ها و یا ساخت اپهای آنلاین می باشد. البته در اصل این کتابخانه مخصوص بازی های چند نفره نوبتی مانند شطرنج می باشد. نسخه فعلی فقط با نسخه 0.11 کلوسیوس هماهنگ می باشد. کتابخانه ای که یک سال پیش آن را رپ نموده و چندین بار از آن استفاده نموده ام آموزش استفاده در ادامه توضیح داده خواهد شد. منابع: سایت اصلی کلوسیوس ارسال کننده امین مهدی نژاد ارسال پنجشنبه, 24 مهر 1399 دسته کتابخانه ها  
  46. 4 امتیاز
    irGpsDetector مشاهده فایل کتابخانه ای برای روشن کردن GPS منبع:https://github.com/Pulimet/GpsDetector-Library ارسال کننده امین مهدی نژاد ارسال پنجشنبه, 13 شهریور 1399 دسته کتابخانه ها  
  47. 4 امتیاز
    سلام به همه کتابخونه ای که براتون آماده کردم، همون طور که از اسمش پیداست، با انیمیشن به یه ویو، بردر میده و رسم میکنه. پیشنمایش: برای انجام اینکار کافیه تیک کتابخونه رو بزنید و برای اولین بار، اون رو Initialize کنید. حالا هرجا که خواستین انیمیشن رو اجرا کنید، کد زیر رو بنویسید: SetAnimateBorder(View1, Duration, Color) آرگومان اول، ویوی مدنظرتون رو بدید. آرگومان دوم مدت زمان به ms هست. آرگومان سوم هم رنگ بردر هست. کتابخونه: ShAnimatedBorder.rar موفق باشید
  48. 4 امتیاز
  49. 4 امتیاز
    مشاهده فایل PersianSpinner سلام خدمت دوستان عزیز. یه کتابخونه فوق العاده کاربردی و زیبا رو براتون آماده کردیم. اسپینر پیشفرض بیسیک خیلی قابلیت شخصی سازی نداره متاسفانه. برای همین یه اسپینر کاستوم شده رو براتون آماده کردیم که میتونین هر شکلی که خواستین اونو دربیارین. امکانتی شامل: 1: تغییر فونت، رنگ، سایز نوشته ها. 2: اضافه کردن آیکن کنار آیتمها 3: امکان راستچین یا چپ پین کردن و بسیاری امکانات دیگه. انشالا مورد استفاده قرار بگیره. دانلود سورس کار با کتابخانه PersianSpinnerSource.zip پیشنمایش ارسال کننده محمدرضا شاهپیری ارسال جمعه, 16 اسفند 1398 دسته کتابخانه ها  
  50. 4 امتیاز
    خب از خودم شروع می کنم اول اینکه توی این دوران دارم چیزای جدید رو یاد میگیرم و سعی می کنم بروز تر بشم.مثلا یکیش یادگیری فریمورک لاراول. توی این دوره خیلی از کسب و کار های انلاین ب ذهنمون اومد، چون تا توی موقعیت قرار نگیری خلاقیت زیادی نمیشه بکار برد. الان، بُرد واسه اونایی هستش که کسب و کار انلاین کم رونقی داشتن و الان جون میگیره. اینکه توی این دوران با خانوادم بیشتر آشنا شدم یاد گرفتیم که سلامتی چه نعمت بزرگیه، در کنار هم بودن، صله رحم رو واسمون پر رنگ کرد. فهمیدیم یه جامعه مث یه زنجیر هستش، هر اتفاقی واسه کسی بیوفته چه مستقیم چه غیر مستقیم میتونه توی سرنوشت ما تاثیر گذار باشه. یادم میاد زمانیکه دانش آموز بودم، تو زمستون شده دو هفته بارون و سرمای استخون سوز بوده ولی یه روز تعطیل نشدیم، انفولانزای خوکی مد بود و تعطیلی نداشتم الان علاوه بر پنج شنبه ها کلا تعطیلن مجازی هم این موجودات چیزی یاد نمیگیرن خلاصه این به نفع جامعس ولی خواستم بگم ماهم کم بدبختی نکشیدیم زمانی که محصل بودیم.زیر بدترین حوادث بودیم ولی پایدار و مقاوم با کمک هم ان شاء الله بتونیم #کرونا رو شکست بدیم. #به_یاری_خدا_کرونا_را_شکست_میدهیم
×
×
  • جدید...