朱運(yùn)喜(河北省.任丘市)
---- 一.選擇網(wǎng)絡(luò)打印機(jī) ---- 筆者單位裡的局域網(wǎng)上安裝有多臺(tái)網(wǎng)絡(luò)打印機(jī),在使用VFP 6.0編製的程序進(jìn)行打印操作時(shí),是否可以選擇其中的某一臺(tái)空閒的網(wǎng)絡(luò)打印機(jī)進(jìn)行打印,而不一定非要從默認(rèn)打印機(jī)輸出,從而提高工作效率呢?經(jīng)筆者研究,在執(zhí)行命令:Report From … To Printer 之前,先執(zhí)行下列程序代碼:Set Printer To Name Getprinter(),就可以調(diào)用操作系統(tǒng)的"打印設(shè)定"對(duì)話框,用戶利用該窗口即可達(dá)到靈活選擇空閒打印機(jī)進(jìn)行打印輸出的功能。(註:可供選擇的打印機(jī)名是用戶計(jì)算機(jī)上已安裝好的打印機(jī)名。) ---- 二.恢復(fù)丟失了的FPT文件 ---- 由於誤操作,將自由表的備註文件刪除,致使自由表無(wú)法打開。遇到這種情況我們可採(cǎi)用下述方法解決: ---- 1.創(chuàng)建一個(gè)新的自由表,且該自由表只含一個(gè)字段,其類型為備註型。關(guān)閉該自由表,將其擴(kuò)展名為FPT的備註文件複製給誤刪除的自由表的備註文件,或?qū)⒃搨湓]文件改名為誤刪除的自由表的備註文件即可。運(yùn)行下面的程序同樣也可以恢復(fù)丟失了的FPT 文件: accept '請(qǐng)輸入丟失了.FPT 文件的自由表名稱(不帶擴(kuò)展名):' to namef namef=trim(namef)+'.bbb' crea dbf &namef (aa m) use dele file &namef ---- 2.用VFP低級(jí)文件函數(shù)創(chuàng)建一個(gè)空的FPT文件,原自由表即可打開。程序清單如下: accept '請(qǐng)輸入丟失了.FPT 文件的自由表名稱(不帶擴(kuò)展名):' 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文件的自由表建立了一個(gè)新的FPT文件,原FPT文件中的內(nèi)容已經(jīng)丟失,無(wú)法恢復(fù)。在實(shí)際操作中若遇到這種情況,最好是恢復(fù)原來(lái)的FPT文件,若原FPT文件無(wú)法恢復(fù)時(shí)再採(cǎi)用上述方法。 ---- 三.脫離VFP運(yùn)行程序 ---- 利用VFP 6.0創(chuàng)建的應(yīng)用程序,被編譯成可執(zhí)行程序後,若要使其脫離VFP環(huán)境獨(dú)立運(yùn)行,除了我們所知道的在應(yīng)用程序目錄中需包含一個(gè)名為"CONFIG.FPW"的配置文件外,經(jīng)筆者試驗(yàn)發(fā)現(xiàn)還必須包含"VFP6R.DLL"、"VFP6RCHS.DLL"、"VFP6RENU.DLL"這三個(gè)動(dòng)態(tài)鏈接庫(kù)文件。這三個(gè)文件在"Windows ystem"目錄下,用戶可直接將其複製到自己的應(yīng)用程序目錄中。最後再經(jīng)過(guò)編譯形成可執(zhí)行程序,運(yùn)行安裝嚮導(dǎo)創(chuàng)建發(fā)佈磁盤,我們開發(fā)的小應(yīng)用程序就可以堂堂正正地在Win 98下安裝運(yùn)行了。 ---- 四.低級(jí)文件函數(shù)加密數(shù)據(jù)庫(kù) ---- VFP有一個(gè)十分薄弱的環(huán)節(jié)就是數(shù)據(jù)庫(kù)的保密性差。由於.DBF文件都是敞開式的,甚至用DOS中最簡(jiǎn)單的TYPE命令都可以瀏覽,因此,筆者從以下兩方面對(duì)數(shù)據(jù)進(jìn)行加密: ---- 1.在向自由表中增加數(shù)據(jù)時(shí),就進(jìn)行加密,即更新自由表時(shí)就對(duì)數(shù)據(jù)進(jìn)行加密,在讀取數(shù)據(jù)時(shí)再解密。 ---- 2.用VFP提供的低級(jí)文件函數(shù)進(jìn)行加密,加密後的文件無(wú)法打開、瀏覽,使用時(shí),再執(zhí)行該加密程序即可將加密的自由表還原。 **加密數(shù)據(jù)庫(kù)程序(同時(shí)也是解密程序)** set talk off close all clea @10,10 say "請(qǐng)輸入要加密的 自由表名(含擴(kuò)展名):" 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 ---- 五.簡(jiǎn)易設(shè)置TextBox對(duì)象的輸入長(zhǎng)度 ---- 在以前的Xbase語(yǔ)法中,我們可以通過(guò)Picture參數(shù)定義某變量或文本欄的輸入長(zhǎng)度格式,而在VFP中的TextBox對(duì)像中則支持了Format和InputMask屬性來(lái)定義輸入的格式。我們可以使用比較原始的方法來(lái)進(jìn)行設(shè)定,比如當(dāng)要求輸入有20個(gè)欄位的文本框?qū)ο駮r(shí),我們可以在此對(duì)象的InputMask屬性中定義為InputMask="XXXXXXXXXXXXXXXXXXXX"。 ---- 但是這樣的設(shè)定方法非常麻煩,尤其是當(dāng)面對(duì)更長(zhǎng)的字符串輸入時(shí)更是不方便。其實(shí)我們完全可以用另外一種方法來(lái)把這樣的需求設(shè)計(jì)過(guò)程變得很簡(jiǎn)單,下面就具體介紹一下這種簡(jiǎn)易的快速設(shè)定輸入欄位的方法。 ---- 利用Replicate()函數(shù)設(shè)定輸入長(zhǎng)度這裡我們同樣利用了對(duì)象的InputMask屬性來(lái)定義輸入格式和輸入長(zhǎng)度,但是當(dāng)對(duì)象的輸入比較長(zhǎng)時(shí),則可以借助算術(shù)表達(dá)式的方式來(lái)對(duì)其進(jìn)行設(shè)定。通過(guò)屬性窗口中的InputMask屬性建立表達(dá)式對(duì)話框,我們可以利用Replicate()函數(shù)設(shè)定重複的"X"的個(gè)數(shù)即可(本例為20)。完成後回到屬性設(shè)置窗口,我們可以看到在InputMask屬性欄中出現(xiàn)了"=Replicate(20)"位值的表達(dá)式,這樣,我們就輕鬆地完成了長(zhǎng)字符輸入的長(zhǎng)度控制。由此我們也可以體會(huì)到善於使用表達(dá)式給我們帶來(lái)的方便之處。 ---- 六.中文文本框的設(shè)計(jì)方法 ---- 在程序開發(fā)過(guò)程中,我們經(jīng)常要設(shè)計(jì)一些文本框,而且這些文本框要求只能輸入中文。在這種情況下,通常需手工啟動(dòng)某一種中文輸入法。如果軟件能夠自動(dòng)啟動(dòng)缺省的中文輸入法,那麼將會(huì)給編程人員帶來(lái)很大的方便。下面的類便能實(shí)現(xiàn)這一功能,具體的設(shè)計(jì)步驟如下: ---- 1.創(chuàng)建一個(gè)新類,其基類是"TextBox",類名為"中文TextBox",存儲(chǔ)於"myclass"類庫(kù)中。 ---- 2.進(jìn)入類設(shè)計(jì)器後,設(shè)置"中文TextBox"的各項(xiàng)屬性,如字體、顏色等。 ---- 3.設(shè)計(jì)GotFocus事件,代碼為: =IMESTATUS(1) 表示當(dāng)光標(biāo)移到此框後,自動(dòng)啟動(dòng)中文輸入法。 ---- 4.設(shè)計(jì)LostFocus事件,代碼為: =IMESTATUS(0) 表示當(dāng)光標(biāo)移開此框後,自動(dòng)關(guān)閉中文輸入法。設(shè)計(jì)好後,保存到文件即可。 ---- 七.立體框類的設(shè)計(jì)方法 ---- 在VFP的標(biāo)準(zhǔn)類裡提供了一個(gè)形狀控制類(Shape),可以簡(jiǎn)單地將S hape的"SpecialEf fect"屬性設(shè)置為"0-3D",將"BackStyle"屬性設(shè)為 "0-透明",來(lái)設(shè)計(jì)三維立體框。 ---- 然而這樣的三維立體框太單調(diào),缺少變化。通過(guò)以下的設(shè)計(jì)方法, 我們可以作出類似於VB中的Three_D Panel那樣的效果。具體設(shè)計(jì)步驟如下: ---- 1.新建一個(gè)類,基類是"Container",類名為"Three_Panel",存儲(chǔ)於"myclass"類庫(kù)中。 ---- 2.進(jìn)入類設(shè)計(jì)器後,設(shè)置"Three_ panel"的各項(xiàng)屬性,如表1所示。屬性設(shè)計(jì)完畢後,存入文件,就可以得到凸起效果的邊框類。 ---- 3.通過(guò)調(diào)整"SpecialEffect"的值為"1-凹下",可以設(shè)計(jì)凹下效果的邊框類(three_p anel_ao)。 調(diào)整其餘參數(shù)可以得到不同效果的邊框。 ---- 八.在程序中播放動(dòng)畫 ---- 我們知道,VFP只支持靜止的圖片,無(wú)法直接播放GIF動(dòng)畫。但網(wǎng)上許多有趣而華麗的GIF動(dòng)畫的確令人心動(dòng),如何將這些動(dòng)畫插入到你的VFP程序中,讓你的程序更吸引人呢? ---- 其實(shí)很簡(jiǎn)單,將GIF動(dòng)畫分解成各單獨(dú)的靜止的GIF或BMP圖片,然後在VFP使用計(jì)時(shí)器讓這些靜止的圖片輪流出現(xiàn),就產(chǎn)生動(dòng)畫效果了。 ---- 將GIF動(dòng)畫分解為靜止圖片的軟件有很多,在網(wǎng)上很容易找到,如Animagic GIF 等。分解出來(lái)的圖片我們分別以a0.bmp、a1.bmp……這樣的形式保存。在表單中添加計(jì)時(shí)器TIMER1,TIMER1的Interval屬性設(shè)為100,Enabled屬性設(shè)為.T.,再添加Image1控件,其Backstyle屬性設(shè)為0(透明),Stretch也設(shè)為0(裁剪)。 ---- 在FORM的LOAD過(guò)程中寫代碼: Public I , N I=0 N=5(靜止圖片的總共數(shù)目) 在TIMER1的TIMER過(guò)程中寫代碼: Local j i = mod (i+1,n) j = alltrim( str(i) ) thisform.image1.picture="a"-j-".bmp" 運(yùn)行表單,我們就可以看到熟悉的GIF動(dòng)畫了。 ---- 九.粘貼VFP頂層表單 ---- 當(dāng)你將表單設(shè)置為頂層表單並獨(dú)立運(yùn)行於Windows下,就會(huì)發(fā)現(xiàn)表單中複製粘貼功能失效,給實(shí)際工作造成極大的不便,從而使編製的軟件達(dá)不到專業(yè)水準(zhǔn)。通過(guò)認(rèn)真分析與實(shí)踐,筆者認(rèn)為,造成這一問(wèn)題的原因是微軟設(shè)計(jì)VFP時(shí),只考慮了位於系統(tǒng)選單下的表單的複製和粘貼情況,即位於系統(tǒng)選單下的表單可使用複製及粘貼熱鍵,而處?kù)禬indows下的表單完全脫離了系統(tǒng)選單的控制,因此複製及粘貼熱鍵失效。 ---- 解決的辦法是可在表單的控件(本文舉例為文本框)中,為KeyPress Event編寫如下事件處理程序,該事件處理程序首先將選擇內(nèi)容複製到Windows剪貼板上,然後再將剪貼板上的內(nèi)容添加到控件中。 KeyPress Event LPARAMETERS nKeyCode, nShiftAltCtrl if nkeycode=3 && CTRL+C 複製 -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)控件提供的基本功能,通過(guò)單擊向上或向下箭頭,而達(dá)到微調(diào)控件的最大或最小值時(shí),如繼續(xù)單擊向上或向下箭頭,將保持最大或最小值不變。筆者通過(guò)對(duì)Spinner控件屬性和事件的分析,用編程的方法實(shí)現(xiàn)了循環(huán)微調(diào)控件功能。 ---- 循環(huán)微調(diào)控件(CycleSpinner)所實(shí)現(xiàn)的功能是:當(dāng)單擊向上箭頭而達(dá)到最大值時(shí),再單擊向上箭頭,能自動(dòng)跳到最小值;當(dāng)單擊向下箭頭而達(dá)到最小值時(shí),能自動(dòng)跳到最大值;其餘功能均繼承Spinner基類的功能。具體實(shí)現(xiàn)方法如下:利用表單控件,在表單中設(shè)計(jì)一個(gè)微調(diào)按鈕,並設(shè)置如下屬性: SpinnerHighValue=Max &&Max應(yīng)小於Spinner基類所 &&提供的最大默認(rèn)值 SpinnerLowValue=Min &&Min應(yīng)大於Spinner基類所 &&提供的最小默認(rèn)值 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 ---- 再將其作為類保存起來(lái),添加到你的類庫(kù)中。 ---- 若你在編程中,需用此功能,就可直接用此循環(huán)微調(diào)控件類了。 |
|
來(lái)自: Alkaid2015 > 《75.VFP狐仙◆》