为什么要在 Splash 里使用 Timer呢?
当我们炫酷的展示 Splash 时,是需要几秒钟时间的。如果这几秒钟什么都不做,那是多么大的浪费啊!况且,似乎有一句名言:浪费别人的时间无异于谋财害命。况且,你应用到Splash 上的炫酷技术,也许需要一些先决条件,它也许也需要点儿时间。所以,我使用了 Timer 来控制这一切。
首先,设置 Timer.Interval 的值为你需要的时间,在这段时间里,为你展示的炫酷技术做好充分的技术准备。你唯一需要注意的是,它的单位是毫秒。
然后,在控件的 Timer 事件里,就可以随心所欲的炫耀你所掌握的技巧,当然,更重要的是完成应用程序启动前的准备工作。下面的代码,仅仅是一个Demo,你可以根据需要予以更改。
代码语言:javascript复制This.Interval = 0
With Thisform
.lblCaption.Caption = [正在建立数据库连接......]
_Screen.MyApp.CreatConnection()
Clear Events
.Release
EndWith
细心的看客估计已经注意到了,在上面的代码中,调用了 MyApp 的一个自定义方法:CreatConnection 。而不是在 Splash 自身来进行连接设置。这一点,体现了我之前所说的:应用程序对象是应用程序从启动到运行功能模块的一个控制中心。当你想更改数据库类型时,你仅仅需要打开MyApp 类,修改 CreatConnection 自定义方法即可。
这样,我们就充分利用了 Splash 所需要占用的时间,然后,在完成所有任务后,将自身卸载。
对于之后的系统登录,我们仍旧可以采用同样的方法来创建一个 Login 类,同样,它也是基于Form 类的。
至此,我们基本上完成了从启动到登录的全过程的准备,下一步,就是在 MyApp 的Run 自定义方法中,将它们予以代码实现:
代码语言:javascript复制With This
.SetEnv()
.SetPath()
.oSplash = NewObject([MySplash], .ClassLibrary)
.oSplash.Show()
.oWelcom = NewObject([MyLogin], .ClassLibrary)
.oWelcom.show()
*!* 这里,启动主界面
Read Events
EndWith
至此,我们基本完成了应用程序对象类的构建,并顺手完成了 Splash 和Login 两个自定义类。整个代码看上去应该是优雅的。当然,你可以在这个基础上根据你的实际应用情况尽情发挥,使它更赏心悦目。这样,你就获得了一个通用的“主程序”:
代码语言:javascript复制If !PemStatus(_Screen, [MyApp], 5)
_Screen.NewObject([MyApp], [MyApp], [MyApp.VCX])
EndIf
If _vfp.StartMode = 0
_Screen.NCApp.Start()
Else
_Screen.NCApp.Run()
EndIf
配合你的 Config.fpw ,你就完成了应用程序对象的创建。
有看客可能会问:“这样做有什么好处呢?”通俗的讲,通过创建应用程序对象类,我们可以获得一个“通用”的主程序。因为所有的实现是面向对象的,那么,我们可以很容易的对其进行扩展,并且,在使用过程中的维护,也会变得比较轻松 。
事实上,如果你完全理解以上的所有内容,那么我真的应该恭喜你:你已经可以开始创建自己的开发框架了。
你的反馈是我写作的动力,欢迎评论,未完待续。