热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【一起学UniGUI】UniGUI的窗体和模块(6)

每个uniGUI应用程序都是使用一个主窗体(MainForm)的专用窗体和两个专用的模块主模块(MainModule)和服务模块(ServerModule)组成且自动

       每个uniGUI应用程序都是使用一个主窗体(MainForm)的专用窗体和两个专用的模块主模块(MainModule)服务模块(ServerModule)组成且自动创建的。登录窗体(LoginForm)在uniGUI中也有特殊的含义,它主要是完成会话用户的登录事务,可视情况选择或增加。

       上面讲的,是主要的或必不可少的一些窗体和模块,并不包括用户自己依需求创建的数据模块(DataModules)、页面(Frames)和窗体(Form),其中各分类主要如下:

  1)、数据模块(DataModules):应用程序数据模块(Application DataModule)、自由数据模块(Free DataModule) 
  2)、窗体(Form):登录窗体(LoginForm)、主窗体(MainForm)、应用程序窗体(Application Form)、自由窗体(Free Form) 
  3)、页面(Frames)
PS:以上各部分我会在后面的相关学习章节中,一一详细讲述。此处只讲一个纲,让大家从总体上进行了解。

(一)、服务模块(ServerModule):

       每个uniGUI应用程序都包含一个名为ServerModule的服务模块,它是应用程序的核心模块。它是单例的,这意味着每个应用程序只创建一次。它主要用于配置各种服务器设置。设计时界面如下图:

(二)、主模块(MainModule):

       主模块(MainModule)可以被认为是会话的核心。它是一个特殊用途的模块,在每次创建新项目时会自动创建并添加到项目中。MainModule在uniGUI应用程序中有许多重要的角色。其中一些角色对开发人员是不可见的。设计时界面图如下:

        对于开发人员,MainModule可以用于放置会话共享的资源,如数据库连接、共享变量等。例如,您可以在MainModule的public部分声明公共变量,然后从会话中的其他窗体访问它们。

       下面的示例演示了uniGUI中在会话中在不窗体之间共享数据的常见实践。由于每个会话都有其MainModule的私有副本,因此将确保每个窗体在其会话中访问其私有数据集。

  TUniMainModule = class(TUniGUIMainModule)
  private
     { Private declarations }
  public
     { Public declarations }
     aUserName, aPassword: string;
  end;

然后,您可以从应用程序中的其他窗体访问这些变量:

procedure TMainForm.UniButton1Click(Sender: TObject);
begin
    UniLabel1.Caption :=UniMainModule.aUserName + ' ' + UniMainModule.aPassword;
end;

(三)、登录窗体(LoginForm):

       LoginForm是另一种特殊的窗体类型,仅用于登录目的。如果应用程序包含LoginForm(它继承自TUniLoginForm窗体类),一般为讲它将是Web会话启动时显示的第一个窗体。可以通过以下路径使用uniGUI向导创建LoginForm:File->New->Other->Delphi->uniGUI for Delphi->Form
       用uniGUI向导创建LoginForm的主要步骤如下:

此操作将创建一个空白的LoginForm,它看起来与常规窗体相同:

开发者可以依需求及实现情况进行设计登录界面,如可以设计下图(样例):

        LoginForm是一个名为TUniLoginForm的内置类的后代。每个应用程序只能有一个LoginForm。添加LoginForm之后,应用程序将在新会话启动时显示此窗体。您需要添加控件、事件处理程序以及所需的一切,以实现所需的登录功能。使用窗体的ModalResult来控制登录行为。如果LoginForm返回mrOK,则表示成功登录,并将创建和激活一个新的MainForm。当ModalResult返回mrCancel时,它将终止会话。如果我们使用一个只有两个按钮的窗体(一个用于成功登录,另一个用于失败),详情请见下面的代码:

  //Enter
procedure TUniLoginForm1.UniButton1Click(Sender: TObject);
begin
    ModalResult := mrOK;  // 有效登录后将跳到MainForm窗体
end;

//Cancel 
procedure TUniLoginForm1.UniButton2Click(Sender: TObject);
begin
    ModalResult := mrCancel; // 无效登录后或放弃则退出程序
end;

      一旦用户登录并显示MainForm,有两种方法可以终止会话。您可以通过返回mrOK作为ModalResult来终止会话并返回到LoginForm,或者通过返回mrCancel来终止会话。出于安全原因,现有会话总是在显示LoginForm之前终止,即每次新的登录都启动一个新的会话。

(四)、主窗体(MainForm):

        MainForm是实现SPA的单一窗体,它在成功登录(LoginForm)之后创建并显示(如果没有LoginForm存在则直接创建并显示)。通常,MainForm是使用菜单或其他导航工具导航到其他窗体的应用程序主窗体。在创建新项目时自动创建MainForm。每个Web会话都有自己的MainForm私有副本,互相独立,关闭MainForm将终止当前所属的会话。下图是一个空白的主窗体(MainForm):

MainForm在单元的initialization 注册,以便uniGUI能够将它与其他窗体分开来,实现代码如下。

initialization
   RegisterAppFormClass(TMainForm); 
end.
 


推荐阅读
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
author-avatar
我是小钞票
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有