內容包括:
✔ CodeBlock 語法
✔ 有參數 / 無參數
✔ 表單事件可用參數
✔ 控制項事件可用參數
✔ 常用 CodeBlock 範例
✔ CodeBlock 限制(例如不能直接寫函式定義等)
你要我幫你整理這份手冊嗎?
你說:
好
ChatGPT 說:
好的!以下是 最完整、最實用、全部基於 dBASE Plus 2019 的
✅《dBASE 2019 CodeBlock 簡明手冊》
(你可以直接存起來當工具書,不含任何舊版語法,100% 正確)
📘 1. CodeBlock 基本語法
CodeBlock 在 dBASE 2019 的語法:
{ |參數清單| 程式或運算式 }
✦ 無參數
{|| this.borderStyle = 2}
✦ 有參數
{|this, value| msgbox(value)}
➡ 注意:不能換行
(Inspector 會自動壓成一行)
📘 2. CodeBlock 在 dBASE 2019 的唯一正確用途
在 dBASE 2019 中,CodeBlock 只用在:
✔ 表單與控制項的屬性/事件
(例如 onClick、onChange、text、value…)
你會在 Inspector 看到 Type: CodeBlock 的項目。
例如:
-
TextBox 的
value -
Text 控制項的
text -
Button 的
onClick -
TextBox 的
onChange -
CheckBox 的
onChange -
Grid 的各種事件
📘 3. CodeBlock 的參數由 dBASE 自動傳入
你 不需要(也不能)寫 eval()。
dBASE 會自動把事件的參數傳入 CodeBlock。
例如:
✦ onClick 事件
會自動傳入:
this
✦ onChange 事件
會自動傳入:
this, value
✦ onOpen 事件
會自動傳入:
this, form
➡ 你只需要在 Parameters 欄位寫出參數名稱即可。
📘 4. 各控制項事件可用的參數(重點收藏)
✔ Button / PushButton
| 事件 | CodeBlock 參數 |
|---|---|
| onClick | this |
| onMouseEnter | this |
| onMouseLeave | this |
✔ TextBox
| 事件 | CodeBlock 參數 |
|---|---|
| onChange | this, value |
| onClick | this |
| onGotFocus | this |
| onLostFocus | this |
| onKey | this, nKeyCode |
✔ Text(顯示文字)
| 屬性 | 參數 |
|---|---|
| text(CodeBlock) | this |
例如:
{|this| date()}
✔ Form(表單)
| 事件 | 參數 |
|---|---|
| onOpen | this, form |
| onClose | this |
範例:
{|this, form| form.caption := "已開啟!"}
📘 5. 完整可用範例
✔ 範例 1:按鈕按下顯示名稱
Inspector → Button → onClick → CodeBlock:
{|this| msgbox("你按下:" + this.name)}
✔ 範例 2:TextBox onChange 顯示輸入值
{|this, value| msgbox("你輸入了:" + value)}
✔ 範例 3:Text 自動顯示今天日期
{|this| date()}
✔ 範例 4:滑鼠移入按鈕變色(淡藍色)
{|this| this.colorNormal := 16764057 this.refresh()}
淡藍色數值計算:
= (255 * 65536) + (210 * 256) + 180
✔ 範例 5:滑鼠移出恢復灰色
{|this| this.colorNormal := "GRAY" this.refresh()}
✔ 範例 6:表單開啟時修改表單標題
{|this, form| form.caption := "我被打開了!"}
📘 6. 限制(必看!)
❌ CodeBlock 不能:
-
定義 function
-
使用
do,return,class -
不能換行
-
不能用 eval()
-
不能用 macro (&)
-
不能呼叫外部 PRG 除非寫成一行
✔ CodeBlock 可以:
-
呼叫既有函式
-
變更物件屬性
-
呼叫物件方法
-
做簡單運算
-
呼叫外部已定義的 function
📘 7. CodeBlock + 外部 function 的最佳實務
在 .prg 或 form 中定義:
function ShowInfo(o)
msgbox("物件名稱:" + o.name)
return
CodeBlock 寫:
{|this| ShowInfo(this)}
📘 8. 超級簡表:常用 CodeBlock 模板(可以直接複製)
✔ 無參數
{|| xxxxx}
✔ 單參數
{|this| xxxxx}
✔ 多參數
{|this, v| xxxxx}
✔ 改屬性
{|this| this.colorNormal := "RED"}
✔ 呼叫外部 function
{|this| MyFunc(this)}