首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

很多人以为,到这里,主程序就完成了。其实,未必。

这和你对主程序的认知是有关系的。在编程的意义上,主程序确实仅仅需要设置环境和路径。但是,从面向对象的角度来看,我个人认为从开始双击桌面的快捷方式,一直到你真正的进入到程序的主界面,这一段代码,都应该纳入到主程序的范畴,按我的说法就是:它们都是应用程序对象类应该负责的范畴。而基于这个观点的所谓主程序的作用,就演变为创建应用程序对象类实例。

就像这样:

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

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

EndIf

If _vfp.StartMode =

_Screen.NCApp.Start()

Else

_Screen.NCApp.Run()

EndIf

这里就应用程序对象类再做一些说明,因为我看到前面有看客留言,似乎是混淆了一些概念。应用程序对象类是在运行时刻,为应用程序提供从启动到运行功能模块的一个控制中心。所有在程序运行过程中的标准的的方法都可以纳入进来。例如,前面说的设置环境和路径,以及之后所论述的内容。留言中提到Project Hook类,这是一个项目钩子类,它仅仅是在开发时刻针对项目管理器的所有操作提供一个接口,以便于开发者可以更好的进行项目的控制。针对Project Hook类,如果你有兴趣进行更深入的了解,那么我建议你阅读张洪举编著的《Visual FoxPro 6.0-9.0解决方案和范例大全》的第一章。该书的电子版,可以在他的CSDN博客中下载到。

回到我们的主题,接下来,我们需要处理一下Splash表单。也就是所谓的“欢迎”表单。

每一个应用程序都希望在第一时间给用户一个深刻的印象。而Splash表单,承担了这一任务。技巧与个性齐飞,是Splash表单的特征。对于VFP的开发人员来说,这是一个展示自己软件风格或者炫耀编程技巧的舞台。然而,我并不打算在这里也炫耀一把,而是想讨论一下如何来更好的设计Splash。

最基本的做法,就是在MyApp.Vcx类库中添加一个基于Form类的Splash自定义类。然后,你可以像在表单设计器中一样,在里面尽情的发挥。而当应用程序对象类实例使用它时,仅仅需要如下的代码:

With_Screen.MyApp

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

.oSplash.Show()

EndWith

代码中的oSplash,是MyApp的一个自定义属性,用于存储Splash类实例的对象引用。

有人说,我不喜欢设置为一个类,我喜欢设置为一个表单。因为设计的表单类,无法直接运行。

俗话说,办法总比困难多。你可以使用下面的代码来直接“运行”表单类:

PrivatelaArray

PublicgoObjectas Object

DimensionlaArray[1]

ifAGetClass(m.laArray)

m.goObject =NewObject(m.laArray[2], m.laArray[1])

If Upper(m.goObject.baseclass) =[FORM]

m.goObject.show()

EndIf

EndIf

在开发环境下,运行这段代码,选择你想要“运行”的表单类。OK。

这里使用了全局变量,其目的在于,可以更方便的进行表单类的调试。

有人会说,这种方法有缺陷,在编译为EXE后,这个Splash真的就是“一闪而过”。事实是,如果你不做处理的话,的确如此。

我们知道,在每一个VFP标准的主程序中,最后一句一定是:Read Events。

虽然它允许有层次的嵌套,但是,我们还是尽可能的避免这种情况的出现。针对Splash类,我们可以做如下处理:

我们在表单类的Activate事件中发出Read Events,然后在你认为恰当的地方发出Clear Events命令。我发出这个命令的位置是在表单中一个Timer控件的Timer事件里。

WHY?请待下回分解。

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

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券