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

时间:2024-03-23 08:06:36

       每个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的服务模块,它是应用程序的核心模块。它是单例的,这意味着每个应用程序只创建一次。它主要用于配置各种服务器设置。设计时界面如下图:

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

(二)、主模块(MainModule):

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

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

        对于开发人员,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的主要步骤如下:

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

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

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

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

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

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

        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):

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

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

initialization
   RegisterAppFormClass(TMainForm); 
end.