UniGUI的特殊对象主要有:UniApplication 对象、UniSession 对象、UniServerInstance 对象,下面分类进行简单概括说明,后面实战中结合实例再详细讲述。
1)、UniApplication 对象
UniApplication返回一个TUniGUIApplication实例,它是当前所有会话资源(主窗体MainForm、主模块MainModule和所有其他窗体和数据模块)的所有者。它是全局可用的,可以在uniGUI控件事件处理程序中访问。类似于传统VCL中的Application,UniApplication有几个有用的属性,可用于获取有关会话的信息。例如,URL参数、客户机屏幕宽度、客户机屏幕高度、设备类型、与客户机PC相关的信息和cookie。
当用代码创建窗体时,必须将其所有者设置为UniApplication。
procedure TMainForm.UniButton2Click(Sender: TObject); begin with TUniForm2.Create(UniApplication) do ShowModal; end; |
UniApplication本身实际上是一个函数,它为当前会话返回正确的TUniGUIApplication实例:
unit uniGUIApplication; interface function UniSession: TUniGUISession; function UniApplication: TUniGUIApplication; ... |
因此,UniApplication只能在事件处理程序中访问,该事件处理程序是由uniGUI控件触发的。
procedure TMainmForm.UnimButton1Click(Sender: TObject); |
2)、UniSession 对象
UniSession返回当前会话的TUniGUISession类的实例。它包含与会话相关的所有信息。例如IP地址、用户代理、主机地址、平台相关数据等。UniSession还包含了一些重要的方法,可以用来控制一个session(如终止当前会话等):
procedure TMainForm.UniButton2Click(Sender: TObject); //在当前窗口中重定向或跳转到一个新的地址 UniSession.UrlRedirect('http://www.newsite.com'); |
与UniApplication类似,UniSession从uniGUI控件事件句柄中总是返回一个有效实例。例如,TUniButton实例总是属于某个会话。
procedure TMainForm.UniButton2Click(Sender: TObject); // 在TUniButton的事件中,我们可以获取UniSession的相关信息,如远程IP |
在下面的示例中,访问UniSession将导致访问冲突,因为UniThreadTimer不是uniGUI控件,它的事件不与任何会话关联。UniThreadTimer事件在单独的线程中异步运行。
PS:TUniThreadTimer创建一个在自己的线程中运行的计时器。这与原来的TTimer或它的uniGUI等价的TUniTimer不同。禁止在TUniThreadTimer的事件处理程序中访问uniGUI可视化组件。
procedure TMainForm.UniThreadTimer1Timer(Sender: TObject); //这将导致访问冲突错误,因为没有与此事件关联的会话 IPAddress := UniSession.RemoteIP; |
UniSession是一个“全局”对象,当从不同会话访问时,它可以返回不同的值。这与UniApplication的情况相同;UniSession实际上是一个在uniGUIApplication.pas中声明的全局函数。当在事件处理程序中调用时返回正确的会话实例。
unit uniGUIApplication; |
3)、UniServerInstance 对象
UniServerInstance对象是uniGUIServer.pas中定义的一个全局函数。它返回ServerModule的全局实例。
unit uniGUIServer; |