Upload
phunghanh
View
299
Download
14
Embed Size (px)
Citation preview
From VB to B4A 跨越Microsoft到Android
Dashing的發現之旅
林文雄。大雄
1
導A辦公室#1826
校內:http://192.168.13.211 校外:http://nature.tncvs.tn.edu.tw
大雄的自然小屋
2
What is programming?
專業—並非會電腦的人都會程式設計,是
具有專業的門檻。
技術—特別是演算法(Algorithm),在有限
時間得以解決問題的步驟與方法。
藝術—解決問題的方法有多種,但如何使
程式易用、簡單與快速,就需要具有創意
的藝術。
3
Programming Language?
第一代:機器語言
第二代:組合語言
第三代:程序性語言
第四代:物件導向語言或查詢語言
第五代:人工智慧語言
4
程式翻譯器
將程式碼(助憶碼)翻譯成機器語言碼
組譯器(Assembler)
直譯器(Interpreter)
編譯器(Compiler)
5
編譯歷程
文字編輯器
撰寫程式碼
編譯器
翻譯成目的程式
連結器
連結程式庫
成執行檔
載入器
載入主記憶體
執行
6
開始設計吧!
設計一個可以讓小學生練習四則運算的VB程式。程式主動出題,待使用者輸入答案後,判斷答案且給予回饋。加減可至3位整數,乘除則至2位整數即可(注意需可整除)。
可兩人一組,也可一人一組。
7
台南高商 林文雄
8
PART 1. B4A第1個程式
9
B4A與VB程式發展步驟比較
VB B4A
Step 1 表單設計Form 版面設計Designer
Step 2 程式碼撰寫 程式碼撰寫
10
Run Test1 Program
若程式碼無誤,經編後會直接傳輸與安裝在執行平台(手機或平板),即可執行。
執行鈕 版面表單設計
11
Your First B4A Program
1. 儲存B4A檔案(如:Test1)
2. Designer設計版面(Layout)
並儲存(如TestAdd)
3. 撰寫程式碼
12
B4A-Designer
1. 與執行平台連線
2. 新增控制項
與屬性設定
3. 可設計Designer
Scripts (稍後再談)
4. 自動宣告控制項
或產生事件處理
程序
控制項
事件
處理程序
產生
13
Test1程式碼(1/2)
Sub Globals
Private Button1 As Button
Private EditText1 As EditText
Private Label1 As Label
Private Label2 As Label
Private LblOpr As Label
Private LblEqual As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout(“TestAdd”) ‘載入版面
NewOne ‘新題目
End Sub
14
Test1程式碼(2/2)
Sub Button1_Click
If Label1.Text+Label2.text=EditText1.Text Then
Msgbox(“太棒了,答對了”,“四則運算")
NewOne
Else
Msgbox(“哦!,再試一次!”,“四則運算")
End If
EditText1.Text=""
End Sub
Sub NewOne
Label1.Text=Rnd(1,100) ‘產生1-99間的亂數
Label2.text=Rnd(1,100)
End Sub 15
B4A_程式編譯與偵錯
Debug(legacy) .逐行執行偵錯
Debug(rapid) .逐程序執行偵錯
Release .apk手機執行測試
Release(obfuscated).apk發佈版本
另有設定中斷點偵錯模式
16
B4A-套件名稱(Package Name)
Project > Build Configurations >
Package
1. 是Android App的識別名稱,用來區分不
同的App應用程式。
2. 常用反相的網域名稱字串為套件名稱,
須為小寫英文,如
tw.edu.tn.tncvs.packagename
17
B4A-App Icon
正版:Project > Choose Icon
試用本:無法使用,但有撇步
將儲存資料夾中的預設Icon
Objects\res\drawable\icon.png
取代成你自己的圖片即可,檔名不可改
18
B4A-Project Attributes
#ApplicationLabel: 應用軟體名稱
#VersionCode: 版本號碼
#VersionName: 版本名稱 ‘SupportedOrientations possible values: unspecified(未指定), landscape(水平) or portrait(垂直).
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
可否安裝在外部儲存裝置
19
B4A-Activity Attributes
#FullScreen: False 是否全螢幕
#IncludeTitle: True 是否包含標題
20
B4A-資料夾結構
Filename.b4a B4A主檔案
Filename.bas 其他模組程式檔
Files資料夾 B4A資源庫
Filename.bal B4A的Layout檔(版面)
Objects資料夾 相關的目的檔
Filename.apk B4A的App檔
21
B4A 程式設計的步驟
1. 儲存B4A檔案(如:Test1)
2. 設定App名稱:Project/Build Configurations/Package
3. 設定圖示:Project/Choose Icon
4. 設定程式中的Project Attributes與Activity Attributes
5. Designer設計版面(Layout)並儲存(如TestAdd)
6. 撰寫程式碼
7. 連線行動裝置IP
8. 編譯&執行
22
PART 2. B4A與VB的差異比較
23
B4A控制項 說明 Visual Basic 2010 Basic4Android
表單 Form Designer
標籤 Label Label
文字方塊 TextBox、RichTextBox EditText
命令按鈕 Button Button
單選鈕 RadioButton RadioButton
複選鈕 CheckBox CheckBox
下拉式清單 ComboBox Spinner
清單選項 ListBox ListView
容器 Panel Panel
瀏覽器 WebBrowser WebView
影像 PictureBox ImageView
進度軸 ProgressBar ProgressBar
計時器 Timer Timer 24
B4A資料型態 資料型態 Visual Basic 2010 Basic4Android
布林 Boolean Boolean
位元組 Byte Byte
短整數 Short Short
整數 Integer Int
長整數 Long Long
單精度浮點數 Single Float
雙精數浮點數 Double Double
字元 Char Char
字串 String String
25
B4A運算子
優先順序 Visual Basic 2010 Basic4Android
1.指數 ^ Power(5,3)=125
2.負數 - -
3.乘除 *
/
*
/
4.整除 \
5.餘數 Mod Mod
6.加減 +
-
+
-
7.字串連接 & &
※關係運算式與布林運算式相同
26
B4A訊息框
1. Msgbox(“訊息”, “標題”)
2. Ans=Msgbox2(“訊息”, “標題”,”確定”, ”取消”,”結束”,Null) Ans的值可為下列三者之一:
(1)DialogResponse.POSITIVE (2)DialogResponse.CANCEL (3)DialogResponse.NAGATIVE
3. ToastMessageShow(“訊息”, True/False) True:停留時間較長(3 Sec.) False:停留時間較短(2 Sec.)
27
B4A函數-字串 方法 說明 用法
CharAt() 取得字串指定的元字 Str2=Str1.CharAt(2)
CompareTo() 比較兩個字串碼大小 Str1.CompareTo(Str2)
Contains() 是否包含指定字串 Str1.Contains(Strs)
IndexOf() 取得字串的索引位置 Str1.InexOf(Str2)
LastIndexOf() 反向取得字串的索引位置 Str1.LastIndexOf(Str2)
Length 字串的總字元數 Str1.Length
Replace() 字串取代 Str1.Replace(Str2, Str3)
Substring() 取得字串中的子字串 Str1.Substring(m)
Substring2() 取得字串中的子字串 Str1.Substring2(m, n)
ToLowerCase 轉成小寫 Str1.ToLowerCase
ToUpperCase 轉成大寫 Str1.ToUpperCase
Trim 刪除字串前後空白字元 Str1.Trim
28
B4A函數-日期
函數 說明
DateTime.GetYear(DateTime.Now) 西元年
DateTime.GetMonth(DateTime.Now) 月份
DateTime.Date(DateTime.Now) 日期
DateTime.Time(DateTime.Now) 時間
DateTime.GetDayofYear(DateTime.Now) 當年第幾天
DateTime.GetDayofMonth(DateTime.Now) 當月第幾天
DateTime.GetDayofWeek(DateTime.Now) 當週第幾天
DateTime.GetHour(DateTime.Now) 時
DateTime.GetMinute(DateTime.Now) 分
DateTime.GetSecond(DateTime.Now) 秒
29
B4A函數-數值
函數 說明
Abs(x) 絕對值
Floor(x) 取小於等於x的最大整數值
Max(x,y) 取x,y較大者
Min(x,y) 取x,y較小者
Power(x,y) 取x的y次方
Round(x) 四捨五入
Round(x,n) 四捨五入到小數點第n位
Sqrt(x) 取x的平方根
Ceil(x) 取大於等於x的最小整數
Rnd(x,y+1) 產生x~y間的亂數
30
B4A變數宣告
B4A不支援VB的常數宣告
B4A陣列宣告相同,但註標值意義有異
Dim Eng(9) As Int,共有Eng(0)~Eng(8)等9
個元素,而非VB中的10個。
B4A陣列預設值用法
Dim Eng() As Int
Eng=Array As Int(100,99,90,85)
31
B4A指令語法
B4A的註解僅有「 ‘ 」,無Rem指令
B4A的迴圈結構,不支援後測條件,也不支援While/End While
B4A不論函數、程序和方法都僅使用Sub宣告,没有Function用法 Sub F(x as int) As long Dim y as long y=power(x,3) Return y End Sub
32
B4A傳值呼叫與傳址呼叫
B4A的基本資料型態的變數與String型態都是採用傳值呼叫。
B4A的非基本資料型態參數都是使用傳址呼叫,如陣列。
Dim eng() As Int
eng=Array As Int(100,90,80,70)
callbyRef(eng)
Msgbox(eng(0), "") ‘10000
Sub callbyRef(xx() As Int)
xx(0)=Power(xx(0),2)
End Sub
Dim x As Int
x=100
callbyVal(x)
Msgbox(x, "") ‘100
Sub callbyVal(xx As Int)
xx=Power(xx,2)
End Sub
33
B4A文字檔使用
UTF-8格式
Windows OS可下載Notepad++文字編輯器
網路傳輸資料時則需轉成UTF-8格式再傳輸
若儲存於執行平台時,則直接儲存/開啟即可。預設格式仍為UTF-8
34
PART 3. B4A多重表單與程式模組
35
B4A多重表單與程式模組
…..
StartActivity(SencondMoudle)
…..
StartActivity(MainMoudle)
每一個活動模組(Activity Moudle)都可以對應對一個專屬的表單(Layout)
36
B4A_程式生命期
啟動狀態
執行狀態
活動在前景執行(不會被移除)
暫停狀態(有必要會移除)
活動在背景時暫停執行
移除狀態(可移除)
※Android作業系統不會自動刪除活動,除非記憶體不夠時才會刪除活動。
37
B4A-Starter Service
B4A v5.20提供
建立單一的程式進入點
提供全域資源或變數的最佳初始化位置
全域性變數宣告於 Sub Process_Globals
控制項初始化於 Sub Service_Create
38
B4A模組類型
Activity Module 具版面表單的活動模組
Class Module 自訂的類別模組
Code Module 僅程式碼的模組
Service Module 可背景執行的模組
39
B4A多重表單與程式模組-範例
1. 利用Designer設計另三個與TestAdd
類似的版面表單-TestSub、TestMul 、
TestDiv。
2. 除了預設的main模組外,再新增Subb、
Mul、Div三個活動模組。
※「四則運算」程式碼詳見附件一
40
B4A多重程式模組-服務模組範例1
除了Main模組外,另新增一Service
Module,名稱可訂為Begin
Designer設計一版面表單Main,內有二個Label,一個Button。
Main模組進行前景的計數程式,並將結果呈現於Label1。Begin模組進行背景的計數程式,結果顯示於Label2。
Button用以啟動或結束Begin模組運作。
※「計數服務模組」程式碼詳見附件二
41
B4A多重程式模組-服務模組範例2
延續上一個服務模組範例,修改為開機後自動啟動的方式。
特別注意Begin模組的服務屬性設定
#Region Service Attributes
#StartAtBoot: True
#End Region
※「計數服務模組」程式碼詳見附件三
42
PART 4. B4A函式庫(LIBRARY)
43
B4A函式庫(Library)
函式庫用法如名稱所示。
相關詳細資料可至B4A社群查詢。
特殊需求的函式庫亦可至B4A社群查詢下載使用。
44
B4A函式庫應用-音效播放
1. 勾選Audio函式庫
2. 資源庫中加入一音效檔,如kalimba.mp3
3. 程式中加入下列程式碼:
Dim MP As MediaPlayer
MP.Initialize2(“MP”)
MP.Load(File.DirAssets, _
“kalimba.mp3”)
MP.Play
45
B4A函式庫應用-網頁瀏覽
1. 勾選Network函式庫
2. Designer中建置WebView1控制項,並
儲存版面及自動宣告。
3. 程式中加入下列程式碼:
WebView1.LoadUrl("https://tw.yahoo.com/")
46
PART 5. B4A-SQLITE資料庫與設計
47
SQLite資料庫(1/2)
Google “SQLite Browser”,下載並安裝。
48
SQLite資料庫(2/2)
49
B4A檔案的存取位置
File.DirAssets 此目錄在Android App的apk檔案中,隨著apk檔一起安裝至Android作業系統中,即資源庫的目錄,因此檔案只能唯讀,無法寫入。
File.DirInternal/File.DirInternalCache 此兩個目錄儲存主憶體的應用程式專屬檔案,其他App無法存取這些檔案。但如果Android作業系統需要更多的記憶體空間時,此一暫存目錄會被清除。
File.DirRootExternal SD卡根目錄
File.DirDefaultExternal SD卡應用程式預設目錄,其路徑: <記憶卡>/Android/data/<套件>/files/ 。此目錄有必要會自動建立,可與其他App共享存取檔案。
50
B4A-資料庫存取設計(1/3)
1. 勾選函數庫(Libs)的SQL
2. 將mydb,.sqlite載入資源庫(Files)
3. 程式中宣告
Sub Process_Globals
Dim SQLcmd As SQL ‘執行SQL語法
Dim DBPoint As Cursor ‘資料庫內指標
End Sub
51
B4A-資料庫存取設計(2/3)
4. 在Activity_Create程序中將資料庫檔案Copy至SD If File.Exists(File.DirDefaultExternal,“mydb.sqlite”)=False Then File.Copy(File.DirAssets,“mydb.sqlite”, _ File.DirDefaultExternal,“mydb.sqlite”) End If
5. 在Activity_Create程序中初始化資料庫檔案 If SQLcmd.IsInitialized()=False Then SQLcmd.Initialize(File.DirDefaultExternal, _ "mydb.sqlite", True) End If
52
B4A-資料庫存取設計(3/3)
資料庫的基本,不外是新增、修改、
刪除、查詢、全部列出等動作,前三者並
未涉及查詢,因此使用其方法為
SQLcmd.ExecNonQuery(SQL語法字串)
後二者則需查詢,故其方法為
SQLcmd.ExecQuery(SQL語法字串)
※「電話簿管理」程式碼詳見附件四
53
PART 6. B4A 程序週期
54
b4A 程序週期
嘗試下列兩個動作,看看Your First B4A
App有何反應?
1. 前景轉背景,可按<Home>鍵。然後
再回後B4A App。
2. 在執行B4A App的情況下,翻轉方向。
55
B4A程序執行流程
Process- Globals
Globals Activity_ Create
Activity_ Resume
Process Running
前景轉背景執行
或螢幕轉向等
影響畫面動作
Activity_ Pause
背景轉前景執行
螢幕轉向
56
主要程序說明(1/2)
B4A 的程式碼編輯區,預設有五個程序(Process),說明如下:
Sub Process_Globals
'此處定義此一App 下的全域變數,任何的
‘程式模組皆可以使用(不包含介面控制項的宣告)。
End Sub
Sub Globals
'定義此Activity 運作模組下的變數,僅此一模組內
‘可以進行存取的變數與控制項宣告。
End Sub
57
主要程序說明(2/2)
Sub Activity_Pause (UserClosed As Boolean)
‘任何暫停此一Activity的動作,如轉背景/螢幕轉向等皆會觸發
‘此一程序,以便記錄程式狀況或相關變數。
‘1)固定螢幕方向 2)全域變數儲存 3)檔案儲存
End Sub
Sub Activity_Resume
‘回復此一Activity的動作,如轉前景運作/螢幕轉向等皆會觸發
‘此一程序,以便回復先前的畫面或相關變數。
End Sub
Sub Activity_Create(FirstTime As Boolean)
‘通常在此程序中來進行一些資料初始化或版面配置的動作 ‘類似 Main()程序
Activity.LoadLayout(“TestAdd”) ‘顯示版面表單
‘若 FirstTime = True 代表第一次執行活動 (Activity)
End Sub
58
1)固定螢幕方向
#Region Project Attributes
#ApplicationLabel: B4A Test1
#VersionCode: 1
#VersionName: 20151028
'SupportedOrientations possible values:
unspecified, landscape or portrait.
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False
#End Region
59
2)全域變數儲存(1/2)
Sub Process_Globals
Dim no1, no2 As Int
End Sub
Sub Activity_Pause (UserClosed As Boolean)
no1=Label1.Text
no2=Label2.text
End Sub 60
2)全域變數儲存(2/2)
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout(“TestAdd")
If FirstTime Then
NewOne
Else
Label1.Text=no1
Label2.Text=no2
End If
End Sub
61
3)檔案儲存(1/2)
Sub Globals
Dim Writer As TextWriter
Dim Reader As TextReader
End Sub
Sub Activity_Pause (UserClosed As Boolean)
Writer.Initialize(File.OpenOutput _
(File.DirInternal,"test1.dat",False))
Writer.WriteLine(Label1.text)
Writer.WriteLine(Label2.text)
Writer.Close
End Sub 62
3)檔案儲存(2/2)
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout(“TestAdd")
If FirstTime Then
NewOne
Else
If File.Exists(File.DirInternal,"test1.dat") Then
Reader.Initialize(File.OpenInput (File.DirInternal,"test1.dat"))
Label1.Text=Reader.ReadLine
Label2.Text=Reader.ReadLine
Reader.Close
End If
End If
End Sub
63
PART 7. B4A-Q&A社群應用
64
65
66
PART 8. B4A-示例
67
68
69
70
71