今天,我们发布了TMS WEB Core v2.2,这是我们努力使 Object Pascal 开发人员的 Web 客户端应用程序开发尽可能无缝、高效和高效的另一个里程碑。
v2.2 再次引入了大量新功能和增强功能,使开发人员体验更好、更丰富。让我们立即跳转到详细信息!
经验丰富的 TMS WEB Core 开发人员会意识到,TMS WEB Core 生成带有 SPA(单页应用程序)的 Web 客户端应用程序)架构类似于 Angular、Vue、React 的架构……虽然这个名称可能会被误解为提供单一形式的应用程序,但这绝对是不正确的。SPA 意味着应用程序从单个 URL 启动,并且在执行时,应用程序继续从此启动 URL 运行。这带来了一些缺点,例如,无法与以特定表单打开应用程序的其他用户共享 URL。路由为此提供了解决方案。这意味着当打开新表单时,哈希值会添加到 URL,并且当使用带有哈希值的 URL 时,会在链接到哈希值的表单上自动打开应用程序。在以前版本的 TMS WEB Core 中,已经可以添加应用程序级代码来实现此功能,而 v2.2 则内置了自动机制。两个新的演示演示了如何使用它。要利用这一点几乎没有什么可做的。首先,在表单单元的初始化部分添加
查看纯文本
RegisterClass(TMyForm);
并在项目主代码中添加:
查看纯文本
if not Application.Route then
Application.CreateForm(TMainForm, MainForm)
项目源代码中的代码确保当 URL 使用哈希(类似 #formclass)时,应用程序将自动打开提到的表单而不是主表单。
当注册表单类时,这意味着当打开该表单时,散列#formclass将自动添加到应用程序URL中。
使用此技术还可以使用浏览器后退和前进按钮在表单之间导航。
我们邀请您查看Demo\Basics\AdminRouting 和 Demo\Basics\Routing 下的两个新演示应用程序来演示这一点。
如果您更愿意利用 Google 基础设施来管理后端数据,而不是使用数据库部署自己的 REST API 后端,您会发现使用 Firebase 现在要容易得多。在 IDE 中的设计时,您可以查看 Firebase 项目中的表并操作其元数据。这会自动配置 您可以绑定到数据库感知控件的 TWebFirestoreClientDataSet。这样,您就拥有了一个几乎无代码的解决方案来处理后端数据,包括多租户场景。
我们的网格得到了扩展,支持添加自定义绘制的单元格。这是通过使用 grid.AddCanvas(Column,Row) 将画布添加到单元格来实现的。添加后,您可以随时访问此画布并使用类似 VCL 的 TCanvas 代码在其上进行绘图。
实现此目的的代码变为:
查看纯文本
var
ACanvas: TCanvas;
pt: array of TPoint;
begin
WebStringGrid1.AddCanvas(1,1);
WebStringGrid1.AddCanvas(2,1);
WebStringGrid1.AddCanvas(3,1);
ACanvas := TCanvas.Create( webstringgrid1.GetCanvas(1,1));
try
setLength(pt,3);
pt[0].X := 32;
pt[0].Y := 4;
pt[1].X := 4;
pt[1].Y := 60;
pt[2].X := 60;
pt[2].Y := 60;
ACanvas.Brush.Color := clLime;
ACanvas.Pen.Color := clSilver;
ACanvas.Polygon(pt);
finally
ACanvas.Free;
end;
end;
现在,您可以使用任何其他控件作为网格单元的就地编辑器。这是通过以下方式实现的:
- 实现 OnGetCellEditor 并作为编辑器类型 geCustom 返回。例如,要使用自定义就地编辑器编辑第 2 列,请使用:
查看纯文本
procedure TForm1.WebStringGrid1GetCellEditor(Sender: TObject; ACol,
ARow: Integer; var AEditor: TGridCellEditor);
begin
if (ACol = 2) and (ARow >= WebStringGrid1.FixedRows) then
begin
AEditor := geCustom;
WebStringGrid1.EditControl := MyEditControl;
end;
end;
- 此外,两个事件处理程序允许将单元格数据传输到就地编辑器,反之亦然。这变得像:
查看纯文本
procedure TForm1.WebStringGrid1GetEditControlValue(Sender: TObject; ACol,
ARow: Integer; AControl: TControl; var Value: string);
begin
Value := (AControl as TMyEditControl).Text;
end;
procedure TForm1.WebStringGrid1SetEditControlValue(Sender: TObject; ACol,
ARow: Integer; AControl: TControl; const Value: string);
begin
(AControl as TMyEditControl).Text := Value;
end;
通过这种技术,使用 TWebCalendar 的 TWebDropDpownControl 用于在网格中创建日期选择器编辑控件:
TWebXLSX 是一个组件,允许直接从浏览器创建 Excel .XLSX 文件,然后将其下载到客户端计算机。现在,TWebXLSX 得到了扩展,支持将其绑定到 TWebDBGrid 或 TWebDBTableControl,以自动将其包含的数据从浏览器导出到 Excel XLSX 文件。
新的 TWebRTC 组件支持通过 WebRTC 标准协议通过音频、视频或桌面共享进行点对点 无服务器通信。建立连接只需要一个 Web 套接字服务器(其中包含我们使用 TMS FNC WebSocket构建的示例套接字服务器)。连接后,您可以通过浏览器进行通信,而无需依赖服务器,因此也无需此类服务器(例如 OpenTok 或 Jitsi)涉及任何可能的成本。
TWebRTC 再次遵循提供基于 RAD 组件的简单方法的原则,以便快速、轻松地将此功能添加到 Web 客户端应用程序中。您可以通过随附的新演示来探索这一新功能。
TElementAction 现在有3 个新操作:actAddClass、actAddRemoveClass、actRemoveClass 和新属性 TargetClassAdd、TargetClassRemove。通过这些要添加或删除的 CSS 类的新操作和定义,现在可以设置 TElementAction 以根据元素的特定 JavaScript 事件更改目标元素的 CSS 类。这使得无代码方法能够在单击或悬停其他 HTML 元素时更改 HTML 元素的状态或外观。
TWebGoogleChart 组件经过扩展,允许自定义 X 轴和 Y 轴的外观 。
为了跟踪TWebBrowserControl中内容的加载 ,现在可以使用新的 OnLoad 事件。
TWebHTMLContainer使用新方法 LoadFromURL() 进行了扩展,以允许从 URL 处的外部数据加载此容器中的内容。
此外,为了与实现 OAUTH2 流的服务接口, TApplication 类现在具有 HandleOAuth 属性 ,允许您选择 TApplication 是否处理此流,或者是否要使用应用程序级代码以自定义方式处理此流。
TWebButton控件现在添加了属性Cancel / ModalResult。这使得现在可以构建对话框,其中“确定”或“取消”按钮可以对 ESC 或 RETURN 键做出反应,以取消或关闭此类对话框。
用于将 TWebClientDataSet 连接到某个特定 URL 处的数据的 TWebClientConnection 以前只能将 JSON 数据加载到 TWebClientDataSet 中。现在它已扩展为还允许使用 CSV 格式的数据填充 TWebClientDataSet 。
正如您所看到的,TMS WEB Core 的这个新的主要版本投入了大量的精力。这样做的主要目标是:让您作为 Object Pascal 的生活更容易创建 Web 客户端应用程序。对于刚刚接触 Web 客户端开发的 Object Pascal 开发人员,您可以下载TMS WEB Core 的全功能试用版,并探索它如何让您高效地拥抱 Web 应用程序的世界!