电竞比分网-中国电竞赛事及体育赛事平台

分享

vfp 全面總結(jié)(精華)(上)

 悟靜 2009-06-22
***********************************
*表單屬性設(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è)定。具體方法如下: 
*在應(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—UNDO 
重做 —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)行修改。

在主程序中寫入以下代碼
set default to sys(5)+sys(2003) &&設(shè)置軟件所在的目錄 
Default_Path=sys(5)+sys(2003)
*---------------------初始化系統(tǒng)變量------------------------
ERR_FILE =Default_Path+"\data\ERR_DBF.DBF" &&程序出錯庫 9
ON ERROR DO ERR_PRG WITH PROGRAM(),LINENO(),ERROR(),MESSAGE(),MESSAGE(1) &&定義錯誤處理程序
SET PROCEDURE TO tools ADDITIVE

過程文件:
文件名:tools .prg
*-----------------錯誤處理代碼段-----------------
PROCEDURE ERR_PRG
PARAMETERS M_PROGRAM,M_LINEO,M_ERROR,M_MESSAGE,M_1
WORK_=SELE()
SELE 19
IF NOT(FILE(ERR_FILE))
CREATE TABLE(ERR_FILE) (錯誤程序名 C(40),行號 C(5),錯誤信息 C(40),錯誤內(nèi)容 C(40),錯誤代碼 C(5),出錯日期 C(8),出錯時間 C(8))
INSERT INTO &ERR_FILE (錯誤程序名,錯誤信息,出錯日期) valueS ("主程序","創(chuàng)建出錯庫",DTOS(DATE()))
INDE ON 出錯日期 TAG 出錯日期
USE
Set Exclusive Off &&重新定義共享方式打開。操作數(shù)據(jù)必須在獨(dú)占的情況下才能進(jìn)行。
ELSE
USE &ERR_FILE SHAR
APPE BLANK
REPL 錯誤信息 WITH M_MESSAGE,錯誤內(nèi)容 WITH M_1,出錯日期 WITH DTOS(DATE()),出錯時間 WITH TIME(),錯誤程序名 WITH M_PROGRAM,;
行號 WITH LTRIM(STR(M_LINEO)),錯誤代碼 WITH LTRIM(STR(M_ERROR))
ENDIF
USE IN 19
SELE (WORK_)
=MESSAGEBOX(M_MESSAGE+CHR(13)+CHR(13)+"程序運(yùn)行錯誤,請與作者聯(lián)系!",16,"系統(tǒng)信息")
QUIT &&顯示錯誤消息后,退出程序
RETURN

********************************************************

*         右擊菜單的源程序

   para oREF

DEFINE POPUP EdtShort SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR _med_undo OF EdtShort PROMPT "撤消(\<U)" ;
MESSAGE "撤消上一次命令或操作"
DEFINE BAR 3 OF EdtShort PROMPT "\-"
DEFINE BAR _med_cut OF EdtShort PROMPT "剪切(\<T)" ;
SKIP FOR _screen.activeform.activecontrol.sellength = 0 ;
MESSAGE "移去選定內(nèi)容并將其放入剪貼板"
DEFINE BAR _med_copy OF EdtShort PROMPT "復(fù)制(\<C)" ;
SKIP FOR _screen.activeform.activecontrol.sellength = 0 ;
MESSAGE "將選定內(nèi)容復(fù)制到剪貼板上"
DEFINE BAR _med_paste OF EdtShort PROMPT "粘貼(\<P)" ;
SKIP FOR empty(_cliptext) ;
MESSAGE "粘貼剪貼板上的內(nèi)容"
DEFINE BAR _med_clear OF EdtShort PROMPT "刪除(\<D)" ;
SKIP FOR _screen.activeform.activecontrol.sellength = 0 ;
MESSAGE "移去選定內(nèi)容,并且不將其放到剪貼板上"
DEFINE BAR 8 OF EdtShort PROMPT "\-"
DEFINE BAR _med_slcta OF EdtShort PROMPT "全部(\<A)" ;
MESSAGE "選定當(dāng)前窗口中的所有文本或數(shù)據(jù)項(xiàng)"

ACTIVATE POPUP EdtShort     

********************************************** 
 *      錯誤處理代碼

 本錯誤程序可將程序發(fā)生的錯誤信息保存到一個表以便程序員對程序進(jìn)行修改。

在主程序中寫入以下代碼
set default to sys(5)+sys(2003) &&設(shè)置軟件所在的目錄
Default_Path=sys(5)+sys(2003)
*---------------------初始化系統(tǒng)變量------------------------
ERR_FILE =Default_Path+"\data\ERR_DBF.DBF" &&程序出錯庫 9
ON ERROR DO ERR_PRG WITH PROGRAM(),LINENO(),ERROR(),MESSAGE(),MESSAGE(1) &&定義錯誤處理程序
SET PROCEDURE TO tools ADDITIVE

過程文件:
文件名:tools .prg
*-----------------錯誤處理代碼段-----------------
PROCEDURE ERR_PRG
PARAMETERS M_PROGRAM,M_LINEO,M_ERROR,M_MESSAGE,M_1
WORK_=SELE()
SELE 19
IF NOT(FILE(ERR_FILE))
CREATE TABLE(ERR_FILE) (錯誤程序名 C(40),行號 C(5),錯誤信息 C(40),錯誤內(nèi)容 C(40),錯誤代碼 C(5),出錯日期 C(8),出錯時間 C(8))
INSERT INTO &ERR_FILE (錯誤程序名,錯誤信息,出錯日期) valueS ("主程序","創(chuàng)建出錯庫",DTOS(DATE()))
INDE ON 出錯日期 TAG 出錯日期
USE
Set Exclusive Off &&重新定義共享方式打開
ELSE
USE &ERR_FILE SHAR
APPE BLANK
REPL 錯誤信息 WITH M_MESSAGE,錯誤內(nèi)容 WITH M_1,出錯日期 WITH DTOS(DATE()),出錯時間 WITH TIME(),錯誤程序名 WITH M_PROGRAM,;
行號 WITH LTRIM(STR(M_LINEO)),錯誤代碼 WITH LTRIM(STR(M_ERROR))
ENDIF
USE IN 19
SELE (WORK_)
=MESSAGEBOX(M_MESSAGE+CHR(13)+CHR(13)+"程序運(yùn)行錯誤,請與作者聯(lián)系!",16,"系統(tǒng)信息")
QUIT &&顯示錯誤消息后,退出程序
RETURN

********************************************************

*         右擊菜單的源程序

   para oREF

DEFINE POPUP EdtShort SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR _med_undo OF EdtShort PROMPT "撤消(\<U)" ;
MESSAGE "撤消上一次命令或操作"
DEFINE BAR 3 OF EdtShort PROMPT "\-"
DEFINE BAR _med_cut OF EdtShort PROMPT "剪切(\<T)" ;
SKIP FOR _screen.activeform.activecontrol.sellength = 0 ;
MESSAGE "移去選定內(nèi)容并將其放入剪貼板"
DEFINE BAR _med_copy OF EdtShort PROMPT "復(fù)制(\<C)" ;
SKIP FOR _screen.activeform.activecontrol.sellength = 0 ;
MESSAGE "將選定內(nèi)容復(fù)制到剪貼板上"
DEFINE BAR _med_paste OF EdtShort PROMPT "粘貼(\<P)" ;
SKIP FOR empty(_cliptext) ;
MESSAGE "粘貼剪貼板上的內(nèi)容"
DEFINE BAR _med_clear OF EdtShort PROMPT "刪除(\<D)" ;
SKIP FOR _screen.activeform.activecontrol.sellength = 0 ;
MESSAGE "移去選定內(nèi)容,并且不將其放到剪貼板上"
DEFINE BAR 8 OF EdtShort PROMPT "\-"
DEFINE BAR _med_slcta OF EdtShort PROMPT "全部(\<A)" ;
MESSAGE "選定當(dāng)前窗口中的所有文本或數(shù)據(jù)項(xiàng)"

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及CONTINUE 用法區(qū)別

      作用:前兩個命令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命令搜索表的剩余部分來尋找其他匹配的記錄。
**********************************************
 

**************以下是文件夾刪除操作****************
mbwjj="要刪除的文件夾"
IF !DIRECTORY("&mbwjj.")
   MESSAGEBOX("你要刪除的文件夾不存在!",48,'系統(tǒng)提示:')
ENDIF
loFilesystem=CREATEOBJECT("Scripting.FileSystemObject")
loFilesystem.DeleteFolder("&mbwjj.",.T.)

對日期型欄目中的月份進(jìn)行批量替換?
如:把“出生日期”中的月份全部用11月替換,年和日不變?
UPDATE XXX SET XXdate= CTOD( TRANSFORM( YEAR(XXdate))+"\"+"11"+"\"+TRANSFORM(DATE(xxdate)))
REPLACE all 出生日期 WITH DATE(YEAR(出生日期),11,DAY(出生日期))
VFP技術(shù)QQ群
3842576

3962883

4001858

5718827

7177370

15547884

21796637

33659603

100=100的程序,看誰更簡潔

有道小學(xué)題,要求應(yīng)用VFP編程:
有100個饅頭要分給100個和尚,其中大和尚每人三個,小和尚三個人分一個,求大和尚和小和尚各多少人。
要求在程序中不能有數(shù)字字符。

其實(shí),這道題是小學(xué)的算術(shù)題。在日常生活中經(jīng)常會遇到,之所以要求不帶數(shù)字,那就必須要有接收外面參數(shù)的語句,如果再有返回結(jié)果的語句,這個小程序就可以當(dāng)成函數(shù)用。

 

Parameters n物,n人,n大人消耗,n小孩消耗
For n大人=0 To n人
n小孩=n人-n大人
If n大人消耗*n大人+n小孩消耗*n小孩=n物
Return Transform(n大人)+','+Transform(n小孩)
EndIf
EndFor
Return '-1,-1'

Para WS,RS,D,X &&物數(shù),人數(shù),每個大和尚消耗,每個小和尚消耗
DA='' &&答案
For DS=0 To RS
XS=RS-DS
If D*DS+X*XS=WS
DA=DA+'大和尚'+str(DS)+'人,小和尚'+str(XS)+'人'+chr(13)
EndI
EndF
Retu iif(empt(DA),'無解',DA)
有人嘗試,很好!謝謝2樓、3樓的朋友!為了答謝朋友的支持,我把我的構(gòu)思亮一亮:

想想小學(xué)的算術(shù)的交換律:

我們100不說,因?yàn)槿藬?shù)=物數(shù),所以可以撇開100不說,我們來討論一下

1個大和尚分3個,人數(shù)1,物數(shù)3

3個小和尚分1個,人數(shù)3,物數(shù)

也是“人數(shù)=物數(shù)”即:1+3=3+1

大和尚+小和尚=大和尚物數(shù)+小和尚物數(shù),這就是交換律,也是比和比例在日常生活上的應(yīng)用

從算術(shù)角度上說,這道題目應(yīng)該這樣算:

100?1+3)=25 大和尚人數(shù)和小和尚分得物數(shù)

3?7=75 大和尚分得物數(shù)和小和尚人數(shù)

所以:25+75=75+25 (100=100)

程序:

para nZs,nDhs,nXhs && 總數(shù)(100),大和尚人均數(shù)(3),小和尚人數(shù)(1)

nFpa=nZs/(nDhs+nXhs)

nFpb=nDhs*nFpa

return "大和尚共有"+alltrim(str(nFpa))+"人,分得饅頭"+alltrim(str(nFpb))+"個,小和尚"+alltrim(str(nFpb))+"人,分得饅頭"+alltrim(str(nFpa))+"個"

由于大和尚人數(shù)=小和尚分得饅頭數(shù),小和尚人數(shù)=大和尚分得饅頭數(shù),所以合拼成2行算式。

上面顯示好像有問題,算術(shù)算式是:

100/(1+3)=25 大和尚人數(shù)和小和尚分得物數(shù)

3*25=75 大和尚分得物數(shù)和小和尚人數(shù)

所以:25+75=75+25 (100=100)

這其實(shí)是"雞兔同籠"問題,

2、3樓的方法可以解決問題,語句雖短,但沒考慮算法的優(yōu)化。

樓主提供的程序,在算法上似乎存在問題。

PARAMETERS N_頭數(shù),N_腳數(shù),N_雞腳,N_兔腳

N_雞數(shù) = (N_兔腳 * N_頭數(shù) - N_腳數(shù))/(N_兔腳 - N_雞腳)
N_兔數(shù) = N_頭數(shù) - N_雞數(shù)

RETURN TRANSFORM(N_雞數(shù))+","+TRANSFORM(N_兔數(shù))

樓上的朋友真行!謝謝你,朋友!

不過我當(dāng)時只認(rèn)為是“按比例分配”的問題,就用小學(xué)算術(shù)“比例分配”解答,粗糙一點(diǎn)。

Grid.AfterRowColChange 事件如何獲取列名稱?
可以在表格的AfterRowColChange 事件中添加以下代碼(假設(shè)表格名稱為grdkhdw)

LPARAMETERS nColIndex
ls=ALLTRIM(STR(ncolindex))
theheader=thisform.grdkhdw.column&ls..header1.caption
WAIT theheader WINDOW

 *************************************************************
**************如何將日期替換為空值************************
repl 出生日期 with {} / {^} / .null. / ctod('')
用blank更方便(9.0)

REPL (FIELD_DATE) WITH {//}

REPL 
******************************用grid設(shè)置顯示色*****************************
2008-12-26 10:08

可以用grid并用其setall()設(shè)置顯示色:

.grdGrid1.SetAll("DynamicBackColor", "IIF(年齡<1, RGB(255,0,0), IIF(年齡=1,RGB(0,255,255),RGB(0,255,0)))", "Column")


    

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多