技术标签: UniGUI
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; |
文章浏览阅读2.9k次,点赞3次,收藏4次。Hadoop 未授权访问主要因HadoopYARN资源管理系统配置不当,导致可以未经授权进行访问,从而被攻击者恶意利用。攻击者无需认证即可通过RESTAPI部署任务来执行任意指令,最终完全控制服务器。_hadoop未授权访问
文章浏览阅读4.1k次,点赞3次,收藏18次。100个替代昂贵商业软件的开源应用面对大,中,小企业和家庭用户,立竿见影显著降低成本的开源软件。某些商业软件素以昂贵著称。随着云计算的日益普及,很多常用软件包供应商将一次性收费改为月租模式。虽然月租费貌似便宜,但也经不起长时间的累积。100个替代昂贵商业软件的开源应用尽管有许多好理由,但避免或减少使用费,仍然是许多用户看中开源应用软件的主要因素。基于这一点,我们更新了可替代_citadel开源中文版本
文章浏览阅读55次。2019年计算机协会部长竞选演讲稿篇一:计算机协会部长竞选演讲稿尊敬的领导,敬爱的老师,亲爱的同学们:大家晚上好!俗话说:马只有驰骋千里,方知其是否为良驹;人只有通过竞争,才能知其是否为栋梁。我是来自xxx班的伍朝海,今晚,我很荣幸能够站在这里参加这次学生会的竞选,职位是xx系的宣传窗口——新闻网络部的负责人。我知道,今晚竞选的不仅仅是个职位,也是在竞选一个为同学们服务的机会,更是在竞选一个为我们...
文章浏览阅读185次。第2章 Python语法基础,IPython和Jupyter Notebooks当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少。这部分上是一个鸡和蛋的问题:我们现在使用的库,比如pandas、scikit-learn和statsmodels,那时相对来说并不成熟。2017年,数据科学、数据分析和机器学习的资源已经很多,原来通用的科学计算拓展到了计算机科学家..._jupyter notebook if后面有多个条件
文章浏览阅读494次,点赞2次,收藏2次。雪花算法生成的ID精度丢失问题雪花算法ID精度丢失_雪花算法生成id精度丢失
文章浏览阅读2.2k次。sumlime text关闭自动更新_sublime关闭更新检测
文章浏览阅读326次,点赞8次,收藏10次。前端
文章浏览阅读6.9k次,点赞4次,收藏20次。1,dataframe 写入excel:多个dataframe需要写入同一个excel时,每次使用df.to_excel(文件名)的形式去写,系统都会重新创建一个新的文件。也就意味着前面的文件会被覆盖掉,你得到的只能是最后一个df写入的结果文件通过创建一个ExcelWriter对象,可以解决上面的问题writer = pd.ExcelWriter(os.path.join(os.ge..._多个dataframe写入一个excel
文章浏览阅读654次。步骤1两个Edittext用来作为输入和获取的媒介<android.support.constraint.ConstraintLayout ="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:to..._文本输入读取
文章浏览阅读2.8k次,点赞3次,收藏8次。业界良心OpenAI开源的[Whisper模型](https://v3u.cn/a_id_272)是开源语音转文字领域的执牛耳者,白璧微瑕之处在于无法通过苹果M芯片优化转录效率,Whisper.cpp 则是 Whisper 模型的 C/C++ 移植版本,它具有无依赖项、内存使用量低等特点,重要的是增加了 Core ML 支持,完美适配苹果M系列芯片。 _c++语音识别库
文章浏览阅读688次,点赞7次,收藏11次。导出word文档方法有很多,但这次要导出图片,所以选用了html-docxhtml-docx是根据html代码进行导出........_前端批量docx转jpg
文章浏览阅读749次。TaiShan 200 服务器 Ubuntu 18.04 安装指南, amr64,aarch64_ubuntu登录华为泰山服务器.