ขอขอบคุณ Aeric ชาวมาเลเซีย ที่สาธิตการสร้างตัวอย่าง และเหล่า experts ท่านอื่นด้วย ณ ที่นี่ (รวม Klaus' tutorials และAlexander's advices)
คำอธิบายภาษาไทยเพิ่มเติม
ส่วนที่1. การนิยามคุณสมบัติของ Xui CustomView ว่ามีคุณสมบัติอะไรเพิ่มเติมบ้าง และการกำหนด #Event
Key ชื่อตัวแปร ที่จัดเก็บ ค่า Key
DisplayName เป็นชื่อที่แสดงในแผงของ Properties
FieldType ประเภทของตัวแปร เป็นได้แค่ String หรือ Boolean เท่านั้น (ไม่สามารถกำหนดเป็น Int ,Bitmap)
DefaultValue ค่ากำหนดตายตัว ซึ่งสามารถสร้างเป็น List ก็ได้ เช่น DefaltValue: Sunday ,List:Sunday|Monday|Tueday|.....|Saturday
หมายเหตุ
ยังมี ส่วนเพิ่มเติม ที่อาจจะมีก็ได้
Description สำหรับบรรยายคุณสมบัติที่สร้างเพื่ออะไร
MinRange/MaxRange สำหรับกำหนดค่าต่ำสุด /ค่าสูงสุด
เราจะกำหนด #Event: หลังจากเขียนนิยามคุณสมบัติเพิ่มเติม ทั้งหมดแล้ว ในบรรทัดถัดไป
ตัวอย่าง
ส่วนที่2 การประกาศตัวแปร เพื่อจัดเก็บค่าที่อ่าน ค่า Key ได้จากคำสั่ง Props
ตัวอย่าง
ส่วนที่3 การอ่านค่า Key โดยใช้คำสั่ง Props เขียนใน DesignerCreateView Module
ตัวอย่าง
ส่วนที่4 การตั้งค่า Key ต่างๆ (Thank you Aeric's Example)
ตัวอย่าง
ส่วนที่5 การเขียนโค้ด เพื่อรองรับการทำงาน โดยสร้างโมดูล ประเภท Public Sub
ตัวอย่าง
ข้อสังเกต
QR เป็นตัวแปรไลบารี่ จาก QRGenerator.ฺBas ไม่ต้องเขียน QR.initialize
คำแนะนำเพิ่มเติมของKlaus ชาวสวิตเซอร์แลนด์
Post in thread '[Solved]Unknown member in CustomView' https://www.b4x.com/android/forum/threads/solved-unknown-member-in-customview.165175/post-1012802
เราสามารถสร้างไตเติ้ลให้กับ Xui CustomView ได้ดังนี้
[Solved]Unknown member in CustomView
I have coded as belows,mBase doesn't knows the member 'HasLogo' #DesignerProperty: Key: HasLogo,DisplayName: MyLogo,FieldType: Boolean,DefaultValue:False,Despcription: There is Logo Icon ,or not In Class_Globals Module Public m_HasLogo As Boolean=False In DesignerCreateView Module...
www.b4x.com
คำอธิบายภาษาไทยเพิ่มเติม
ส่วนที่1. การนิยามคุณสมบัติของ Xui CustomView ว่ามีคุณสมบัติอะไรเพิ่มเติมบ้าง และการกำหนด #Event
Key ชื่อตัวแปร ที่จัดเก็บ ค่า Key
DisplayName เป็นชื่อที่แสดงในแผงของ Properties
FieldType ประเภทของตัวแปร เป็นได้แค่ String หรือ Boolean เท่านั้น (ไม่สามารถกำหนดเป็น Int ,Bitmap)
DefaultValue ค่ากำหนดตายตัว ซึ่งสามารถสร้างเป็น List ก็ได้ เช่น DefaltValue: Sunday ,List:Sunday|Monday|Tueday|.....|Saturday
หมายเหตุ
ยังมี ส่วนเพิ่มเติม ที่อาจจะมีก็ได้
Description สำหรับบรรยายคุณสมบัติที่สร้างเพื่ออะไร
MinRange/MaxRange สำหรับกำหนดค่าต่ำสุด /ค่าสูงสุด
เราจะกำหนด #Event: หลังจากเขียนนิยามคุณสมบัติเพิ่มเติม ทั้งหมดแล้ว ในบรรทัดถัดไป
ตัวอย่าง
B4X:
#DesignerProperty: Key: HasLogo,DisplayName: My Logo,FieldType: Boolean,DefaultValue:False,Despcription: There is Logo Icon ,or not
#DesignerProperty: Key: Weekday,DisplayName: Day of Week,FieldType: String,DefaultValue:Sunday, List:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday
#Event: Click
ส่วนที่2 การประกาศตัวแปร เพื่อจัดเก็บค่าที่อ่าน ค่า Key ได้จากคำสั่ง Props
ตัวอย่าง
B4X:
Sub Class_Globals
Private mEventName As String 'ignore 'IDE เป็นผู้สร้าง
Private mCallBack As Object 'ignore 'IDE เป็นผู้สร้าง
Public mBase As B4XView 'IDE เป็นผู้สร้าง
Private xui As XUI 'ignore 'IDE เป็นผู้สร้าง
Public Tag As Object 'IDE เป็นผู้สร้าง
Private m_HasLogo As Boolean 'เขียนขึ้นมา เพื่อประกาศตัวแปร สำหรับ ผมใช้ m_ตามด้วย<ชื่อKey> เพื่อความสะดวกและช่วยแยกแยะว่าตัวเองเป็นผู้สร้าง
ส่วนที่3 การอ่านค่า Key โดยใช้คำสั่ง Props เขียนใน DesignerCreateView Module
ตัวอย่าง
B4X:
Public Sub DesignerCreateView (Base As Object, Lbl As Label, Props As Map)
mBase = Base 'IDE เป็นผู้สร้าง
Tag = mBase.Tag 'IDE เป็นผู้สร้าง
mBase.Tag = Me 'IDE เป็นผู้สร้าง
m_HasLogo = Props.GetDefault("HasLogo", False) 'เขียนขึ้นมา กรณีรู้ค่ากำหนดตายตัว
m_CashMoney = Props.Get("CashMoney") 'เขียนขึ้นมา กรณีไม่รู้ค่ากำหนดตายตัว
ส่วนที่4 การตั้งค่า Key ต่างๆ (Thank you Aeric's Example)
ตัวอย่าง
B4X:
Public Sub setHasLogo(HasLogo As Boolean)
m_HasLogo=HasLogo
'mBase.?? <----ไม่ต้องมีบรรทัดนี้ (ลบทิ้ง) เนื่องจากเป็นคุณสมบัติที่สร้างขึ้นเองโดยเฉพาะ ไม่เป็นสมาชิกของ mBase
End Sub
Public Sub setEnabled(Enabled As Boolean)
m_Enabled=Enabled
mBase.Enabled=Enabled
End Sub
Public Sub setVisible(Visible As Boolean)
m_Visible=Visible
mBase.Visible=Visible
End Sub
ส่วนที่5 การเขียนโค้ด เพื่อรองรับการทำงาน โดยสร้างโมดูล ประเภท Public Sub
ตัวอย่าง
B4X:
'ประกาศตัวแปรก่อนใช้งาน
Sub Class_Globals
Private QR As QRGenerator
Private ImvQR As ImageView
Private BmpQR As B4XBitmap
Private BmpLogo As B4XBitmap
B4X:
'เขียนโค้ด (Thank you Aeric's Example)
Public Sub Create (Text As String)
BmpQR = QR.Create(Text) 'ตัวแปร BmpQR ถูกประกาศ ที่โมดูล Sub Class_Globals
If mHasLogo Then
ImvQR.Bitmap = QR.AddBitmap(BmpQR, BmpLogo, 180).Resize(ImvQR.Width, ImvQR.Height, True)
Else
ImvQR.Bitmap = BmpQR
End If
End Sub
ข้อสังเกต
QR เป็นตัวแปรไลบารี่ จาก QRGenerator.ฺBas ไม่ต้องเขียน QR.initialize
คำแนะนำเพิ่มเติมของKlaus ชาวสวิตเซอร์แลนด์
Post in thread '[Solved]Unknown member in CustomView' https://www.b4x.com/android/forum/threads/solved-unknown-member-in-customview.165175/post-1012802
เราสามารถสร้างไตเติ้ลให้กับ Xui CustomView ได้ดังนี้
B4X:
Sub Class_Globals
Public mLblTitle As B4XView '<----สร้างตัวแปร มารับค่า Lbl
Public mPnlUpper As B4XView '<---สร้าง Panel มารองรับอีกทีหนึ่ง
B4X:
Public Sub DesignerCreateView (Base As Object, Lbl As Label, Props As Map)
mBase = Base
Tag = mBase.Tag
mBase.Tag = Me
'Private Lbl As Label '<---ไม่จำเป็นต้องมีบรรทัดนี้
'Lbl.Initialize("") '<---ไม่จำเป็นต้องมีบรรทัดนี้
mLblTitle = Lbl
mLblTitle.Text = "Title"
mLblTitle.Color = xui.Color_Blue
mLblTitle.TextColor = xui.Color_Yellow 'i changed the colors to show what happens
mLblTitle.SetTextAlignment("CENTER", "CENTER")
mPnlUpper = xui.CreatePanel("mPnlUpper")
' mPnlUpper.Color=0x00FFFFFF
mPnlUpper.Color = xui.Color_Gray
m_HasLogo = Props.GetDefault("HasLogo",False)
mBase.AddView(mLblTitle, 0, 0, mBase.Width, 30dip)
mBase.AddView(mPnlUpper,0, 30dip, mBase.Width, mBase.Height - 30dip)
Last edited: