【一起学UniGUI】--UniGUI的特殊对象(10)_unigui实例-程序员宅基地

技术标签: 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);
begin
if upAndroid in UniApplication.UniPlatform then
   ShowMessage('这是一个安卓设备!');
end;

2)、UniSession 对象 

       UniSession返回当前会话的TUniGUISession类的实例。它包含与会话相关的所有信息。例如IP地址、用户代理、主机地址、平台相关数据等。UniSession还包含了一些重要的方法,可以用来控制一个session(如终止当前会话等):

procedure TMainForm.UniButton2Click(Sender: TObject);
begin
  UniSession.Terminate; //终止当前会话
end;
 
procedure TMainForm.UniButton2Click(Sender: TObject);
begin

  //在当前窗口中重定向或跳转到一个新的地址

  UniSession.UrlRedirect('http://www.newsite.com');
end;

      与UniApplication类似,UniSession从uniGUI控件事件句柄中总是返回一个有效实例。例如,TUniButton实例总是属于某个会话。

procedure TMainForm.UniButton2Click(Sender: TObject);
var
  IPAddress : string;
begin

  // 在TUniButton的事件中,我们可以获取UniSession的相关信息,如远程IP
  IPAddress := UniSession.RemoteIP;
 
end;

       在下面的示例中,访问UniSession将导致访问冲突,因为UniThreadTimer不是uniGUI控件,它的事件不与任何会话关联。UniThreadTimer事件在单独的线程中异步运行。 
PS:TUniThreadTimer创建一个在自己的线程中运行的计时器。这与原来的TTimer或它的uniGUI等价的TUniTimer不同。禁止在TUniThreadTimer的事件处理程序中访问uniGUI可视化组件。

procedure TMainForm.UniThreadTimer1Timer(Sender: TObject);
var
  IPAddress : string;
begin

  //这将导致访问冲突错误,因为没有与此事件关联的会话

  IPAddress := UniSession.RemoteIP; 
end;

       UniSession是一个“全局”对象,当从不同会话访问时,它可以返回不同的值。这与UniApplication的情况相同;UniSession实际上是一个在uniGUIApplication.pas中声明的全局函数。当在事件处理程序中调用时返回正确的会话实例。 

unit uniGUIApplication;
 
interface
 
function UniSession: TUniGUISession;
function UniApplication: TUniGUIApplication;
...

3)、UniServerInstance 对象 

   UniServerInstance对象是uniGUIServer.pas中定义的一个全局函数。它返回ServerModule的全局实例。

unit uniGUIServer;
 
interface
 
function UniServerInstance: TUniGUIServerModule;
...

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gzhubin/article/details/92567540

智能推荐

数据库安全:Hadoop 未授权访问-命令执行漏洞._hadoop未授权访问-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏4次。Hadoop 未授权访问主要因HadoopYARN资源管理系统配置不当,导致可以未经授权进行访问,从而被攻击者恶意利用。攻击者无需认证即可通过RESTAPI部署任务来执行任意指令,最终完全控制服务器。_hadoop未授权访问

100个替代昂贵商业软件的开源应用_citadel开源中文版本-程序员宅基地

文章浏览阅读4.1k次,点赞3次,收藏18次。100个替代昂贵商业软件的开源应用面对大,中,小企业和家庭用户,立竿见影显著降低成本的开源软件。某些商业软件素以昂贵著称。随着云计算的日益普及,很多常用软件包供应商将一次性收费改为月租模式。虽然月租费貌似便宜,但也经不起长时间的累积。100个替代昂贵商业软件的开源应用尽管有许多好理由,但避免或减少使用费,仍然是许多用户看中开源应用软件的主要因素。基于这一点,我们更新了可替代_citadel开源中文版本

竞选计算机协会网络部部长,2019年计算机协会部长竞选演讲稿-程序员宅基地

文章浏览阅读55次。2019年计算机协会部长竞选演讲稿篇一:计算机协会部长竞选演讲稿尊敬的领导,敬爱的老师,亲爱的同学们:大家晚上好!俗话说:马只有驰骋千里,方知其是否为良驹;人只有通过竞争,才能知其是否为栋梁。我是来自xxx班的伍朝海,今晚,我很荣幸能够站在这里参加这次学生会的竞选,职位是xx系的宣传窗口——新闻网络部的负责人。我知道,今晚竞选的不仅仅是个职位,也是在竞选一个为同学们服务的机会,更是在竞选一个为我们...

ipython和jupyter notebook_第02章 Python语法基础,IPython和Jupyter Notebook-程序员宅基地

文章浏览阅读185次。第2章 Python语法基础,IPython和Jupyter Notebooks当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少。这部分上是一个鸡和蛋的问题:我们现在使用的库,比如pandas、scikit-learn和statsmodels,那时相对来说并不成熟。2017年,数据科学、数据分析和机器学习的资源已经很多,原来通用的科学计算拓展到了计算机科学家..._jupyter notebook if后面有多个条件

雪花算法生成的ID精度丢失问题_雪花算法生成id精度丢失-程序员宅基地

文章浏览阅读494次,点赞2次,收藏2次。雪花算法生成的ID精度丢失问题雪花算法ID精度丢失_雪花算法生成id精度丢失

Sublime Text关闭更新(亲测可用)_sublime关闭更新检测-程序员宅基地

文章浏览阅读2.2k次。sumlime text关闭自动更新_sublime关闭更新检测

随便推点

20231114歌谣v3--学习篇-组件注册-props-程序员宅基地

文章浏览阅读326次,点赞8次,收藏10次。前端

pandas:多个dataframe写入同一个excel, html_多个dataframe写入一个excel-程序员宅基地

文章浏览阅读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..._文本输入读取

极速进化,光速转录,C++版本人工智能实时语音转文字(字幕/语音识别)Whisper.cpp实践_c++语音识别库-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏8次。业界良心OpenAI开源的[Whisper模型](https://v3u.cn/a_id_272)是开源语音转文字领域的执牛耳者,白璧微瑕之处在于无法通过苹果M芯片优化转录效率,Whisper.cpp 则是 Whisper 模型的 C/C++ 移植版本,它具有无依赖项、内存使用量低等特点,重要的是增加了 Core ML 支持,完美适配苹果M系列芯片。 _c++语音识别库

前端(vue)导出word文档(导出图片)_前端批量docx转jpg-程序员宅基地

文章浏览阅读688次,点赞7次,收藏11次。导出word文档方法有很多,但这次要导出图片,所以选用了html-docxhtml-docx是根据html代码进行导出........_前端批量docx转jpg

TaiShan 200服务器安装Ubuntu 18.04_ubuntu登录华为泰山服务器.-程序员宅基地

文章浏览阅读749次。TaiShan 200 服务器 Ubuntu 18.04 安装指南, amr64,aarch64_ubuntu登录华为泰山服务器.

推荐文章

热门文章

相关标签