VFP自動(dòng)選擇感應(yīng)的二次開發(fā)
發(fā)表時(shí)間:2024-02-15 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]摘要:本文提出了VFP內(nèi)置編輯器的智能感應(yīng)功能及用法,供智能感應(yīng)使用的表FOXCODE.DBF的結(jié)構(gòu)及功能。重點(diǎn)介紹了智能感應(yīng)的二次開發(fā)功能的腳本程序編寫方法。文中給出了幾個(gè)實(shí)用的實(shí)例。關(guān)鍵字:VFP 編輯器 智能感應(yīng)1 智能感應(yīng)簡(jiǎn)介VFP從7.0版開始增加了一個(gè)非常好的功能:智能感應(yīng)(Intel...
摘要:本文提出了VFP內(nèi)置編輯器的智能感應(yīng)功能及用法,供智能感應(yīng)使用的表FOXCODE.DBF的結(jié)構(gòu)及功能。重點(diǎn)介紹了智能感應(yīng)的二次開發(fā)功能的腳本程序編寫方法。文中給出了幾個(gè)實(shí)用的實(shí)例。
關(guān)鍵字:VFP 編輯器 智能感應(yīng)
1 智能感應(yīng)簡(jiǎn)介
VFP從7.0版開始增加了一個(gè)非常好的功能:智能感應(yīng)(IntelliSense)功能。主要的功能有:(1)輸入命令縮寫及空格后,命令會(huì)自動(dòng)擴(kuò)展;(2)輸入函數(shù)名及左括弧、對(duì)象名及點(diǎn)之后,系統(tǒng)會(huì)自動(dòng)提示相應(yīng)的參數(shù)或?qū)傩浴⒎椒裙┻x擇。除了上述這些與其它語言類似的功能以外,VFP還有一個(gè)特點(diǎn),那就是它提供了可供用戶二次開發(fā)的功能,即可以用腳本程序?qū)δ苓M(jìn)行擴(kuò)展。
智能感應(yīng)的所有內(nèi)容及方案都在一個(gè)表中定義,表的文件名在系統(tǒng)變量_FOXCODE中存放。修改或擴(kuò)展這個(gè)表的內(nèi)容就可以改變智能感應(yīng)的內(nèi)容。在工具菜單中有一項(xiàng)是智能感應(yīng)管理器(IntelliSense Manager)。智能感應(yīng)管理器的作用其實(shí)就是幫助修改這個(gè)表。當(dāng)然也可以直接用手工對(duì)表進(jìn)行修改。
2 FOXCODE的表結(jié)構(gòu)及用法
2.1 FOXCODE的表結(jié)構(gòu)
此表共有十幾個(gè)字段,下面介紹一下幾個(gè)關(guān)鍵字段的用處:
Type:類型,有C(命令)、F(函數(shù))、P(屬性)、S(腳本)、O(對(duì)象)、U(用戶自定義)等
Abbrev:引發(fā)智能感應(yīng)的關(guān)鍵詞,也是命令或函數(shù)的最短縮寫
Cmd:填寫腳本的名稱,放在{}內(nèi),此腳本名應(yīng)在另外一條記錄的Abbrev字段中
Data:備注型,存放腳本程序,或存放任意數(shù)據(jù)
Expanded:命令或函數(shù)展開的全名
Tip:提示信息
根據(jù)Type的不同,這些字段的意義也有所區(qū)別,而且不一定全部需要,不需要的字段可以空著,下面簡(jiǎn)單介紹一下不同用途的組合方式:
C或F:Abbrev中存放縮寫,Expand中存放全稱,Cmd中的腳本名可選
S:Abbrev中存放腳本名,Data中存放腳本程序
U:Abbrev中存放關(guān)鍵詞,Cmd存放空括弧{},腳本直接存放在Data中;或者:Cmd中存放腳本名,Data中存放數(shù)據(jù),腳本則在另外一條記錄中定義。
2.2 智能感應(yīng)的簡(jiǎn)單應(yīng)用:提示信息的漢化
命令、函數(shù)、屬性等類型的記錄都是系統(tǒng)內(nèi)部已經(jīng)定義好的,雖然也可以修改,但基本上不好作太大的變動(dòng),畢竟功能的改造是有限的,在此就不詳加敘述了。然而有一點(diǎn)工作是可以做的,那就是對(duì)Tip字段進(jìn)行漢化。由于VFP從7.0開始已經(jīng)不再出中文版了,漢化工作必須由自己做,對(duì)于智能感應(yīng)提示的漢化,不需對(duì)二進(jìn)制文件進(jìn)行修改,直接修改表的Tip字段即可,這樣漢化難度就很簡(jiǎn)單了。漢化時(shí)要注意,由于里面的逗號(hào)是作為參數(shù)分隔符的,不要進(jìn)行增刪,否則參數(shù)會(huì)錯(cuò)位。內(nèi)容中若需要添加逗號(hào),請(qǐng)使用全角的中文逗號(hào)。這樣經(jīng)過漢化之后,提示就變成中文的了。由于系統(tǒng)變量_FOXCODE的值可以改變,因此可以隨時(shí)改變它的值,選擇另外的表。若結(jié)合鍵激活功能,可以設(shè)置一個(gè)熱鍵用于切換_FOXCODE的值,以便隨時(shí)改變中、英文提示。
3.用戶自定義類型的使用
用戶自定義類型(Type為U)的記錄,是我們可以添加的。下面介紹一下腳本編寫的方法。
腳本實(shí)際上就是標(biāo)準(zhǔn)的VFP程序,簡(jiǎn)單地說,就是在編輯時(shí)輸入一個(gè)在Abbrev字段中存在的字符串,并按空格鍵激活智能感應(yīng),那么系統(tǒng)就執(zhí)行相應(yīng)的腳本程序,用腳本的返回值替換輸入的內(nèi)容,若返回值為空,則不替換。調(diào)用腳本時(shí),系統(tǒng)會(huì)傳入一個(gè)對(duì)象型的參數(shù)FOXCODE,這個(gè)參數(shù)包含了用戶輸入的及FOXCODE表中相應(yīng)記錄中的許多有用的信息,腳本程序可以從中獲取信息。因此不管是否需要這個(gè)對(duì)象,腳本程序的第一句必須用LPARAMETERS接收傳入的參數(shù)。
4. FOXCODE對(duì)象的屬性
FOXCODE對(duì)象有許多屬性,沒有方法。與FOXCODE表的字段同名的屬性,分別代表相應(yīng)的字段內(nèi)容,除此以外比較有用的還有:
CursorLocaChar:執(zhí)行腳本后,放在要選中文本內(nèi)容前后的特殊字符,默認(rèn)為“~”
DefaultCase:缺省大小寫,來自Type為V的記錄的Case字段內(nèi)容
FileName:編輯的文件名
FullName:當(dāng)前輸入的整行文本
Location:使用編輯器的類型:
0:命令窗口,1:程序,8:菜單片段,10:代碼片段,12:存儲(chǔ)過程
UserTyped:用戶輸入的文本,不包括激活鍵、前導(dǎo)空格或Tab(可用FullLine代替)
valueTip:當(dāng)valueType為“T”時(shí)的提示
valueType:腳本處理的方案,L:顯示列表項(xiàng),V:顯示值,T:提示。這個(gè)屬性一般需要在腳本中賦值,用戶自定義的一般設(shè)置為“V”
5.實(shí)例分析
為了能說得更清楚,現(xiàn)舉幾個(gè)實(shí)例,并對(duì)其進(jìn)行分析說明。下面的例子中的Type都為“U”,Abbrev為要替換的關(guān)鍵字。“U”類型相當(dāng)與“C”類型(命令),是用空格鍵激活的。若是類的方法或函數(shù),是用左括弧激活的,那么必須用“F”類型,其余的與“U”類型的類似。
5.1直接替換,不用腳本
在Expanded中存放展開后的字符串即可,字段長(zhǎng)度為26,不超過就行。而且前面的幾個(gè)字符不必與Abbrev的相同。
5.2 用單條記錄實(shí)現(xiàn)
腳本程序直接存放在當(dāng)前記錄的Data字段中,在Cmd字段中存放空括弧{}。例:關(guān)鍵詞為DC,替換為DEFINE CLASS語句塊的多行內(nèi)容,最后光標(biāo)停在“類名”的位置。腳本程序?yàn)椋?br>LPARAMETERS oFoxcode
IF oFoxcode.Location #1 &&如果不是程序窗口,則不變
RETURN ""
ENDIF
oFoxcode.valuetype = "V" &&此行必需
TEXT TO myvar NOSHOW
DEFINE CLASS ~類名~ AS Session OLEPUBLIC
PROCEDURE Init
ENDPROC
ENDDEFINE
ENDTEXT
RETURN myvar
說明:(1)若使用智能感應(yīng)管理器,則點(diǎn)擊Custom中的Script時(shí),LPARAMETERS一行會(huì)自動(dòng)添加。(2)TEXT-ENDTEXT間的幾行(包括空行)為返回的內(nèi)容,替換后“類名”為選中狀態(tài),便于直接輸入。若只需光標(biāo)定位,不需選中,則只要一個(gè)“~”就行了,符號(hào)“~”由CursorLocaChar屬性決定,是可變的。
5.3 單獨(dú)定義腳本
若腳本程序有通用性,則可以把腳本寫到單獨(dú)的記錄中,供其它項(xiàng)調(diào)用。定義腳本:Type為“S”,Abbrev存放腳本名,Data存放腳本程序,Cmd為空。調(diào)用:Type為“U”,Abbrev存放關(guān)鍵詞,Data存放數(shù)據(jù),Cmd存放要調(diào)用的腳本名(兩邊加{})。例:關(guān)鍵詞為SQ與IQ,分別生成SQL的SELECT與INSERT語句,字段名由腳本生成,若當(dāng)前已有表打開,則使用當(dāng)前表,否則提示打開。
Type Abbrev Cmd Data
U SQ {fieldlist} SELECT <> FROM <>
WHERE ~條件~ INTO CURSOR
U IQ {fieldlist} INSERT INTO <> (<>)
value (~<>~)
S fieldlist 腳本程序
fieldlist腳本程序如下
LPARAMETER oFoxCode
oFoxcode.valuetype = "V"
IF EMPTY(DBF()) &&沒打開表,則提示打開
USE ?
ENDIF
AFIELDS(AR)
FieldList=AR(1,1)
FOR I=2 TO ALEN(AR,1)
FieldList=FieldList+","+AR(I,1)
NEXT
DbfName=JUSTSTEM(DBF())
RETURN TEXTMERGE(oFoxCode.Data) &&直接替換DATA中兩個(gè)變量的內(nèi)容
腳本程序說明: TEXTMERGE()函數(shù)可以用變量的值一次性替換字符表達(dá)式里<<>>中的變量。
6 其它
系統(tǒng)在第一次運(yùn)行時(shí)會(huì)把FOXCODE.DBF從安裝目錄下復(fù)制一份到WINDOWS下的應(yīng)用數(shù)據(jù)目錄下,再使用它。HOME()目錄下會(huì)有相同的一份,到底用的是哪一份,以系統(tǒng)變量_FOXCODE為準(zhǔn),也可以重新設(shè)置。
可以通過設(shè)置_VFP.EditorOptions屬性來打開或關(guān)閉智能感應(yīng)功能,賦"lq"可分別關(guān)閉成員列表與快速提示。小寫為關(guān)閉,大寫為打開。
7.總結(jié)
智能感應(yīng)雖然是7.0版才開始有的,比其它的編程軟件晚,但一開始就有強(qiáng)大的功能,更有意義的是它的功能是表FOXCODE.DBF的內(nèi)容來實(shí)現(xiàn)的,因此用戶可以通過修改或增加表的記錄來增加系統(tǒng)智能感應(yīng)的功能,達(dá)到了二次開發(fā)的目的,這一點(diǎn)是任何其它語言所不能達(dá)到的。
VFP的這種特性給編程帶來了方便,若充分利用其功能,可以做到事半功倍的效果。文中提到的程序與腳本,都已在VFP7.0版中調(diào)試成功。