|
VFP 6.0的十個實用技巧
出處:網(wǎng)絡(luò) 一.選擇網(wǎng)絡(luò)打印機 筆者單位里的局域網(wǎng)上安裝有多臺網(wǎng)絡(luò)打印機,在使用VFP 6.0編制的程序進行打印操作時,是否可以選擇其中的某一臺空閑的網(wǎng)絡(luò)打印機進行打印,而不一定非要從默認打印機輸出,從而提高工作效率呢?經(jīng)筆者研究,在執(zhí)行命令:Report From … To Printer 之前,先執(zhí)行下列程序代碼:Set Printer To Name Getprinter(),就可以調(diào)用操作系統(tǒng)的"打印設(shè)定"對話框,用戶利用該窗口即可達到靈活選擇空閑打印機進行打印輸出的功能。(注:可供選擇的打印機名是用戶計算機上已安裝好的打印機名。) 二.恢復(fù)丟失了的FPT文件
由于誤操作,將自由表的備注文件刪除,致使自由表無法打開。遇到這種情況我們可采用下述方法解決: 1.創(chuàng)建一個新的自由表,且該自由表只含一個字段,其類型為備注型。關(guān)閉該自由表,將其擴展名為FPT的備注文件復(fù)制給誤刪除的自由表的備注文件,或?qū)⒃搨渥⑽募拿麨檎`刪除的自由表的備注文件即可。運行下面的程序同樣也可以恢復(fù)丟失了的FPT 文件: accept '請輸入丟失了.FPT 文件的自由表名稱(不帶擴展名):' to namef
namef=trim(namef)+'.bbb'
crea dbf &namef (aa m)
use
dele file &namef
2.用VFP低級文件函數(shù)創(chuàng)建一個空的FPT文件,原自由表即可打開。程序清單如下: accept '請輸入丟失了.FPT 文件的自由表名稱(不帶擴展名):' to namef
namef=trim(namef)+'.FPT'
hand=fcreate(namef)
abc=repl(chr(0),3)+chr(8)+
repl(chr(0),3)+'@'+repl(chr(0),504)
=fwrite(hand,abc)
=fclose(hand)
return
上述方法只是為丟失了FPT文件的自由表建立了一個新的FPT文件,原FPT文件中的內(nèi)容已經(jīng)丟失,無法恢復(fù)。在實際操作中若遇到這種情況,最好是恢復(fù)原來的FPT文件,若原FPT文件無法恢復(fù)時再采用上述方法。
三.脫離VFP運行程序
利用VFP 6.0創(chuàng)建的應(yīng)用程序,被編譯成可執(zhí)行程序后,若要使其脫離VFP環(huán)境獨立運行,除了我們所知道的在應(yīng)用程序目錄中需包含一個名為"CONFIG.FPW"的配置文件外,經(jīng)筆者試驗發(fā)現(xiàn)還必須包含"VFP6R.DLL"、"VFP6RCHS.DLL"、"VFP6RENU.DLL"這三個動態(tài)鏈接庫文件。這三個文件在"Windows\System"目錄下,用戶可直接將其復(fù)制到自己的應(yīng)用程序目錄中。最后再經(jīng)過編譯形成可執(zhí)行程序,運行安裝向?qū)?chuàng)建發(fā)布磁盤,我們開發(fā)的小應(yīng)用程序就可以堂堂正正地在Win 98下安裝運行了。 四.低級文件函數(shù)加密數(shù)據(jù)庫 VFP有一個十分薄弱的環(huán)節(jié)就是數(shù)據(jù)庫的保密性差。由于.DBF文件都是敞開式的,甚至用DOS中最簡單的TYPE命令都可以瀏覽,因此,筆者從以下兩方面對數(shù)據(jù)進行加密:
1.在向自由表中增加數(shù)據(jù)時,就進行加密,即更新自由表時就對數(shù)據(jù)進行加密,在讀取數(shù)據(jù)時再解密。
2.用VFP提供的低級文件函數(shù)進行加密,加密后的文件無法打開、瀏覽,使用時,再執(zhí)行該加密程序即可將加密的自由表還原。 **加密數(shù)據(jù)庫程序(同時也是解密程序)** set talk off
close all
clea
@10,10 say "請輸入要加密的
自由表名(含擴展名):" get file1 defa ' '
read
handle=fopen("&file1",2)
if handle< 0
@14,10 say "不能打開文件!"
=inkey(0)
retu
endif
j=0
do while .not.feof(handle)
bb=fread(handle,1)
cc=chr(mod(asc(bb)+128,256))
=fseek(handle,j)
=fwrite(handle,cc)
asc(bb),asc(cc)
j=j+1
enddo
=fclose(handle)
close all
retu
五.簡易設(shè)置TextBox對象的輸入長度 在以前的Xbase語法中,我們可以通過Picture參數(shù)定義某變量或文本欄的輸入長度格式,而在VFP中的TextBox對象中則支持了Format和InputMask屬性來定義輸入的格式。我們可以使用比較原始的方法來進行設(shè)定,比如當要求輸入有20個欄位的文本框?qū)ο髸r,我們可以在此對象的InputMask屬性中定義為InputMask="XXXXXXXXXXXXXXXXXXXX"。
但是這樣的設(shè)定方法非常麻煩,尤其是當面對更長的字符串輸入時更是不方便。其實我們完全可以用另外一種方法來把這樣的需求設(shè)計過程變得很簡單,下面就具體介紹一下這種簡易的快速設(shè)定輸入欄位的方法。 利用Replicate()函數(shù)設(shè)定輸入長度這里我們同樣利用了對象的InputMask屬性來定義輸入格式和輸入長度,但是當對象的輸入比較長時,則可以借助算術(shù)表達式的方式來對其進行設(shè)定。通過屬性窗口中的InputMask屬性建立表達式對話框,我們可以利用Replicate()函數(shù)設(shè)定重復(fù)的"X"的個數(shù)即可(本例為20)。完成后回到屬性設(shè)置窗口,我們可以看到在InputMask屬性欄中出現(xiàn)了"=Replicate(20)"位值的表達式,這樣,我們就輕松地完成了長字符輸入的長度控制。由此我們也可以體會到善于使用表達式給我們帶來的方便之處。 六.中文文本框的設(shè)計方法
在程序開發(fā)過程中,我們經(jīng)常要設(shè)計一些文本框,而且這些文本框要求只能輸入中文。在這種情況下,通常需手工啟動某一種中文輸入法。如果軟件能夠自動啟動缺省的中文輸入法,那么將會給編程人員帶來很大的方便。下面的類便能實現(xiàn)這一功能,具體的設(shè)計步驟如下:
1.創(chuàng)建一個新類,其基類是"TextBox",類名為"中文TextBox",存儲于"myclass"類庫中。
2.進入類設(shè)計器后,設(shè)置"中文TextBox"的各項屬性,如字體、顏色等。 3.設(shè)計GotFocus事件,代碼為: =IMESTATUS(1) 表示當光標移到此框后,自動啟動中文輸入法。 4.設(shè)計LostFocus事件,代碼為: =IMESTATUS(0) 表示當光標移開此框后,自動關(guān)閉中文輸入法。設(shè)計好后,保存到文件即可。 七.立體框類的設(shè)計方法 在VFP的標準類里提供了一個形狀控制類(Shape),可以簡單地將S hape的"SpecialEf fect"屬性設(shè)置為"0-3D",將"BackStyle"屬性設(shè)為 "0-透明",來設(shè)計三維立體框。 然而這樣的三維立體框太單調(diào),缺少變化。通過以下的設(shè)計方法, 我們可以作出類似于VB中的Three_D Panel那樣的效果。具體設(shè)計步驟如下: 1.新建一個類,基類是"Container",類名為"Three_Panel",存儲于"myclass"類庫中。 2.進入類設(shè)計器后,設(shè)置"Three_ panel"的各項屬性,如表1所示。屬性設(shè)計完畢后,存入文件,就可以得到凸起效果的邊框類。 3.通過調(diào)整"SpecialEffect"的值為"1-凹下",可以設(shè)計凹下效果的邊框類(three_p anel_ao)。 調(diào)整其余參數(shù)可以得到不同效果的邊框。 八.在程序中播放動畫 我們知道,VFP只支持靜止的圖片,無法直接播放GIF動畫。但網(wǎng)上許多有趣而華麗的GIF動畫的確令人心動,如何將這些動畫插入到你的VFP程序中,讓你的程序更吸引人呢?
其實很簡單,將GIF動畫分解成各單獨的靜止的GIF或BMP圖片,然后在VFP使用計時器讓這些靜止的圖片輪流出現(xiàn),就產(chǎn)生動畫效果了。
將GIF動畫分解為靜止圖片的軟件有很多,在網(wǎng)上很容易找到,如Animagic GIF 等。分解出來的圖片我們分別以a0.bmp、a1.bmp……這樣的形式保存。在表單中添加計時器TIMER1,TIMER1的Interval屬性設(shè)為100,Enabled屬性設(shè)為.T.,再添加Image1控件,其Backstyle屬性設(shè)為0(透明),Stretch也設(shè)為0(裁剪)。 在FORM的LOAD過程中寫代碼:
Public I , N I=0
N=5(靜止圖片的總共數(shù)目)
在TIMER1的TIMER過程中寫代碼:
Local j
i = mod (i+1,n)
j = alltrim( str(i) )
thisform.image1.picture="a"-j-".bmp"
運行表單,我們就可以看到熟悉的GIF動畫了。
九.粘貼VFP頂層表單 當你將表單設(shè)置為頂層表單并獨立運行于Windows下,就會發(fā)現(xiàn)表單中復(fù)制粘貼功能失效,給實際工作造成極大的不便,從而使編制的軟件達不到專業(yè)水準。通過認真分析與實踐,筆者認為,造成這一問題的原因是微軟設(shè)計VFP時,只考慮了位于系統(tǒng)選單下的表單的復(fù)制和粘貼情況,即位于系統(tǒng)選單下的表單可使用復(fù)制及粘貼熱鍵,而處于Windows下的表單完全脫離了系統(tǒng)選單的控制,因此復(fù)制及粘貼熱鍵失效。
解決的辦法是可在表單的控件(本文舉例為文本框)中,為KeyPress
Event編寫如下事件處理程序,該事件處理程序首先將選擇內(nèi)容復(fù)制到Windows剪貼板上,然后再將剪貼板上的內(nèi)容添加到控件中。 KeyPress Event LPARAMETERS nKeyCode, nShiftAltCtrl
if nkeycode=3
&& CTRL+C 復(fù)制
-cliptext=this.seltext
endif
if nkeycode=22
&& CTRL+V 粘貼
do case
case this.selstart=0
this.value=-cliptext+this.value
case this.selstart〉=1
and this.selstart〈=len(this.value)
this.value=subs(this.value,1,this.selstart)+
-cliptext+subs(this.value,this.selstart+1)
endcase
endif
thisform.grid1.column1.setfocus()
sele recetem
if not eof()
skip
endif
thisform.refresh
十.為VFP添加循環(huán)微調(diào)控件類 在VFP編程中,微調(diào)控件是最常用的控件之一。按照微調(diào)控件提供的基本功能,通過單擊向上或向下箭頭,而達到微調(diào)控件的最大或最小值時,如繼續(xù)單擊向上或向下箭頭,將保持最大或最小值不變。筆者通過對Spinner控件屬性和事件的分析,用編程的方法實現(xiàn)了循環(huán)微調(diào)控件功能。
循環(huán)微調(diào)控件(CycleSpinner)所實現(xiàn)的功能是:當單擊向上箭頭而達到最大值時,再單擊向上箭頭,能自動跳到最小值;當單擊向下箭頭而達到最小值時,能自動跳到最大值;其余功能均繼承Spinner基類的功能。具體實現(xiàn)方法如下:利用表單控件,在表單中設(shè)計一個微調(diào)按鈕,并設(shè)置如下屬性: SpinnerHighValue=Max
&&Max應(yīng)小于Spinner基類所
&&提供的最大默認值
SpinnerLowValue=Min
&&Min應(yīng)大于Spinner基類所
&&提供的最小默認值
Value=1
Name='CycleSpinner'
在Init事件中寫入如下代碼:
This.SpinnerHighValue=This.
SpinnerHighValue+This.Increment
This.SpinnerLowValue=This.
SpinnerLowValue-This.Increment
在InteractiveChange事件中寫入如下代碼:
If This.Value=This.SpinnerHighValue
This.Value=Int(This.
SpinnerLowValue+This.Increment)
Endif
If This.Value=This.SpinnerLowhValue
This.Value=Int(This.
SpinnerHighValue-This.Increment)
Endif
Thisform.Refresh
再將其作為類保存起來,添加到你的類庫中。 若你在編程中,需用此功能,就可直接用此循環(huán)微調(diào)控件類了。 本文來自編程入門網(wǎng):http://www./vfpwz/jyhz/hz9.htm |
|
|