菜菜侠的uniGUI使用笔记 -- 基础篇

菜菜侠的uniGUI使用笔记 – 基础篇


前言

刚开始学习与使用uniGUI时,往往是一头雾水,不知道如何下手,本篇的目的是记录我在学习与使用uniGUI过程中一些重点、要点,也希望能帮助到跟我一样的老Delphi粉丝。


一、项目的一些必要设置

1.1 执行程序,每次都需要关闭右下角图标的问题

在调试程序的时候,每次执行,都需要右键点右下角的图标,选择shutdown。不然程序就会报错。其实,我们可以通过一些设置避免出现这样的尴尬。
在这里插入图片描述
在这里插入图片描述
如图操作,点击保存,这样的尴尬就没有了。
为了方便大家,我把截图中文字部分拷贝出来,大家可以复制后自己填入:
taskkill /f /im $(OUTPUTFILENAME) 2>&1 || exit /B 0
上述方法是在D11下的示例,其它版本的位置略有不同,大家可以自己找一下,内容不变。

1.2 程序端口设置

uniGUI默认的端口是8077,你开发的程序想要自定义端口在哪里设置呢?请看下面的截图:
在这里插入图片描述
这样一设,端口就变了。

1.3 取消在浏览器中的窗口模式

uniGUI默认的是窗口模式,我们需要将其改为mfPage模式:

在这里插入图片描述
改完了再运行一下试试?

1.1.4 程序风格皮肤设置

uniGUI为用户提供了多种皮肤设置,设置的位置在MainModule单元,设置方法如下图:
在这里插入图片描述

二、基础知识

2.1 特殊对象

2.1.1 UniApplication对象

UniApplication 返回一个 TUniGUIApplication 实例,该实例是所有当前会话资源(MainForm、MainModule 以及所有其他表单和 DataModule)的所有者。它是全局可用的,可以在 uniGUI 控制事件处理程序中访问。UniApplication 有几个有用的属性,可用于获取有关关联会话的信息。例如,URL 参数、客户端屏幕宽度、客户端屏幕高度、设备类型、与客户端 PC 相关的信息以及 Cookie。

在代码中创建form时,必须将其所有者设置为 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(‘This is an Android device!’);
end;

2.1.2 UniSession 对象

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

procedure TMainForm.UniButton2Click(Sender: TObject);
begin
UniSession.Terminate; // Terminate current session
end;

procedure TMainForm.UniButton2Click(Sender: TObject);
begin

// Redirect current window to a new location
UniSession.UrlRedirect(‘http://www.newsite.com’);
end;

与 UniApplication 一样,UniSession 仅在从 uniGUI 控件事件处理程序(即属于会话的控件)访问时返回有效实例。例如,TUniButton 实例始终属于会话。

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

// We are in an event handler from a TUniButton, so UniSession

// can be accessed here.
IPAddress := UniSession.RemoteIP;

end;

在下面的示例中,访问 UniSession 将导致访问冲突,因为 UniThreadTimer 不是 uniGUI 控件,并且其事件不与任何会话关联。UniThreadTimer 事件在单独的线程中异步运行。

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

// this will cause an access violation error because there is

// no session associated with this event
IPAddress := UniSession.RemoteIP;

end;

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

unit uniGUIApplication;

interface

function UniSession: TUniGUISession;
function UniApplication: TUniGUIApplication;

2.1.3 UniServerInstance 对象

UniServerInstance 是 uniGUIServer.pas 中定义的全局函数,它返回 ServerModule 单例的全局实例。

unit uniGUIServer;

interface

function UniServerInstance: TUniGUIServerModule;

2.2 uniGUI应用架构

我们在使用uniGUI编程的时候,还是需要了解一下它的应用架构,这样能帮助我们理解这套框架,编写的程序也会更加强壮。

下图显示了 uniGUI 服务器的内部结构。每个 uniGUI 服务器都有一个 ServerModule 的副本,每个服务器创建一次,以及多个会话,这些会话根据用户活动动态创建和销毁。uniGUI 会话包含一个名为 MainModule 的专用 DataModule,它是为每个会话自动创建的。它还包含一个名为 MainForm 的窗体,它是 Web 应用程序的主要入口点。如果项目包含 LoginForm,它将在 MainForm 之前激活,为用户登录提供可靠且安全的方式。正如预期的那样,每个会话可以包含多个额外的 DataModule和 Forms。

每次用户打开 Web 应用程序的新实例时,服务器都会创建一个新的会话。会话将保持活动状态,直到用户注销、关闭浏览器/选项卡或超时。每个会话都保留正在运行的 Web 应用程序的完整状态,以便将 uniGUI 会话称为有状态会话。可以将每个会话视为 Web 应用程序的专用副本,该副本与服务器地址空间中的其他会话共存,但与所有其他会话隔离。服务器使用唯一的“会话 ID”创建每个会话,用于将客户端请求与会话正确关联(会话 ID 始终是 AJAX 请求的一部分)。

如果 uniGUI 应用程序只是一个 ISAPI 模块,则正在运行的服务器将实例化一个 ISAPI 处理程序。如果没有 Web 服务器,则正在运行的服务器将启用其内部 Web 服务器。在这两种情况下,对活动 Web 服务器的所有请求最终都将转到正确的会话。
在这里插入图片描述

本篇会根据我在学习使用uniGUI的过程中,进行扩充,请读者关注。

如果你觉得我的笔记对你有用,请帮我点赞,我刚开始在这里写文档,没有足够的赞,不够L3级,不能自定义标签呢。
谢谢大家!

相关uniGUI安装包在下面链接,含源码,包安装成功,有任何问题可留言,看见回复。
https://download.csdn.net/download/qq_20041779/88784300

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值