Intraweb使用手册中文版(2)

2019-04-02 16:22

与用户的交互,这在帮助文档里都有说明。 Showing Forms

显示一个Form通常的语句格式如下:

第一次看来,这有点让人迷惑,但是它是以下格式的略缩:

除了它在这里是一个WebApplication这外,就像是通常的应用程序一样,不同的是,普通的应用程序在调用了Call之后,Form是马上就显示,在IntraWeb中,当Call调用一个Form之后,只是纯粹地指定了哪一个Form是在一个事件退出之后下一个活动的Form,也仅仅当一个事件被执行之后Form才会显示。

Destorying Forms

一个普通的应用程序中,当一个Form不在需要的时候,它能通过使用.Free或.Destroy方法来Destory掉,在IntraWeb应用程序中,有一点相似,但是,你不能直接调用.Free或.Destroy方法,你必须调用一个.Release方法,.Release方法并没有真正地Destory这个Form,这个Form直到退出了事件并且把控制权还给IntraWeb的时候才会真正地Destory.这是因为.Release是Form本身在事件中调用的,尽管这并不是经常发生。

当Relase被调用的时候,就像一个普通的应用程序一样,当前活动的Form变成前一个被Destory的Form,如果你不想用户回到上一个Form,你就必须调用.Show方法来激活另一个Form,可以在.Release将程序控制权还给IntraWeb之前或之后调用.Show方法。当一个Form被释放后,所有对这个Form List的参考都会被删除,如果在这些Form在Hidden或Release的时候没有调用.Show方法,将改变Form的序列。 Hiding Froms

在普通的应用程序中可以不调用.Hide方法来Destory一个Form,同样的功能也可以在IntraWeb中调.Hide方法来实现,.Hide方法可以在调用.Release方法时隐藏一个Form而不必Destroy它。调用.Release时,.Hide删除了所有的关于对这个Form List的引用,但是并没有Destory它,正因如此,如果你想在以后还想继续使用这个Form,你必须保留一个对这个Form的引用,换句话说,也就是这个Form变成孤立的了。

Passing Data Between Forms

像普通的应用程序一样,数据可以在Form之前传递,因为Form的信息可以做为Form Class的一个变量储存在内存中。作为一个试例,你要定义两个Form, TFormMain和TFormDialog.TFormMain是主Form并且包含一个Butoon 和一个Edit Box。TFormDialog包含一个memo Field和一个Label。当用户在主窗体中点击按钮时,主窗体的Edit Box中的文字会被加到Dialog Form的Memo Field中去,同时,Dialog Form也会被显示,Dialog Form也同时显示了它已经被显示了多少次,并且允许用户返回到主窗体中去。

IWLink1 OnClick

这个事件以链接的形式与标识Caption为”Quit”相关,当用户点击这个链接时,简单地终止了这个应用程序。 OnCreate

OnCreate事件将会在这个Form被创建时调用,在这个事件中创建了别一个Form,同时,这个Form的引用也做为Form的member Variable储存起来了,以便于再次调用。 butnOk OnClick

OnClick事件中将会检查Edit Box中是否有数据,如果没有数据存在,那么程序将调用WebApplication.ShowMessage向用户显示一些信息,当释放MessageBox后,Form将会再次显示,如果用户已经输入了数据,那么,Using FDialogForm(在当前Form的OnCreate事件中创建)将会显示,EditBox中的数据会被加到Memo Field中,TFormDialog的member variable会更新,调用.Show方法显示这个Form,就像你看到的,数据在两个不同的Form中被传递了,如同普通的Delphi应用程序一样。 Complete Demo

你可以看看FormData.dpr这个Demo来获得完整的示例。

State Management Inherent State

标准的Web开发工具都有一个自动的Session Management,但仅仅意味着它会为你跟踪Session的信息,

你仍然不得不在页面之间处理这些状态信息,或者在不同的状态对象中处理这些信息,状态对象通常也局限于字符串和那些字符串中整理出来的数据,这不利于处理更复杂的数据类型。

IntraWeb在这方面有了一定的改善,它是一种固有的状态管理。你倒底是在说什么呀?新的词语?不,问问你自己吧,你是怎样在普通的Delphi程序中管理这些状态的呢?什么?你不需要管理?正是这样,在IntraWeb中你确实也需要管理这些。 限制

Global Variables

全局变量通常不会使用,如果你需要使用全局变量来指定每一个用户Session都要用到的变量,我们下面将会提到的。

如果你需要对所有的用户Session都使用一个变量,那你就用一个全局变量吧,然而,IntraWeb是一个线程化的环境,你必须指定一个属性来保护当前访问的变量。 ThreadVars

ThreadVars在IntraWeb应用程序中永远不会被使用到,除非某种临时的储存的使用。IntraWeb是基于HTTP的表态访问的,这在本质上就意味着所有的线程都没有指定给某一个特定的用户,并且用户是在HTTP请求和线程中转移的。 Safe Storage

Form/Datamodule Members

因为IntraWeb Form和DataModules是持续的,就像普通的Delphi程序一样,你能以member Variables 和属性的方法来储存信息,这些信息能在Form自身需要时或在接收来自其它Form的时候储存在内存里。 User Session

User Session(在Session Management部分将会更多的介绍)包含一个.Data属性,它能控制到一个对象的Reference.当你需要储存一个用户的特定信息时,你可以把信息储存在.Data属性里,它接受即时的TObject,并且能在Session释放的时候自动Destory。最简单的方法就是创建一个对象,把你要的Fields加到里面,创建一个对象时,当Session创建时,把Session储存在这个Session的Data属性里。Phonetics示例演示了一个较为完整的例子。

当创建一个新的IntraWeb项目时,一个Shell的用户Session对象也会在ServerController里被自动创建了,一个缺省的ServerController看上去就像这个样子:

TUserSession是一个空的Session对象,你可以把members, Properties and methods加到上面,为每一个Session创建一个TUserSession的同时,它也会被创建到OnNewSession事件中。

以Function Named UserSession也是已经存在的用来简单访问对象的方法,所以,如果你把TUserSession的声明改成以下的样子:

你可以访问这些属性,在你的代码中就像这样:

如果你不再需要一个用户的Session了,你可以在代码里终止它,当然,它不是必须的,这在一个缺省的template里是作为一个部分自动存在的。


Intraweb使用手册中文版(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:4-3《多彩服饰》教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: