*环境设置
Do Form myScreen &&启动封面表单
_Screen.Show &&显示VFP主窗口
Do myMenu.mpr &&安装菜单系统
RETURN
为达到在显示启动封面之前不显示VFP主窗口的目的,在Config.fpw中已写Screen=off,当程序执行到Do Form myScreen这一句时,如果表单myScreen的ShowWindows属性被设为“在屏幕中”,则不管是在开发环境还是在编译环境下,程序都将停下来,表单被显示在_Screen中,而_Screen被隐藏了,因此表单跟着也被隐藏了,所以在屏幕上什么也看不见。这就是第二种情况的产生原因。为了避免这种错误的出现,必须将myScreen表单的ShowWindow的属性设为“做为顶层表单”,这样就可使在_Screen被隐藏的情况下,myScreen仍然可以被显示出来。但请注意,在此情况下,Do Form myScreen这句话执行后,程序并不能停下来,而是顺序地执行下去,一直到执行到RETURN后程序退出,这也就是著名的“一闪而过”现象了。为此必须在程序中包含事件处理命令Read Events使程序停下来,如下:
*环境设置
Do Form myScreen &&启动封面表单
Read Events &&开始事件处理:使启动封面停下来
_Screen.Show &&显示VFP主窗口
Do myMenu.mpr &&安装菜单系统
Read Events &&开始事件处理
RETURN
程序执行Do Form myScreen后,将启动封面显示在屏幕上,然后向下执行到Read Events开始事件处理,此时启动封面表单必须由用户关闭或由表单事件关闭,否则程序将一直停在Read Events这一句上。不管myScreen表单由谁关闭,在关闭代码中必须包含一句Clear Events的停止事件处理命令,以便开始执行Read Events的下一句指令,顺序执行完成_Screen.Show及Do myMenu.mpr后,用户的主界面就建立完成,同理,此处还需要一个事件处理命令让程序再次停下来,开始菜单系统的命令处理,一般情况,菜单系统中将包含的“退出”项,其中有“Clear Events”清除事件处理代码,从而停止第二条“Read Events”事件处理命令,退出整个系统。
PROCEDURE cmd1.Click
close all
thisform.release()
ENDPROC
PROCEDURE timer1.Timer
A2=A2+1
if A2=1
thisform.caption="欢"
endif
if A2/2=1
thisform.caption=thisform.caption+"迎"
endif
if A2/3=1
thisform.caption=thisform.caption+"登"
endif
if A2/4=1
thisform.caption=thisform.caption+"录"
endif
if A2/5=1
thisform.caption=thisform.caption+"系"
endif
if A2/6=1
thisform.caption=thisform.caption+"统"
endif
if A2/7=1
thisform.caption=thisform.caption+"!"
endif
**************************************************
*-- Form: form1 (c:\documents and settings\administrator\桌面\download\jxc\forms\login.scx)
*-- ParentClass: form
*-- BaseClass: form
*-- Time Stamp: 11/14/02 05:15:10 PM
*
DEFINE CLASS form1 AS form
PROCEDURE Destroy
RELEASE location1
RELEASE timelimit
RELEASE TIMES,A2
CLOSE ALL
ENDPROC
PROCEDURE Init
public a2
a2=0
*set default to sys(5)+sys(2003)
PUBLIC location1
PUBLIC TIMES
PUBLIC timelimit
TIMES=1
timelimit=3
*!* CLOSE ALL
*!* OPEN DATABASE USER EXCLUSIVE
*!* USE USER EXCLUSIVE
SELECT USER
THIS.text1.SETFOCUS()
ENDPROC
PROCEDURE Unload
RETURN THIS.loginstatus
ENDPROC
PROCEDURE text1.Valid
*check config file and reset corectly install path
GO TOP
FIND=.F.
DO WHILE .NOT.EOF() && 定位用户
IF .NOT.ALLTRIM(NAME)==ALLTRIM(THIS.VALUE) &&注意这里的VALUE中含有空格符,必须去掉
SKIP 1
ELSE
FIND=.T. &&找到该用户
EXIT
ENDIF
ENDDO
*以下为检查用户是否合法
IF FIND &&找到该用户
TIMES=1 &&初始化囗令计数器
RETURN 1 &&焦点定位到口令输入处
ELSE &&未找到该用户
THISFORM.label2.CAPTION="用户"+SPACE(2)+ALLTRIM(THIS.VALUE)+SPACE(2)+"未注册"+"请重新输入正确的用户名"
IF TIMES=timelimit &× 为表单初始化时的次数变量,户登录次数是大于3次
secondcount=VAL(SUBSTR(TIME(),7,2))
THISFORM.label2.CAPTION="用户"+ALLTRIM(THIS.VALUE)+"非法,3秒后自动退出!"
DO WHILE .T. && 检测时间是否大于3秒
THISFORM.label2.CAPTION="用户"+ALLTRIM(THIS.VALUE)+"非法,3秒后自动退出!"
CAPTION=VAL(SUBSTR(TIME(),7,2))-secondcount
IF CAPTION>=0 .AND. CAPTION<=9
CAPTION=CAPTION+48
ENDIF
caption1=CHR(CAPTION)
THISFORM.CAPTION=SPACE(20)+"计时 "+caption1+" 秒"
IF VAL(SUBSTR(TIME(),7,2))-secondcount>=3 .OR.VAL(SUBSTR(TIME(),7,2))-secondcount<0 &&延时范围0---9秒
THISFORM.RELEASE()
EXIT
ENDIF
THISFORM.REFRESH()
ENDDO
ENDIF
ENDIF