只有當(dāng)無(wú)其它對(duì)話存在時(shí),才能生成一則對(duì)話。
對(duì)話可用一個(gè)軟鍵刪除,該軟鍵的標(biāo)注由程序員定義。
最多能定義 7 個(gè)軟鍵。
? 對(duì)話適用于顯示必須由用戶回答的問(wèn)題。
? 用函數(shù) Set_KrlDlg( )? 可生成一則對(duì)話。
? 用函數(shù)僅僅可生成對(duì)話。
? 但該函數(shù)不等到對(duì)話得到回答。
? 用函數(shù)Exists_KrlDlg( ) 可檢查一則特定的對(duì)話是否還存在。
? 該函數(shù)也不等到對(duì)話得到回答,而是僅僅在緩存器中查找?guī)в性摼浔膶?duì)話。
? 因此,KRL 程序中的詢問(wèn)必須循環(huán)進(jìn)行,直至對(duì)話得到回答或被刪除。
? 接下來(lái)的程序流程根據(jù)用戶所選的軟鍵而定。
? 按鍵的聲明和初始化
DECL KRLMSGDLGSK_T Softkey[7] ; 準(zhǔn)備 7 個(gè)可能的軟鍵
softkey[1]={sk_type #value, sk_txt[] "key1"}
softkey[2]={sk_type #value, sk_txt[] "key2"}
softkey[3]={sk_type #value, sk_txt[] "key3"}
softkey[4]={sk_type #value, sk_txt[] "key4"}
softkey[5]={sk_type #value, sk_txt[] "key5"}
softkey[6]={sk_type #value, sk_txt[] "key6"}
softkey[7]={sk_type #value, sk_txt[] "key7"}
通過(guò) Exists_KrlDlg() 進(jìn)行分析:在索引 4 下創(chuàng)建的按鍵也以 4 作為反饋應(yīng)答。
; 第 4 號(hào)軟鍵以 4 作為反饋應(yīng)答
softkey[4]={sk_type #value, sk_txt[] "key4"}
若未給所有按鍵編程或有間斷地編程 (編號(hào) 1、4、6),則按鍵將并列排布。若僅使用了按鍵 1、4、6,則也只能給出 1、4、6 反饋。
給用戶自定義的對(duì)話編程:
1. 將主程序載入編輯器。
2. 為以下對(duì)象聲明工作變量:
發(fā)送人、信息號(hào)、信息文本 (自 KrlMsg_T )
具有 3 個(gè)用于參數(shù)的元素的數(shù)組 (自 KrlMsgPar_T )
7 個(gè)可能的按鍵 (自? KrlMsgDlgSK_T )
通用信息提示選項(xiàng) (自 KrlMsgOpt_T )
“句柄”(作為 INT )
檢查結(jié)果的變量 (作為 BOOL)
回答按了哪個(gè)按鍵的結(jié)果變量 (作為 INT )
3. 用所需值初始化工作變量。
4. 給函數(shù)調(diào)用 Set_KrlDlg(…)? 編程。
5. 用一個(gè)循環(huán)停止程序,直到對(duì)話得到了應(yīng)答。
6. 調(diào)用函數(shù) Exists_KrlDlg( )? 來(lái)分析對(duì)話。
7. 規(guī)劃程序中的其它分支并進(jìn)行編程。
8. 關(guān)閉并保存主程序。
生成對(duì)話后程序被停住。回答后信息提示被刪除。然后程序繼續(xù)運(yùn)行。接著給 switch-case 分支編程同樣,程序復(fù)位或退出程序時(shí)信息提示也將消失。可通過(guò)在信息提示選項(xiàng)中的設(shè)置 Clear_P_Reset TRUE ?引發(fā)這種情況。
DECL KRLMSG_T myQuestion
DECL KRLMSGPAR_T Parameter[3]
DECL KRLMSGDLGSK_T Softkey[7] ; 準(zhǔn)備 7 個(gè)可能的軟鍵
DECL KRLMSGOPT_T Option
DECL INT handle, answer
DECL BOOL present
...
myQuestion={modul[] "College", Nr 1909, msg_txt[] "My Questiontext"}
Option= {VL_STOP FALSE, Clear_P_Reset TRUE, Clear_P_SAW FALSE,?
Log_to_DB TRUE}?
; 通配符為空通配符 [1..3]
Parameter[1] = {Par_Type #EMPTY}
Parameter[2] = {Par_Type #EMPTY}
Parameter[3] = {Par_Type #EMPTY}
softkey[1]={sk_type #value, sk_txt[] "key1"} ; 按鍵 1
softkey[2]={sk_type #value, sk_txt[] "key2"} ; 按鍵 2
softkey[3]={sk_type #value, sk_txt[] "key3"} ; 按鍵 3
softkey[4]={sk_type #value, sk_txt[] "key4"} ; 按鍵 4
softkey[5]={sk_type #value, sk_txt[] "key5"} ; 按鍵 5
softkey[6]={sk_type #value, sk_txt[] "key6"} ; 按鍵 6
softkey[7]={sk_type #value, sk_txt[] "key7"} ; 按鍵 7
...
...; 生成對(duì)話
handle = Set_KrlDlg(myQuestion, Parameter[ ],Softkey[ ], Option)
answer=0
REPEAT ; 用于在回答對(duì)話前停住程序的循環(huán)
present = exists_KrlDlg(handle ,answer) ; 回答由系統(tǒng)寫(xiě)入
UNTIL NOT(present)
...
SWITCH answer
CASE 1 ; 按鍵 1
; 按鍵 1 的操作
...
CASE 2 ; 按鍵 2
; 按鍵的操作2
...
CASE 7 ; 按鍵 7
; 按鍵 7 的操作
ENDSWITCH
...
例如:
生成EMZ的選擇框,選擇幾號(hào)焊鉗
DEFFCT INT SetDlgMsg()
DECL?KrlMsg_T?Msg
DECL?KrlMsgPar_T?Par[3]
DECL?KrlMsgOpt_T?Opt
DECL?KrlMsgDlgSK_T?SK[7]
INT?nHandle,?nAnswer
T 2模式下執(zhí)行EMZ
Msg?=?{Modul[]?"vw_emz",?Nr 10,?Msg_txt[]?"Antriebsschnittstelleselektieren"}?提示信息條?“EMZ使用幾號(hào)工具用來(lái)測(cè)量”
SK[1]={ Sk_Type #VALUE,?Sk_txt[]?"1"}?生成的選項(xiàng)按鈕
SK[2]={ Sk_Type #VALUE,?Sk_txt[]?"2"}
SK[3]={ Sk_Type #VALUE,?Sk_txt[]?"3"}
SK[4]={ Sk_Type?#VALUE,?Sk_txt[]?"4"}
SK[5]={ Sk_Type #VALUE,?Sk_txt[]?"5"}
SK[6]={ Sk_Type #VALUE,?Sk_txt[]?"6"}
SK[7]={ Sk_Type #VALUE,?Sk_txt[]?"7"}
選擇幾號(hào)焊鉗
Opt?=?{ VL_Stop True,?Clear_P_ResetTrue,?Log_To_DB FALSE }?信息屬性設(shè)置
nHandle?=?Set_KrlDlg?(Msg,?Par[],SK[],?Opt)?激活信息提示
If?(nHandle>0)Then
While?(Exists_KrlDlg(nHandle,?nAnswer))?關(guān)閉對(duì)話窗口
Wait?sec?0.1
Endwhile
Endif
Return(nAnswer)?選擇按鈕的值被發(fā)出
;
ENDFCT
編輯:黃飛
?
評(píng)論
查看更多