我们总是梦想着对象化(五)

为什么要在Splash里使用Timer呢?

当我们炫酷的展示Splash时,是需要几秒钟时间的。如果这几秒钟什么都不做,那是多么大的浪费啊!况且,似乎有一句名言:浪费别人的时间无异于谋财害命。况且,你应用到Splash上的炫酷技术,也许需要一些先决条件,它也许也需要点儿时间。所以,我使用了Timer来控制这一切。

首先,设置Timer.Interval的值为你需要的时间,在这段时间里,为你展示的炫酷技术做好充分的技术准备。你唯一需要注意的是,它的单位是毫秒。

然后,在控件的Timer事件里,就可以随心所欲的炫耀你所掌握的技巧,当然,更重要的是完成应用程序启动前的准备工作。下面的代码,仅仅是一个Demo,你可以根据需要予以更改。

This.Interval=

WithThisform

.lblCaption.Caption=[正在建立数据库连接......]

_Screen.MyApp.CreatConnection()

Clear Events

.Release

EndWith

细心的看客估计已经注意到了,在上面的代码中,调用了MyApp的一个自定义方法:CreatConnection。而不是在Splash自身来进行连接设置。这一点,体现了我之前所说的:应用程序对象是应用程序从启动到运行功能模块的一个控制中心。当你想更改数据库类型时,你仅仅需要打开MyApp类,修改CreatConnection自定义方法即可。

这样,我们就充分利用了Splash所需要占用的时间,然后,在完成所有任务后,将自身卸载。

对于之后的系统登录,我们仍旧可以采用同样的方法来创建一个Login类,同样,它也是基于Form类的。

至此,我们基本上完成了从启动到登录的全过程的准备,下一步,就是在MyApp的Run自定义方法中,将它们予以代码实现:

WithThis

.SetEnv()

.SetPath()

.oSplash =NewObject([MySplash], .ClassLibrary)

.oSplash.Show()

.oWelcom =NewObject([MyLogin], .ClassLibrary)

.oWelcom.show()

*!*这里,启动主界面

Read Events

EndWith

至此,我们基本完成了应用程序对象类的构建,并顺手完成了Splash和Login两个自定义类。整个代码看上去应该是优雅的。当然,你可以在这个基础上根据你的实际应用情况尽情发挥,使它更赏心悦目。这样,你就获得了一个通用的“主程序”:

If!PemStatus(_Screen,[MyApp],5)

_Screen.NewObject([MyApp],[MyApp],[MyApp.VCX])

EndIf

If _vfp.StartMode =

_Screen.NCApp.Start()

Else

_Screen.NCApp.Run()

EndIf

配合你的Config.fpw,你就完成了应用程序对象的创建。

有看客可能会问:“这样做有什么好处呢?”通俗的讲,通过创建应用程序对象类,我们可以获得一个“通用”的主程序。因为所有的实现是面向对象的,那么,我们可以很容易的对其进行扩展,并且,在使用过程中的维护,也会变得比较轻松。

事实上,如果你完全理解以上的所有内容,那么我真的应该恭喜你:你已经可以开始创建自己的开发框架了。

你的反馈是我写作的动力,欢迎评论,未完待续。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180724G0A30100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券