رفتن به مطلب

آموزش کامل کار با B4XPages *بسیار کاربردی و مهم*


Salar82

ارسال‌های توصیه شده

در در 24 مهر 1399 در 20:37، Salar82 گفته است :

لینک آموزشهای دیگه هم، اینجا قرار داده میشه. پس تمامی آموزشهای مربوط به B4XPages، همینجا در دسترس هستن.

سلام دوستان

همونطور که قول داده بودم، لینک تمامی آموزش‌ها و سورس‌ها رو همینجا قرار میدم.

 

موفق باشید :53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

جلسه سوم _ قسمت 2

در در 29 مهر 1399 در 00:00، Salar82 گفته است :

هزینه هر آموزش، یه صلوات برای سلامتی و ظهور امام عصر (عج) هست ....

سلام دوستان

یسری نکات برای استفاده از خاصیت 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 آشنا میشیم.

 

موفق باشید

اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم. :) 

:53::53::53::53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 10 ساعت قبل، Salar82 گفته است :

هر تاپیکی از بنده که دارای عبارت *B4X* و یا *B4XPages* بود، میتونید  به عنوان یک کتابخونه، در B4XPages و یا دیگر پروژه های B4A، B4i و یا B4J استفاده کنید

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

به امید پیشرفت روز افزون انجمن...

لینک ارسال
به اشتراک گذاری در سایت های دیگر

جلسه چهارم _ بخش اول

 

قبل از اینکه وارد کار با ویوها و نحوه دسترسی بهشون در دیگر پیج ها بشیم، بهتره یه آشنایی با XUIViews داشته باشین:

 

بخش بعد، با خصوصیات منحصر به فرد B4XPages، آشنا میشیم

 

موفق باشید

اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم. :) 

:53::53::53::53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

جلسه چهارم _ بخش دوم

بسسسسیار مهههههم

در در 30 مهر 1399 در 12:05، Salar82 گفته است :

هزینه هر آموزش، یه صلوات برای سلامتی و ظهور امام عصر (عج) هست ....

 

قبل از اینکه این جلسه رو شروع کنم، عذر خواهی من رو بابت تاخیر در این جلسه بپذیرید. یکی از دلایل تاخیر، سوالی بود که در سایت مرجع پرسیده بودم؛ سوال مربوط به جابجایی ویوها بین صفحات 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"

با کد بالا، براحتی میتونیم متن یک ویو رو بگیریم و یا حتی اون رو تغییر بدیم.

 

  • جابجایی ویوها بین پیج‌ها:

بعضی وقتها، لازمه خود ویو رو بین پیج‌ها جابجا کنیم(دقت کنید که در اکتیویتی ها، قابلیت تغییر مشخصات یک ویو از دیگر اکتیویتی‌ به هیچ وجه امکان پذیر نیست. چه برسه به اینکه بخوایم ویو رو جابحا کنیم :)) به تصویر زیر دقت کنید:

nVw98yQ97c.gif

در این تصویر، خطی که کشیده میشه، به پیچ قبلش هم منتقل میشه که این واقعا فوق‌العادست....

 

برای جابجا کردن یک ویو، کافیه از کد زیر استفاده کنیم:

	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، آشنا میشیم.

موفق باشید

اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم. :) 

:53::53::53::53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

جلسه پنجم (آخر)

 

در جلسه قبل، نحوه دسترسی به ویوها و متغیرها در دیگر پیج ها رو به طور کامل بررسی کردیم. تو این جلسه هم یه سری توضیحات جزئی میدم و با Eventهای B4XPages آشنا میشیم...

 

  • اگر میخواین با فراخواندن پیجی دیگر، حتما رویداد Create اجرا بشه، از کد زیر استفاده کنید:
B4XPages.AddPageAndCreate("Page_id")

 

  • نحوه تغییر دادن تایتل هر پیج:
B4XPages.SetTitle(Me, "Some Title")

 

  • دقت کنید که در پیج های دوم به بعد، به غیر از B4XMainPage، یه علامت کنار تایتل میاد که با زدن روی اون، به پیج قبلی بر میگرده:

B4A_VnhdhlBs6s.png

نکته مهم: برای مثال برای رفتن از پیج لاگین به صفحه اصلی، از کد زیر استفاده میکنیم:

B4XPages.ShowPageAndRemovePreviousPages("MainPage")

با نوشتن این کد، همونطور که قبلا هم توضیح دادم، پیج قبلی(لاگین) حذف میشه و دیگه اون علامت، نمایش داده نمیشه. درضمن با زدن دکمه بک هم، دیگه به پیج لاگین برنمیگرده(چون دیگه اون پیج وجود نداره)

 

  • رویدادهای B4XPages (دقت کنید که EventName برای این رویدادها، همواره B4XPages هست):
  1. B4XPage_Created 
  2. B4XPage_Appear 
  3. B4XPage_Disappear 
  4. B4XPage_Background 
  5. B4XPage_Foreground 
  6. B4XPage_Resize (فقط در B4i و B4J)
  7. B4XPage_CloseRequest (فقط در B4J و B4A)
  8. B4XPage_MenuClick 
  9. B4XPage_KeyboardStateChanged (فقط در B4i)
  10. B4XPage_IconifiedChanged (فقط در B4J)
  11. 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 کار کنید و لذت ببرید.:give_rose:

این تاپیک دقیقا مطابق با تاپیکی آموزشی B4XPages در سایت مرجع بود که کامل اینجا قرار دادم. لینک پست در سایت مرجع:

https://www.b4x.com/android/forum/threads/b4x-b4xpages-cross-platform-and-simple-framework-for-managing-multiple-pages.118901/

 

نکات اصلی درمورد B4XPages تو این تاپیک گفته و بررسی شد. اما هنوز پست ها و سورس کدهایی در این مورد وجود داره که ان‌شاءالله در آینده قرار میدم.

آموزش در این پست طی 7 جلسه به پایان رسید...

 

موفق باشید

اگر نقدی، مشکلی و یا ایرادی از بنده هست، تو خصوصی میتونید پیام بدید. حتما استقبال میکنم. :) 

:53::53::53::53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سورس صفحه اسپلش:

 

برای دسترسی به تمامی پستها در مورد B4XPages، کافیه سرچ کنید:

B4XPages

البته تمامی پست ها، سورس ها و نمونه کدها، همینجا قرار میدم :53:

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

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

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
  • اضافه کردن...