一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VFP的十個(gè)實(shí)用技巧

 Alkaid2015 2013-11-05
朱運(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)控件類了。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲国产av国产av| 欧美成人黄色一级视频| 91欧美视频在线观看免费| 人妻偷人精品一区二区三区不卡| 午夜亚洲精品理论片在线观看 | 久久精品中文字幕人妻中文| 91亚洲精品综合久久| 麻豆视传媒短视频在线看| 国产激情国产精品久久源| 欧美午夜视频免费观看| 国产偷拍精品在线视频| 麻豆精品在线一区二区三区| 国产老熟女乱子人伦视频| 欧美一区二区口爆吞精| 出差被公高潮久久中文字幕| 欧美日韩亚洲国产av| 尹人大香蕉一级片免费看| 中国黄色色片色哟哟哟哟哟哟| 亚洲中文字幕亲近伦片| 欧美一区二区三区在线播放| 国产91人妻精品一区二区三区| 夫妻性生活一级黄色录像 | 妻子的新妈妈中文字幕| 国产麻豆成人精品区在线观看| 一区二区三区在线不卡免费| 女同伦理国产精品久久久| 丰满熟女少妇一区二区三区| 午夜精品国产精品久久久| 国产欧美日韩精品一区二| 日韩成人中文字幕在线一区| 99久久人妻中文字幕| 日韩精品一级一区二区| 国产精品午夜小视频观看| 高潮少妇高潮久久精品99| 欧美一区日韩一区日韩一区| 在线一区二区免费的视频| 亚洲国产一级片在线观看| 国自产拍偷拍福利精品图片| 午夜免费精品视频在线看| 东京热电东京热一区二区三区| 狠色婷婷久久一区二区三区|