每个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.