?? 數據庫技巧4.txt
字號:
序號 內 容
1 為VFP設計一個進度條類
2 如何有效率的設置控件屬性?
3 如何顯示垂直的標簽?
4 使用報表打印時,如何控制打印頁數及范圍?
5 用VFP建立適用不同分辨率的菜單
6 在VFP應用程序中如何取得現有的磁盤代號?
7 創建不帶有標題欄的頂層表單實例
8 Visual FoxPro 3.0中背景音樂的實現
9 在VFP中如何設計EXCEL容器對象
10 如何在VFP中判斷目前進入網絡的使用者是誰?
11 Visual FoxPro編程技巧
12 VFP5.0報表生成器使用技巧
13 使用VFP的_SCREEN對象
14 VFP3.0的多媒體編程實例二則
15 VFP中實現背景音樂的幾種方法
1、為VFP設計一個進度條類
作者:江永忠
在應用程序中使用一個進度條可以直觀形象地顯示當前處理完成的百分率,此功能的傳統實現方法
是在程序源代碼中直接處理,這顯然是一項繁重而缺乏靈活性的工作。為此,筆者在目前較為流行的VFP3.0
下編寫了一個具有數字和圖形雙重顯示功能的進度條類,對應用程序而言,其調用與標準控件完全一致,并
且全面支持可視化編程。
?。保㈩? 進度條類應該包含兩個對象:一個顯示處理過程的圖形和一個顯示處理完成百分率值的標簽。首先,
建立一個基于包容器類的自定義類,命名為ProgressBar,并在其內部建立一個圖形BarShape,高度
和ProgressBar相同,寬度預置為0,為便于百分率正文的顯示,將圖形設置為淺色(如淺藍色)。
加入標簽對象TxtLabel,位置居中,寬度足夠容下最大正文“100%”,顏色為深色。
鑒于在實際應用中要求本控件的尺寸是交互可變的,因此,對ProgressBar控件的Init事件的編碼為:
THIS.BarShape.Height = THIS.Height
THIS.BarShape.Width = 0
THIS.TxtLabel.Alignment = 2
THIS.TxtLabel.Left = (THIS.Width-THIS.TxtLabel.Width)/2
THIS.TxtLabel.Top = (THIS.Height-THIS.TxtLabel.Height)/2
THIS.TxtLabel.Caption = "0%"
THIS.Percent=0
自定義屬性Percent用于跟蹤記錄當前百分率的變化;自定義的方法Show用于同時以圖形和文本的方式
來顯示這種變化。
方法Show的代碼:
PARAMETERS lpPercent
*--合法性檢驗
IF lpPercent < 0
lpPercent = 0
ENDIF
IF lpPercent > 100
lpPercent = 100 ENDIF
*-刷新顯示
THIS.Percent = lpPercent
THIS.BarShape.Width = THIS.Width*(lpPercent/100)
THIS.TxtLabel.Caption = ALLT(STR(lpPercent))+"%"
THIS.Refresh
此時,進度條類設計完畢,將其存入自定義的類庫中,假設類庫名為:MyLib.VCX。
2.應用示例
一旦在VFP中注冊了自定義類庫MyLib.VCX,那么就能夠象對待標準控制一樣將其放入應用程序窗體中,
通??梢杂啥〞r器或循環來激活該控制。
例1:由定時器控制進度時的主要代碼:
... ...
THISFORM.Timer1.Interval = 1
THISFORM.Timer1.Enabled = .T.
THISFORM.Timer1.Reset
THISFORM.ProgressBar1.Show(0)
IF THISFORM.ProgressBar1.Percent
THISFORM.ProgressBar1.Show(THISFORM.ProgressBar1.Percent+1)
ELSE
THISFORM.Timer1.InterVal = 0
THISFORM.Timer1.Enabled = .F.
... ...
ENDIF
... ...
例2:由循環語句控制進度時的主要代碼
... ...
THISFORM.ProgressBar1.Show(0)
FOR m.i=1 TO n
THISFORM.ProgressBar1.Show(m.i/n*100)
... ...
處理循環體
... ...
ENDFOR
返回頁首
2、如何有效率的設置控件屬性?
對于設置某一控件的多項屬性,利用WITH...ENDWITH可提高程序的可讀性以執行效率,從而避免使用重復的thisform.object.property。
例如:我們設置某一FORM中的PAGE1中GRID的COLUMN3的TEXT1的多項屬性:
WITH THISFORM.PAGEFRAME.PAGE1.GRID.COLUMN3.TEXT1
This.enabled=.t.
This.resizable=.f.
This.forecolor=rgb(0,0,0)
This.backcolor=rgb(255,255,255)
Endif
如此一來將使得程序的效率提高,因為Visual FoxPro 參考某控件并一次變更所有屬性,而非一次參考一控件變更一屬性。
返回頁首
3、如何顯示垂直的標簽?
由于VFP中的標簽控件并不具備垂直顯示的選項,那么我們如何能使標簽垂直顯示呢?要實現這個功能,就要使用CHR(13)這個換行符,以下為一例:
設要顯示一垂直字串“管理系統”。
Label.caption="管”+CHR(13)+"理”+CHR(13)+"系”+CHR(13)+"統”
若要經常使用這功能,可按如下步驟:
于CAPTION中錄入要顯示的字串,并于INIT方法中加入
LOCAL Nlen,Cstring
Nlen=lenc(this.caption)
Cstring=""
For I=1 to nlen*2
Cstring=cstring+substr(this.caption,I,2)+chr(13)
I=I+1
Endfor
This.caption=cstring
返回頁首
4、使用報表打印時,如何控制打印頁數及范圍?
VFP5.0中有這樣的命令:REPORT FORM XXX RANGE nStartPage,nEndPage,nStartPage是打印的第一頁,nEndPage是打印的最后一頁,看到這里,大家可能明白,要設置打印范圍,只需更改nStartPage及nEndPage的值即可,現舉例如下:
REPORT FROM dlhome range 2,5 to printer &&打印第2~5頁
REPORT FROM dlhome range 2,2 to printer &&打印第2頁
返回頁首
5、用VFP建立適用不同分辨率的菜單
程序開發者開發的菜單一般僅適用于某些特定的分辨率,如果使用者的系統分辨率不同,將造成畫面上菜單過長或過短,為解決此問題一般都開發幾個分別適應不同分辨率下的菜單,但如此一來將造成一些不必要的麻煩,下面的程序將解決此問題。
1.首先在640*480分辨率下建立一新菜單
2.將下列代碼放在復合式物件的INIT METHOD中
LOCAL OLDHEIGHT,OLDWIRTH,CHANGEHEIGHT,CHANGEWIDTH
OLDHEIGHT=640
OLDWIDTH=480
CHANGEHEIGHT=0 &&新分辨率與640*480分辨率之HEIGHT差
CHANGEWIDTH=0 &&新分辨率與640*480分辨率之WIDTH差
?。猄YSMETRIC(1) &&得到目前分辨率HEIGHT
?。猄YSMETRIC(2) &&得到目前分辨率WIDTH
IF SYSTEMETRIC(1)!=OLDHEIGHT
THISFORM.LOCKSCREEN=.T.
CHANGEHEIGHT=SYSMETRIC(1)/OLDHEIGHT
CHANGEWIDTH=SYSMETRIC(2)/OLDWIDTH
?。ΓΩ牟藛瓮饪?
IF THIS.BASECLASS="FORM"
THIS.HEIGHT=THIS.HEIGHT*CHANGEHEIGHT
THIS.WIDTH =THIS.WIDTH*CHANGEWIDTH
THIS.TOP =THIS.TOP*CHANGEHEIGHT
THIS.LEFT =THIS.LEFT*CHANGEWIDTH
ENDIF
?。Γχ鹨桓腃ONTAINER內的控制項
FOR I=1 TO THIS.CONTROLCOUNT
WITH THIS.CONTROLS(I)
.HEIGHT=.HEIGHT*CHANGEHEIGHT
.WIDTH =.WIDTH*CHANGEWIDTH
.TOP =.TOP*CHANGEHEIGHT
.LEFT =.LEFT*CHANGEWIDTH
ENDWITH
ENDFOR
THISFORM.LOCKSCREEN=.F.
ENDIF
THISFORM.REFRESH
注:如果您預先設定最低分辨率為800*600
首先在800*600分辨率下建立一新菜單
把OLDHEIGHT=640改為OLDHEIGHT=800
把OLDWIDTH=480改為OLDWIDTH=600
返回頁首
6、在VFP應用程序中如何取得現有的磁盤代號?
要取得可用的磁盤代號,需要調用WIN32API來得到,利用WIN32API中的GetLogicalDrives()函數,GetLogicalDrives()函數會傳回一個值,其值中的每位若為1,則表示該磁盤已用,若為0則表示磁盤為可用,具體代碼如下:
Declare integer GetLogicalDrives in kernel32.dll as is_iriver_ready
Nreslut=is_driver_ready()
Cused_driver="已被用的磁盤代號有:"
Cavail_driver="可用的磁盤代號有:"
Nmask=1
For I=1 to 26
If bitand(nreslut,nmask)!=0
Cused_driver=cused_driver+chr(64+I)+","
Else
Cavail_driver=cvalil_driver+chr(64+I)+","
Endif
Nmask=bitlshift(nmask,1)
Next
Wait cused_driver+chr(13)+cavail_driver wind
返回頁首
7、創建不帶有標題欄的頂層表單實例
若要創建一個不帶標題欄的表單,如果把它當作表單類的實例來創建,可能會有一定困難。通常,通過如下設置可創建一個不帶標題的頂層表單:
? 將 ShowWindow 屬性設置為 2 (作為頂層表單)
? 將 BorderStyle 屬性設置為 2 (固定對話框)
? 將 Caption 屬性設置為空字符串。
? 將 MaxButton、MinButton、ControlBox 和 Movable 屬性設置為“假”(.F.)。
例如,用以下代碼產生一個不帶有標題欄的表單:
PUBLIC myForm
myForm = CREATEOBJECT("blankForm")
myForm.Show
RETURN
DEFINE CLASS blankForm AS form
ShowWindow = 2
BorderStyle = 2
Caption = ""
ControlBox = .F.
MaxButton = .F.
MinButton = .F.
Movable = .F.
ENDDEFINE
然而,表單顯示時帶有一個空標題欄。為了解決此問題,并生成不帶標題欄的表單,您可以先將 Caption 屬性設置為一個字符串值,然后在表單的 Init 方法程序中將它重置為空字符串。以下代碼對前例做了修改,可以正確顯示表單:
PUBLIC myForm
myForm = CREATEOBJECT("blankForm")
myForm.Show
RETURN
DEFINE CLASS blankForm AS form
ShowWindow = 2
BorderStyle = 2
Caption = "Testing form"
ControlBox = .F.
MaxButton = .F.
MinButton = .F.
Movable = .F.
PROCEDURE Init
THIS.Caption = ""
ENDPROC
ENDDEFINE
返回頁首
8、Visual FoxPro 3.0中背景音樂的實現
在使用Visual FoxPro 3.0編制應用程序時,我們可以利用OLE嵌套的方法很容易的為一個應用程序加入背
景音樂。
進入Visual FoxPro 3.0系統環境,在命令行窗口中鍵入CREATE FORM或在‘文件’菜單中選擇‘新建’、
'表單’,即可建立一個新的表單。表單建立后可對表單進行一些設置,如表單屏幕大小、表單底圖、
表單上的按鈕、表單上要顯示的文字等,做出一個漂亮的屏幕界面。點擊‘表單控制’上的‘OLE容器’
,并將其拖至FORM中任意位置。在‘插入對象’窗口中選擇‘媒體剪輯’,選中‘以圖標顯示’欄(必
須選中此欄,否則無法將其隱藏起來),按‘確認’鍵退出。
在‘媒體播放機’窗口中,選擇‘文件’、‘打開’,從文件列表中選擇想要作為背景音樂的聲音文件。
作為背景音樂,必須是程序啟動時開始播放,直到程序結束。由于音樂文件一般不是很長,所以要求循環
播放,此時可選擇‘編輯’菜單中的‘選項’,在選項窗口中選中‘重復播放’和去掉‘重放的控制條’
前的選中標記,確認后退出。
回到Visual FoxPro 3.0系統環境,按下鼠標右鍵,在彈出菜單中點擊‘屬性’欄調出屬性窗口。選擇
'Olecontrol1'對象,將它的‘Visible'屬性設為.F.,‘Autosize'屬性設為.F.。再按下鼠標右鍵,
在彈出菜單中點擊‘代碼’欄進入過程書寫窗口,選擇‘Form1'對象的‘Activate'過程,在過程欄中
加入:
Thisform.Olecontrol1.Doverb(0)
點擊Form1窗體,按下鼠標右鍵,在彈出菜單中點擊‘運行’,即可運行此程序。
返回頁首
9、在VFP中如何設計EXCEL容器對象
首先要在工作平臺中安裝EXCEL應用系統,進入VFP,利用FORM DESIGNE新建一表單FORM,選擇表單設計器中的OLE容器控件,此時激活Insert Object對話框
此時選擇EXCEL工作表即可
ole container對象屬性如下
屬性名稱
設定值
說明
Autosize
.T.
設定OLE對象大小可隨其中插入的對象自動調整尺寸
AutoVerbMenu
.T.
設定激活OLE對象鼠標支持的快捷菜單
OLETypeAllowed
-1 Empty
-1為預設值,對應插入對象的鏈接類型,如鏈接、嵌入或兩者均設定,該屬性為只讀屬性
Autoactive
0-Manual
將OLE執行狀態高定為程序執行,即手工方式。
同理,可設計一個播放影片的OLE容器對象,請于實踐中驗證。
10、如何在VFP中判斷目前進入網絡的使用者是誰?
運用VFP所提供的SYS(0)與ID()函數可完成此項工作,SYS(0)與ID()函數的作用是完全相同的,它們都是于網絡環境中傳回所屬工作站的電腦名稱與目前進入網絡的使用者名稱?,F舉例如下:
設有一名為SLGD01的WIN95工作站以使用者名稱A01進入網絡,接著運行VFP,則在VFP中執行SYS(0)函數時將傳回:
SLGD01 #A01
同樣,ID()可得相同值。
返回頁首
11、Visual FoxPro編程技巧(一)
一、定制桌面
是否感覺到VFP提供的桌面有些不合你的口味?如果不喜歡那些最大最小化和關閉按鈕,試試在你的應用程序初始化時加入如下代碼段:
with_ SCREEN
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -