|
***********************************
*表單屬性設(shè)置 *********************************** WITH thisform.FontName = 宋體 thisform.FontSize = 10 thisform.ForeColor = gb( 255,255 ,255 ) thisform.AutoCenter =.T. thisform.Width = 600 thisform.Height =400 thisform.BorderStyle = 0 && 普通 thisform.MaxButton =.f. thisform.MinButton =.f. thisform.MDIForm =.f. &&是否是多文檔界面 thisform.WindowState = 2 &&0為普通、1為最小化、2 為最大化 thisform.ShowWindow = 1 && 1 在頂層窗口內(nèi)、2、為頂層窗口 主表單設(shè)為2,其余為1 thisform.BackColor = gb(0,0,0) thisform.Name ="cName" thisform.Caption ="我的表單" ENDWITH && do和 with 中間無空格 * form 方法 thisform.Hide thisform.Show * 文本框?qū)傩?br>WITH thisform.text1.Alignment = 2 && 居中 thisform.text1.FontSize = 12 thisform.text1.ForeColor =GB(255,255,255) thisform.text1.BorderColor = GB(0,255,0) ENDWITH ***************************************************** * 用for.....endfor 對多文本框一次性設(shè)置 n=0 FOR n = 1 TO 10 WITH thisform.text&n.Alignment = 2 && 居中 thisform.text&n.FontSize = 12 thisform.text&n.ForeColor =GB(255,255,255) thisform.text&n.BorderColor = GB(0,255,0) ENDWITH n=n+1 ENDFOR * 用復(fù)制的方法,可以使各個文本框?qū)傩砸恢?/div> *
*標(biāo)簽設(shè)置 WITH thisform.label1.Caption = "顯示文本"
thisform.label1.Alignment = 2 && 居中 thisform.label1.ForeColor = BG(255,255,255) thisform.label1.fontsize = 12 ENDWITH * ******************************** *數(shù)據(jù)轉(zhuǎn)換問題 * 通常文本框是字符型,因此:轉(zhuǎn)換到日期值: *dDate1 = ctod(alltrim(thisform.tEXT1.Value )) *dDate2 = ctod(alltrim(thisform.tEXT2.Value )) *文本框轉(zhuǎn)換成數(shù)值 iValue = VAL(ALLTRIM(thisform.teXT1.Value )) && iValue 是數(shù)值型變量 ********************************** * 在表單中進(jìn)行操作時,對于多個標(biāo)簽、文本框添加時,采用復(fù)制的方法。以后運(yùn)用菜單上的格式.....對齊等。。。 ********************************** * 組合框和復(fù)選框:關(guān)鍵二點(diǎn):一、選值來于何處。二、值存于何表中的字段 * 主要用于為表輸入數(shù)據(jù)、提供查詢條件。 *將數(shù)據(jù)表加入環(huán)境 * cValue = ALLTRIM(thisform.combo1.DisplayValue ) && 字符型 需去前后空格 * cValue = alltrim(thisform.list1.DisplayValue) && 字符型 需去前后空格 * 要使用在選中時改變屬性來美化效果,需要控件:thisform.combo1_InteractiveChange 事件中設(shè)置 *********************************** *設(shè)置:一、在表中選值 thisform.combo1.RowSource = 表名1.字段名 thisform.combo1.RowSourceType = 6 && 字段 thisform.combo1.ControlSource = 表名2.字段名 && 用于接收combo1值的主表和字段 thisform.combo1.SpecialEffect= 1 && =1 平面,=0 三維 thisform.combo1.ListCount = 10 && 列表顯示的條數(shù)為10 *** 二、手工設(shè)定: thisform.combo1.RowSource = "a,b,c,d" && 在a,b,c,d中選 取值 thisform.combo1.RowSourceType = 1 && =1 值 thisform.combo1.ControlSource = 表名2.字段名 && 用于接收combo1值的主表和字段 thisform.combo1.SpecialEffect= 1 && =1 平面,=0 三維 thisform.combo1.ListCount = 10 && 列表顯示的條數(shù)為10 * sql取值 thisform.combo1.RowSource = "select 字段名 from 表名1" && 在a,b,c,d中選 取值 thisform.combo1.RowSourceType = 3 && =3 為sql類型 thisform.combo1.ControlSource = 表名2.字段名 && 用于接收combo1值的主表和字段 thisform.combo1.SpecialEffect= 1 && =1 平面,=0 三維 thisform.combo1.ListCount = 10 && 列表顯示的條數(shù)為10 **************************************************** *關(guān)于grid重點(diǎn): * 作用:1、顯示數(shù)據(jù)。2、作數(shù)據(jù)輸入 * 美化表格顯示特效(選中時背景變色,字體。。。。。。)需在事件:thisform.grid1_AfterRowColChange 中設(shè)置 * 顯示數(shù)據(jù)時注意grid的只讀屬性設(shè)置。 * 表單中的控件(command、chang.....)必須refresh,否則表格內(nèi)的數(shù)據(jù)不會更新顯示(但數(shù)據(jù)源表內(nèi)數(shù)據(jù)改變了)。 * 選中單元,記錄號= recno(),取值方法:go recno() *************************************************** *設(shè)置: WITH thisform.grid1.DeleteMark = .F. && 不顯示刪除標(biāo)記欄 thisform.grid1.RecordMark = .F. && 不顯示記錄標(biāo)記列 thisform.grid1.ColumnCount = 6 && 顯示列數(shù) thisform.grid1.column1.header1.Caption = "標(biāo)題1" thisform.grid1.column1.header1.Alignment = 2 && 標(biāo)題是居中 thisform.grid1.column1.Width = 60 && 設(shè)置列寬度 ENDWITH * ...........................................
* 設(shè)置數(shù)據(jù)源 * SELECT 字段1,字段2 FROM 表名 ; && 后面必須有“;” *WHERE 字段X = ALLTRIM(thisform.tEXT1.Value ) AND BETWEEN( 日期字段名,ctod(),CTOD()) ; && 后面必須有“;” *group by 字段2 ; *INTO CURSOR temp *thisform.grid1.RecordSource = "temp" && 設(shè)置為臨時表,也可以是固定的表名 * 或: thisform.grid1.RecordSource = "sele........" thisform.grid1.RecordSourcetype = 4 && sql .....型 thisform.Refresh && 更新表單是的數(shù)據(jù)。必寫!!?。?! ************************************************** * 注意:在書寫sele語句時 哪些地方必須保留空格?哪些未尾需要 “;” * 兩表中查詢時,from 表1,表2 前面字段需寫成:表1.字段名 ,表2.字段名。。。。。。 * *************************************************** * 關(guān)于導(dǎo)航條 * 首頁、前面、下頁、最后頁的代碼 * 用 commandgroup *************************************************** *在表單初始化init中:
thisform.commandgroup1.ButtonCount = 4 thisform.commandgroup1.command1.Caption = "首條記錄" thisform.commandgroup1.command2.Caption = "前一記錄" thisform.commandgroup1.command3.Caption = "下一記錄" thisform.commandgroup1.command4.Caption = "最后記錄" IF RECCOUNT()< 2 THEN thisform.commandgroup1.Enabled = .F. else thisform.commandgroup1.Enabled = .T. ENDIF *commandgroup1 的interactivechang事件代碼
local nway && 聲明一個數(shù)值變量 nway=this.value &&是第幾個命令按鈕按下了 &&你也可以取這個按鈕的caption 如 nway=this.buttons(this.Value).caption do case case nway==1 &&第一個 單擊 GO top CASE nway == 2 IF !BOF() SKIP -1 endif CASE nway ==3 IF !EOF() SKIP 1 ENDIF CASE nway ==4 GO BOTTOM ENDCASE ********************************************** *用命令組 對表數(shù)據(jù)進(jìn)行操作 * 實(shí)現(xiàn):增加記錄、修改記錄、刪除記錄、恢復(fù)記錄 *commandgroup2 ********************************************** *表單的init事件中: WITH thisform.commandgroup2 .command1.Caption ="增加" .command2.Caption ="修改" .command3.Caption ="刪除" .command4.Caption ="恢復(fù)" thisform.commandgroup2.command4.Enabled = .F. endwith IF RECCOUNT()=0 then thisform.commandgroup2.command2.Enabled = .F. thisform.commandgroup2.command3.Enabled = .F. else thisform.commandgroup2.command2.Enabled = .t. thisform.commandgroup2.command3.Enabled = .t. ENDIF COPY 表名 to temptable && 以便以后恢復(fù) ********************************************** * *commandgroup2 的interactivechang事件代碼 local nway2 && 聲明一個數(shù)值變量 nway2=this.value &&是第幾個命令按鈕按下了 &&你也可以取這個按鈕的caption 如 nway=this.buttons(this.Value).caption DO case CASE nway2 ==1 IF thisform.commandgroup2.command1.Caption ="增加" then APPEND BLANK thisform.Refresh thisform.commandgroup2.command1.Caption ="保存" ELSE thisform.commandgroup2.command1.Caption ="增加" thisform.Refresh ENDIF CASE nway2 ==2 IF thisform.commandgroup2.command2.Caption ="修改" then thisform.grid1.ReadOnly = .F. thisform.commandgroup2.command2.Caption ="保存" ELSE thisform.commandgroup2.command2.Caption ="修改" thisform.grid1.ReadOnly = .T. thisform.Refresh ENDIF CASE nway2 ==3 IF MESSAGEBOX("確信要刪除選中的記錄嗎?",1,"提示") MESSAGEBOX("確信要刪除選中的記錄嗎?",1,"提示")=6 DELETE thisform.Refresh ENDIF CASE CASE nway2 ==4 UPDATE 表名 SET temptable PACK temptable thisform.Refresh ENDCASE *********************************************
* 退出 * 單擊事件中 CLOSE TABLES CLEAR EVENTS thisform.Release ********************************************* * 表單之間傳遞數(shù)據(jù) * 定義一個全局變量:public vName * vName = alltrim(form1.text1.value) * form2.text1 = vName d在form2中調(diào)用 vName ******************************************** * 菜單 * 菜單建好后要通過”顯示“下面有"選項(xiàng)" 內(nèi)。。。。設(shè)置成主菜單。 * 只有主表單才能加載”主菜單“。在主表單init中使用: do 主菜單名 with this ,.T. * 注意在主表單的destroy中寫上:clear events * 彈出菜單可以在一般表單中加載,命令相同,最后在。。。。 clear events ********************************************* * 路徑問題 *利用系統(tǒng)內(nèi)部函數(shù)獲取路徑: *mypath = SYS(5)+SYS(2003) && 也就是當(dāng)前的路徑 后面不含”\“ *通常表單都是在同一個目錄下,互相調(diào)用時不必寫路徑(見上),但有時菜單與表單不在同一目錄下,則調(diào)用菜單用:do 路徑 菜單名.mpr *在設(shè)置運(yùn)行環(huán)境時,有二個路徑要設(shè)定: *SET DATABASE TO 數(shù)據(jù)庫名 *SET DEFAULT TO .......路徑 *********************************************** * vfp不能退出問題 * read events 和 clear events 是一個循環(huán)過程,在 系統(tǒng)退出時必須包含:clear events 或 ON SHUTDOWN quit *或 ON SHUTDOWN do fileExit.scx && 寫一個文件名為fileExit的程序,在"程序"--"新建" 存在默認(rèn)路徑下,后綴為.prg ON SHUTDOWN CLEAR EVENTS
***************************************************
* 脫離vfp方法
*程序打包后, 安裝運(yùn)行時無法脫離VFP主窗口環(huán)境。這時你可以自己編輯一個CONFIG.FPW系統(tǒng)配置文件,對生成的程序進(jìn)行運(yùn)行環(huán)境等各方面的設(shè)定。具體方法如下:
撤消 —MED—UNDO *在應(yīng)用程序中打開項(xiàng)目管理器,在代碼一欄內(nèi)新建一程序,其代碼如下: screen=off sysmenu=off * 然后存為一個名叫CONFIG的文件, 這時系統(tǒng)默認(rèn)的擴(kuò)展名為PRG,保存好文件后退出。 * 在剛才保存的位置找到剛才存好的CONFIG .PRG文件,將其重命名為CONFIG.FPW然后重新進(jìn)入項(xiàng)目管理器,在代碼欄內(nèi)選中該文件,單擊右鍵選擇“排除”一項(xiàng),這樣系統(tǒng)在編譯的時候就不將其編譯在內(nèi)而*將它視為系統(tǒng)文件。這樣你的程序一運(yùn)行就先自動搜索當(dāng)前路徑或默認(rèn)路徑下是否存在該系統(tǒng)配置文件,如存在就執(zhí)行進(jìn)入系統(tǒng)配置。 **************************************************** * 可選用菜單用于編輯用 選單項(xiàng)目 內(nèi)部命令 重做 —MED—REDO 剪切 —MED—CUT 復(fù)制 —MED—COPY 粘貼 —MED—PASTE 清除 —MED—CLEAR 查找 —MED—FIND 替換 —MED—REPL 全部選定 —MED—SLCTA 將上述選單項(xiàng)所對應(yīng)的系統(tǒng)選單內(nèi)部命令輸入,核對無誤后,生成主選單,這時就能在應(yīng)用系統(tǒng)中非常方便地使用各種編輯功能了
******************************************************
* 錯誤處理代碼
本錯誤程序可將程序發(fā)生的錯誤信息保存到一個表以便程序員對程序進(jìn)行修改。
在主程序中寫入以下代碼 過程文件: ******************************************************** * 右擊菜單的源程序 para oREF DEFINE POPUP EdtShort SHORTCUT RELATIVE FROM MROW(),MCOL() ACTIVATE POPUP EdtShort **********************************************
* 錯誤處理代碼
本錯誤程序可將程序發(fā)生的錯誤信息保存到一個表以便程序員對程序進(jìn)行修改。
在主程序中寫入以下代碼 過程文件: ******************************************************** * 右擊菜單的源程序 para oREF DEFINE POPUP EdtShort SHORTCUT RELATIVE FROM MROW(),MCOL() ACTIVATE POPUP EdtShort **********************************************
* 重新編序號
*用recn()作順序號在記錄進(jìn)行了物理刪除后很可能會產(chǎn)生重復(fù)的序號,如果不是使用VFP9的自動增量字段,建議使用select語句來計算序號
select max(序號) from 表 into curs tempindex nIndex=iif(isnull(max_序號),1,max_序號+1) *
replace all 序號 with recno()
*對于索引,循環(huán)一下 nIndex=1 scan replace 序號 with nIndex nIndex=nIndex+1 endscan ************************************************** * 密碼格式 thisform.text1.PasswordChar="*"
***************************************************
* 取grid中單元格值
thisform.text1.value=evaluate(field(nIndex))&&寫在AfterRowColChange里
**************************************************
* 自動調(diào)整表格列的寬度,
thisform.grid1.AutoFit
*************************************************
* 月份、年份問題
RQ1={^1988-05-01}
RQ2={^2009-03-01} NF1=YERA(RQ1) NF2=YERA(RQ2) YF1=MONTH(RQ1) YF2=MONTH(RQ2) *包含起始月,不包含結(jié)束月的月份數(shù)=(NF2-NF1)*12+YF2-YF1 *************************************************** * 收入、支出、余額分別是表格的第1、2、3列。
可以在表單的Grid1.column1.Text1下的LostFocus事件中放入: thisform.grid1.column3.Text1.value=thisform.grid1.column2.text1.value+this.Value Grid1.column2.Text1下的LostFocus事件中放入: thisform.grid1.column3.Text1.value=thisform.grid1.column1.text1.value+this.Value &&同時還要考慮總余額的變化。 *******************************************************
* 瘋狂的VFPER之?dāng)?shù)值轉(zhuǎn)換為金額大寫
*將以下代碼存為RMB.prg,在其它地方調(diào)用,如?RMB(123.45)。 Lparameters tnMoney Private lcMoney,lnMoney,i,lcReturnValue Local lcMoney,lnMoney,i,lcReturnValue lcMoney = Iif(tnMoney<0,"負(fù)","") lnMoney = Round(Abs(tnMoney)*100,0) For i = Len(Alltrim(Str(lnMoney,15)))-1 To 0 Step -1 lcMoney = lcMoney+Subs("零壹貳叁肆伍陸柒捌玖",Int(Round(lnMoney/10^i,10))*2+1,2)+Subs("分角元拾佰仟萬拾佰仟億拾佰仟萬",i*2+1,2) lnMoney = Mod(lnMoney,10^i) Endfor lcMoney = Strtran(Strtran(Strtran(Strtran(Strtran(lcMoney,"零仟","零"),"零佰","零"),"零拾","零"),"零角","零"),"零分","整") lcMoney = Strtran(Strtran(Strtran(Strtran(Strtran(lcMoney,"零零","零"),"零零","零"),"零億","億"),"零萬","萬"),"零元","元") lcReturnValue = Iif(lcMoney="整","零元整",Strtran(Strtran(lcMoney,"億萬","億"),"零整","整")) Return (lcReturnValue) ********************************************************
* 關(guān)于注冊檢測程序
dluser=alltrim(upper(thisform.text1.value))
dlpassword=alltrim(upper(thisform.text2.value)) if empty(dluser) or empty(dlpassword) messagebox("輸入錯誤",1) thisform.text1.value=" " thisform.text2.value=" " else select welcome locate for alltrim(upper(用戶))==dluser and alltrim(upper(密碼))==dlpassword if eof() messagebox("輸入錯誤,請再次輸入",1) else messagebox("注冊成功",0) do form welcome.scx thisform.visible=.f. endif endif ********************************************
* 彩色grid表格制作
thisform.grdBook1.SetAll("dynamicbackcolor","IIF(a=[kk],RGB(255,0,0),IIF(a=[dd],RGB(0,255,0),RGB(255,255,255)))","column")
*瘋狂的VFPER之表格奇偶行不同背景色其實(shí)很簡單,就一句代碼:
This.grd1.SetAll("DynamicBackColor","iif(Mod(Recno(),2)=1,RGB(255,255,255),RGB(192,192,192))","Column") ******************************************
* 完整的編輯菜單程序
Release med_cut,med_copy,med_clear,med_slcta
Public med_cut,med_copy,med_clear,med_slcta med_cut=Iif(This.SelLength>0,.T.,.F.) med_copy=Iif(This.SelLength>0,.T.,.F.) med_clear=Iif(This.SelLength>0,.T.,.F.) med_slcta=Iif(Len(Alltrim(This.Text))>0,.T.,.F.) Define Popup shortcut SHORTCUT Relative From Mrow(),Mcol() Define Bar _Med_undo Of shortcut Prompt "撒消(\<U)" ; KEY CTRL+Z, "" Define Bar 2 Of shortcut Prompt "\-" Define Bar _Med_cut Of shortcut Prompt "剪切(\<T)" ; KEY CTRL+X, "" ; SKIP For med_cut=.F. Define Bar _Med_copy Of shortcut Prompt "復(fù)制(\<C)" ; KEY CTRL+C, "" ; SKIP For med_copy=.F. Define Bar _Med_paste Of shortcut Prompt "粘貼(\<P)" ; KEY CTRL+V, "" &&; * SKIP For Empty(_Cliptext) Define Bar _Med_clear Of shortcut Prompt "刪除(\<D)" ; KEY DEL, "" ; SKIP For med_clear=.F. Define Bar 7 Of shortcut Prompt "\-" Define Bar _Med_slcta Of shortcut Prompt "全選(\<A)" ; KEY CTRL+A, "" ; SKIP For med_slcta=.F. Activate Popup shortcut ******************************************
FIND、SEEK和LOCATE及
作用:前兩個命令FIND和SEEK是在一個已經(jīng)建立了索引文件的表中,定位到關(guān)鍵字中的內(nèi)容與命 令行中字符串相同的第一個記錄。后一個命令在用USE打開表文件以后,locate for 直接查詢表中字段內(nèi)容。 格式:FIND <“字符串”>|<字符串 SEEK <表達(dá)式 LOCATE [<范圍>] [FOR <條件>] [WHILE<條件 CONTINUE 說明:FIND命令與SEEK命令的區(qū)別是前者后跟字符串,而后者后跟表達(dá)式。在用LOCATE命令找到 一個匹配記錄后,可用CONTINUE命令搜索表的剩余部分來尋找其他匹配的記錄。 **********************************************
*************************************************************
**************如何將日期替換為空值************************
repl 出生日期 with {} / {^} / .null. / ctod('')
用blank更方便(9.0) REPL (FIELD_DATE) WITH {//} REPL
******************************用grid設(shè)置顯示色*****************************
2008-12-26 10:08
|
|
|