رفتن به مطلب

ساخت مولتی پنل در B4A V6


امین مهدی نژاد

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

قابلیت هایی که در بی فور نسخه 6 اضافه شده.سبب راحت تر شدن و تمیزتر شدن کدها میشه

بخصوص افزوده شدن ماژول کاستوم ویو .

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

مثال پایه ما در آموزش هم همون مثال آقا آرتا است که ما اون رو با استانداردهای بی فور 6 ایجاد می کنیم.

نحوه ساخت:

ابتدا یک ماژول کاستوم ویو با محتوای زیر ایجاد می کنیم.

#Event: Click2 (Value As Int)
#Event: mItemBtnClick (Value As Int)
#DesignerProperty: Key: BooleanExample, DisplayName: Boolean Example, FieldType: Boolean, DefaultValue: True, Description: Example of a boolean property.
#DesignerProperty: Key: IntExample, DisplayName: Int Example, FieldType: Int, DefaultValue: 10, MinRange: 0, MaxRange: 100, Description: Note that MinRange and MaxRange are optional.
#DesignerProperty: Key: StringWithListExample, DisplayName: String With List, FieldType: String, DefaultValue: Sunday, List: Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday
#DesignerProperty: Key: StringExample, DisplayName: String Example, FieldType: String, DefaultValue: Text
#DesignerProperty: Key: ColorExample, DisplayName: Color Example, FieldType: Color, DefaultValue: 0xFFCFDCDC, Description: You can use the built-in color picker to find the color values.
#DesignerProperty: Key: DefaultColorExample, DisplayName: Default Color Example, FieldType: Color, DefaultValue: Null, Description: Setting the default value to Null means that a nullable field will be displayed.
Sub Class_Globals
	Private EventName As String 'ignore
	Private CallBack As Object 'ignore
	Private mBase As Panel
    Private DefaultColorConstant As Int = -984833 'ignore
	Public chk As CheckBox
	Private btn As Button
	Private pnl As Panel
	Private idme As Int	
End Sub

Public Sub Initialize (vCallback As Object, vEventName As String)
	EventName = vEventName
	CallBack = vCallback
End Sub

Public Sub DesignerCreateView (id As Int)
	idme=id
	mBase.Initialize("mBase")
    mBase.LoadLayout("item")
End Sub

Public Sub GetBase As Panel
	Return mBase
End Sub

Sub chk_CheckedChange(Checked As Boolean)
	
End Sub

Sub btn_Click
   CallSub2(CallBack, EventName & "_" & "mItemBtnClick",idme)	
End Sub

Sub mBase_Click
   CallSub2(CallBack, EventName & "_" & "Click",idme)	
End Sub

در ماژول اکتیویتی هم کد زیر رو قرار میدیم

Sub Process_Globals
	Dim MyBank As SQL
End Sub
'===========================================
Sub Globals
	Dim GetTag As Object
	Dim offsetY As Int = 1%y
	Private sv As ScrollView
End Sub
'===========================================
Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("scroll")
	
	If File.Exists(File.DirInternal,"eventdb.db") = False Then
	  File.Copy(File.DirAssets,"eventdb.db",File.DirInternal,"eventdb.db")
	 End If
	 
	 If MyBank.IsInitialized = False Then
	  MyBank.Initialize(File.DirInternal,"eventdb.db",False)
	 End If
	 LoadData
End Sub
'===========================================
Sub LoadData
	Dim Cr As Cursor
	Cr = MyBank.ExecQuery("SELECT * FROM Dynamic")
	For i = 0 To Cr.RowCount - 1
		Cr.Position = i
		Dim itm As mItem
		itm.Initialize(Me,"itm")
		itm.DesignerCreateView(Cr.GetInt("id"))
  		sv.Panel.AddView(itm.GetBase,1%x,offsetY,99%x,100%y)
  		offsetY = offsetY + 20%y
	Next
	Cr.Close
	sv.Panel.Height = offsetY
End Sub
Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub

Sub itm_Click(id As Int)
	Dim itm As mItem=Sender	
	Dim Cur As Cursor
	Cur = MyBank.ExecQuery("SELECT * FROM Dynamic WHERE id="&id)
	Cur.Position = 0
	itm.chk.Checked = Not(itm.chk.Checked)
End Sub

Sub itm_mItemBtnClick(id As Int)
	Dim itm As mItem=Sender
	itm.chk.Checked = Not(itm.chk.Checked)
End Sub

توضیحات:

ما در اکتیویتی و در حلقه For به صورت زیر آیتم ها را بر اساس کاستوم ویویی که ساختیم ایجاد کردیم

		Dim itm As mItem
		itm.Initialize(Me,"itm")
		itm.DesignerCreateView(Cr.GetInt("id"))
  		sv.Panel.AddView(itm.GetBase,1%x,offsetY,99%x,100%y)

و مقدار id رو از دیتابیس به کاستوم ویو ارسال می کنیم.

خب در قسمت رویداد ها به دو طریق اطلاعات رو بین هر آیتم و رویداد مورد نظر ارسال کردیم تا از هر روش مناسب تر دیدید استفاده کنید.

روش اول استفاده از آرگومان ها بوده است

ما ابتدا رویداد ها رو به همراه آرگومان های اونها مشخص کردیم که در اینجا فقط id به این روش ارسال میشه پس داریم

#Event: Click2 (Value As Int)
#Event: mItemBtnClick (Value As Int)

و بدنه رویداد ها هم که اینه

Sub btn_Click
   CallSub2(CallBack, EventName & "_" & "mItemBtnClick",idme)	
End Sub

Sub mBase_Click
   CallSub2(CallBack, EventName & "_" & "Click",idme)	
End Sub

در اکتیویتی برای گرفتن id دیگه نیاز به تگ و سندر نداریم

Sub itm_Click(id As Int)	
	Dim Cur As Cursor
	Cur = MyBank.ExecQuery("SELECT * FROM Dynamic WHERE id="&id)
	Cur.Position = 0
End Sub

روش دوم  استفاده از متغیرهای عمومی می باشه. که در اینجا CheckBox به این روش ارسال شده است

	Public chk As CheckBox

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

	Dim itm As mItem=Sender
	itm.chk.Checked = Not(itm.chk.Checked)

این اولین آموزش من بود. اگه یه خورده بد توضیح دادم. نادیده بگیرید.:cheshmak:

مثالش رو پیوست کردم.

«موفق باشید.»

 

 

 

MultiPanel&CustomView.rar

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

  • 4 هفته بعد...
در 2 ساعت قبل، berayan گفته است :

برای ادیت تکست هم توضیح دهید

کد کاستوم ویو:

Sub Class_Globals
	Private EventName As String 'ignore
	Private CallBack As Object 'ignore
	Private mBase As Panel
	Private Label1 As Label
	Private Label2 As Label
	Private Label3 As Label
	Private EditText1 As EditText
End Sub

Public Sub Initialize (vCallback As Object, vEventName As String)
	EventName = vEventName
	CallBack = vCallback
End Sub

Public Sub DesignerCreateView ()
	mBase.Initialize("mBase")
    mBase.LoadLayout("item")
End Sub

Public Sub GetBase As Panel
	Return mBase
End Sub

Sub EditText1_TextChanged (Old As String, New As String)
	If Regex.IsMatch("[0-9]+",New) Then
		Label1.Text=New
	Else
		Label1.Text=-1
	End If
End Sub


در رویداد TextChanged بررسی میکنه اگه متن عدد باشه در لیبل اول مقدار اونو وارد کنه وگرنه مقدار -1 رو در اون وارد می کنه

«موفق باشید»

 

 

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

بایگانی شده

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

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

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