以前上学的时候虽然学过VFP,也用它做过东西,但那时是团体作战,8个人一小组,我们的组长很厉害。可以说最重要的部分都是组长一手包办的。虽然最后我们组取得了很好的成绩,但可以说没学倒什么东西。
毕业工作后,没想倒还要接触VFP。前前后后近一个月的时间,做成了一个小的应用软件。虽然在数据库开发这个偌大的洪流面前只是小象一头。我还是感倒心满意足,满心欢喜了。
当然,我所做成的东西是与若干人分不开的。其中包括我的大学同学CZL,还有CSDN若干热心的人们,尤其是十三豆大哥。哈哈。
我将我前前后后的感受记录下来,以备将来观仿学习,以求继续前进。
我所记录的可能是一些非常简单的东西,但都是我在这次学习过程中的收获和感受。
一、编译后如何让程序停下来。
相信很多人遇到过跟我一样的问题。那就是编译成可执行文件双击后一闪而过。这是因为程序顺序执行你的代码而没有在该停下来的时候停下来等你。解决方案是:在主表单的LOAD或者ACTIVATE中添加代码 READ EVENTS。在主表单的UNLOAD或者退出按钮中添加CLEAR EVENTS。或者在主程序中添加也可。
二、表单运行后主表单上出现数据统计结果。
曾经为此深深的苦恼过。后来发现其实很简单,就是在主表单LOAD代码中添加SET TALK OFF。
三、将表导出成EXCEL表格的代码。
我之前的:
nanswer=messagebox('确定输出到EXCEL表格吗?',1,'提示窗')
do case
case nanswer=1
lcfile=PUTFILE('另存为',a,'xls')
IF !EMPTY(lcfile)
selec xx
copy to &lcfile type xls
ELSE
MESSAGEBOX('您取消了此操作',0,'提示窗')
RETURN
ENDIF
case nanswer=2
RETURN
endcase
后来发生一些问题。十豆三大哥说是因为路径名返回有空格
可将copy to &lcfile type xls改为copy to "&lcfile" type xls
十豆三大哥提供的代码:
IF !USED('表名')
RETURN
ENDIF
SELECT 表名
lcExtName='XLS'
IF RECCOUNT('表名')>65535 &&如果是VFP9.0以下,此处改为16383
MESSAGEBOX('当前记录数大于65535,EXCEL最多支持65535条记录。'+SPACE(5)+CHR(10)+CHR(10)+'所以程序将导出扩展名为 .CSV 的文件!',48,'信息提示')
lcExtName='CSV'
ENDIF
lcDelimFile = PUTFILE('', 'Excel表名', lcExtName)
IF EMPTY(lcDelimFile)
RETURN
ENDIF
IF lcExtName='XLS'
lcExtName='XL5'
ENDIF
COPY TO (lcDelimFile) TYPE &lcExtName
GO TOP
MESSAGEBOX("导出完成!文件位置:"+CHR(10)+CHR(10)+(lcDelimFile)+SPACE(3),64,"信息提示")
四、将表导出成WORD文档代码(来自十豆三)
IF EMPTY(ALIAS())
MESSAGEBOX( "当前工作区没有打开工作表!",48,"不能生成表格")
ENDIF
WAIT "正在访问 Word 软件……" WINDOW NOWAIT
WordApp=CREATEOBJECT("Word.application") &&访问WORD
IF TYPE("WordApp")#"O"
WAIT CLEAR
MESSAGEBOX( "访问Word失败!请检查你的系统是否正确安装 Word 软件!",48,"没有安装Word")
RETURN
ENDIF
WAIT "正在生成表格……" WINDOW NOWAIT
WordApp.VISIBLE =.F.
WordApp.CAPTION ='yafox.com'
WordApp.Documents.ADD
WordApp.Documents(1).RANGE.TEXT=ALIAS()
WordApp.Documents(1).RANGE.FONT.SIZE=15
WordApp.Documents(1).RANGE.FONT.NAME="黑体"
WordApp.Documents(1).RANGE.Paragraphs.ALIGNMENT= 1
WordAppRang=WordApp.Documents(1).RANGE(LENC(WordApp.Documents(1).RANGE.TEXT)-1,LENC(WordApp.Documents(1).RANGE.TEXT)-1)
WordTable=WordApp.Documents(1).TABLES.ADD(WordAppRang,RECCOUNT()+1,FCOUNT())
WordTable.RANGE.Paragraphs.ALIGNMENT= 0
WordTable.RANGE.FONT.NAME="宋体"
WordTable.RANGE.FONT.SIZE=11
WordTable.BORDERS.ENABLE=1
WordTable.BORDERS(1).LineWidth = 12
WordTable.BORDERS(2).LineWidth = 12
WordTable.BORDERS(3).LineWidth = 12
WordTable.BORDERS(4).LineWidth = 12
WordTable.ROWS(1).BORDERS(3).LineWidth = 12
WordTable.ROWS(1).RANGE.FONT.Bold=.T.
WordTable.ROWS(1).Cells.VerticalAlignment= 1
WordTable.ROWS(1).RANGE.Paragraphs.ALIGNMENT = 1
WordTable.ROWS(1).HeadingFormat=.T.
FOR i=1 TO FCOUNT()
WordTable.Cell(1,i).RANGE.TEXT=FIELD(i)
FOR i2=2 TO RECCOUNT()+1
GO i2-1
WordCellText=EVALUATE(FIELD(i))
DO CASE
CASE ISNULL(WordCellText)
WordCellText=""
CASE TYPE("WordCellText")="N"
CASE TYPE("WordCellText")="D"
WordCellText=DTOC(WordCellText)
CASE TYPE("WordCellText")="T"
WordCellText=TTOC(WordCellText)
CASE EMPTY(WordCellText)
WordCellText=""
OTHERWISE
* WordCellText=""
ENDCASE
WordTable.Cell(i2,i).RANGE.TEXT=WordCellText
NEXT
WordTable.COLUMNS(i).AUTOFIT
NEXT
WordApp.Documents(1).SAVEAS("C:/Xwy.doc")
WordApp.QUIT
RELEASE WordApp
WAIT CLEAR
MESSAGEBOX( "生成WORD文件完毕,文件位置 C:/Xwy.doc !",64,"完毕")
RETURN
五、生成可执行文件后如何去处后面的背景框
在主表单或主程序中添加代码:_sreen.visible=.f.
并将所有表单的showwindow属性改为2-作为顶层表单