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