【一起学UniGUI】--创建新的uniGUI应用程序(11)

      打开Delphi 10.3.1,在Delphi IDE中可以通过uniGUI应用程序向导轻松创建一个新的uniGUI应用程序(必须通过此方式来创建一个新的uniGUI应用程序),并按向导界面提示操作。

(一)、使用uniGUI应用程序向导创建一个新的uniGUI应用程序,主要步骤为:
1、File->New->Other

2、选择 uniGUI for Delphi-> Application Wizard,点“OK”

3、填写项目名称和项目存放目录,并且按需求选择一个项目类型后(开发学习时一般我选第一个),点“OK”,系统会自动生成相关的项目代码及几个模块和窗体(见图二)

      到这里,一个应用程序项目的架构由UniGUI向导自动生成了,从上图我们可以看到自动生成了几个模块和窗体,这也就是我们前面讲的几个重要模块和窗体(后面的内容重复说明或复习一下):每个uniGUI应用程序都是使用一个主窗体(MainForm)的专用窗体和两个专用的模块主模块(MainModule)服务模块(ServerModule)组成且自动创建的。登录窗体(LoginForm)可视情况选择或增加(类似额外添加,以后会讲,这里是没有的)。上述各模块和窗体说明请参阅之前的文章【一起学UniGUI】--UniGUI的窗体和模块(6)

(二)、【项目类型】:也对应应用程序以后的部署选项(可一起参阅之前的“【一起学UniGUI】--UniGUI的部署选项(5)”),下面分类进行综合说明(请结合上图):

1、Standalone Server (独立服务器)

       最简单的项目类型是独立服务器。在这种模式下,应用程序服务器像桌面应用程序一样直接运行。它也是用于调试应用程序的模式。运行应用程序可执行文件后(它是一个EXE文件),它将最小化到托盘图标,并运行到用户手动终止为止。见下图:


        一个独立的应用程序可以从浏览器访问,地址栏只需键入:http://localhost:8077,其中8077是应用程序绑定到的默认专用端口号(侦听端口)。开发者可以在服务模块(ServerModule)中轻松地修改它。
       独立模式只建议用于调试目的。因为它是作为桌面应用程序运行的,所以当当前用户注销时,它就会被终止。而且,它不会在重启后自动启动。模式最适合用于开发时调试。当您的应用程序在调试模式下运行时,您可以设置断点、暂停、转到光标位置,并使用Delphi IDE的所有其他高级调试功能来调试您的应用程序,就像调试任何其他VCL应用程序一样。不建议在正式使用环境中使用此模式,因为它不会在OS重新启动时自动运行。此外,它可以很容易受未经授权的用户干预而被终止。

      独立服务器项目是uniGUI项目的最简单类型。它创建一个运行类似于桌面应用程序的应用程序(EXE文件),即由用户启动和终止应用程序。这种类型的应用程序最适合用于调试目的。下面是一个典型的新创建的独立服务器项目的示例DPR文件。

program Project1;
 
uses
  Forms,
  ServerModule in 'ServerModule.pas' {UniServerModule: TUniGUIServerModule},
  MainModule in 'MainModule.pas' {UniMainModule: TUniGUIMainModule},
  Main in 'Main.pas' {MainForm: TUniForm};
 
{$R *.res}
 
begin
  Application.Initialize;
  TUniServerModule.Create(Application);
  Application.Run;
end.

2. ISAPI 模块
      该技术最初是由Microsoft公司采用基于Windows DLL技术应用到Microsoft IIS产品中的。当然,还有其他web服务器,如Apache,也支持加载ISAPI模式。ISAPI模式在许多方面与前面讨论的选项不同。最重要的是,它不包含内置的Web服务器,而不是独立的服务和Windows服务。在ISAPI模式下,IIS服务器是HTTP服务器,ISAPI模块执行它的请求。您可以使用Delphi IDE中的uniGUI向导轻松创建ISAPI模式应用程序。编译后,uniGUI应用程序将输出DLL文件而不是EXE文件。这个DLL文件必须部署到IIS服务器(详细描述在Web部署部分的ISAPI模式中)。uniGUI 应用程序所生成的DLL文件支持从IIS 5.1开始的所有IIS版本。ISAPI模式为开发人员提供了在同一服务器上部署许多模块的自由,而不需要为每个应用程序选择不同的端口。它还继承了Microsoft IIS中所有高级安全特性的优点。
       运行ISAPI应用程序就像在浏览器中打开以下URL一样简单,访问格式如下:
               http://localhost/appdir/app.dll
      如果你有多个应用程序在同一个文件夹下,你可以调用他们只需指定一个不同的DLL名称:
              http://localhost/appdir/app.dll
              http://localhost/appdir/app2.dll
              http://localhost/appdir/appaccount.dll

      如果您计划启动ISAPI模式项目并选择它作为默认的部署方法,您可以选择这种类型的项目。这个项目在编译时将生成一个DLL。ISAPI模块可以部署到Microsoft® IIS服务器或用于Windows的Apache服务器。下面是一个典型的新创建的ISAPI模块项目的示例DPR文件。

library Project1;
 
uses
  uniGUIISAPI,
  ServerModule in 'ServerModule.pas' {UniServerModule: TUniGUIServerModule};
 
{$R *.res}
 
exports
  GetExtensionVersion,
  HttpExtensionProc,
  TerminateExtension;
end.

3. Standalone Server (独立服务器)/ISAPI 模块

      这种类型的项目是使用条件编译指令来创建上面两种类型之一的组合项目:独立服务器或ISAPI模块。如果ISAPI模块部署的目标是正式使用,那么这种类型的项目是非常好的开始。只需注释掉DPR文件的第一行,就可以将独立服务器转换为ISAPI DLL。

{$define UNIGUI_VCL} // 注释掉这一行(即改为:{.$define UNIGUI_VCL}),可使用这个项目改成一个ISAPI模式
 
{$ifndef UNIGUI_VCL}
library
{$else}
program
{$endif}
  Project1;
 
uses
  uniGUIISAPI,
  Forms,
  ServerModule in 'ServerModule.pas' {UniServerModule: TUniGUIServerModule},
  MainModule in 'MainModule.pas' {UniMainModule: TUniGUIMainModule},
  Main in 'Main.pas' {MainForm: TUniForm};
 
{$R *.res}
 
{$ifndef UNIGUI_VCL}
exports
  GetExtensionVersion,
  HttpExtensionProc,
  TerminateExtension;
{$endif}
 
begin
{$ifdef UNIGUI_VCL}
  Application.Initialize;
  TUniServerModule.Create(Application);
  Application.Run;
{$endif}
end.

      默认情况下,上面的项目将生成一个EXE文件,它是一个独立的服务器。如果注释掉项目的第一行,它将变成ISAPI模块(方法详见下面说明及步骤)。稍后,您可以通过删除第一行中的注释将其转换回独立的EXE模式。下面说一下互相转换的方法及步骤。

将组合项目转换为ISAPI DLL的步骤:

1)、打开DPR文件。
2)、将DPR文件的第一行更改为(就是在{后面加入一个“.”来注释掉此行条件):{.$define UNIGUI_VCL}
3)、如果您的Delphi版本是XE2或更新版本,则需要关闭项目并重新打开它。(如果您的Delphi版本比XE2老,则不需要此步骤)
4)、 Build您的应用程序。
5)、将在输出文件夹中创建DLL文件。

将组合项目转换回独立模式的步骤:

1)、打开DPR文件。
2)、将DPR文件的第一行更改为:{$define UNIGUI_VCL}
3)、如果您的Delphi版本是XE2或更新版本,则需要关闭项目并重新打开它。(如果您的Delphi版本比XE2老,则不需要此步骤)
4)、Build您的应用程序。
5)、将在输出文件夹中创建EXE文件。

4. Windows 服务

      通过创建uniGUI Windows服务应用程序,可以将应用程序部署为标准的Windows服务应用程序。这种方法是正式使用环境的首选方法之一。每次系统重启时,Windows服务都会自动运行。它将保证Web应用程序的可用性。Windows服务应用程序可以像上面描述的独立服务器一样从浏览器访问,这意味着每个Windows服务应用程序都需要一个专用端口(未使用的专用端口)。

      正式环境的另一种部署方法是Windows服务。它创建了一个标准的Delphi Windows服务项目,同时也做了一些修改,以允许创建uniGUI ServiceModule。服务项目生成标准的Windows服务可执行文件,可以像安装任何常规Windows服务一样安装这些文件。Windows服务是由Windows自动启动的,只要Windows在运行,可确保它总是可用的。这为uniGUI应用程序提供了高级别的可用性。

program Project1;
 
uses
  SvcMgr,
  ServerModule in 'ServerModule.pas' {UniServerModule: TUniGUIServerModule},
  MainModule in 'MainModule.pas' {UniMainModule: TUniGUIMainModule},
  Main in 'Main.pas' {MainForm: TUniForm},
  ServiceModule in 'ServiceModule.pas' {UniServiceModule: TUniGUIService};
 
{$R *.res}
 
begin
  if not Application.DelayInitialize or Application.Installing then
    Application.Initialize;
  Application.CreateForm(TUniServiceModule, UniServiceModule);
  Application.Run;
end.

备注说明:新的程序或项目,都是从此开始的。上面的相关代码,也都是自动生成的。

这个文档中的话题与解决方案, 几乎全部来自 UniGUI 的交流群, 群中活跃的 BDS2007、 cmj 等人,给了众多使用 UniGUI 的人很多帮助。 这个文档, 主要是习与方便后来之人, 文档积累的起因是严肃而正式的, 因为每个人 都有习的需求;但文档的所谓版权、著述, 我希望它是有公益色彩的东西,如有哪位不希 望解决方案不出现在这里,请您告知。 此外, 就是期待大家都能把自己的一些经验, 给指导和帮助后来人的东西, 在不影响您 正常工作与其他事情的前提下,奉献出来。至于正确与错误、高超或低下,无关大体。 目 录 1. 事件中的代码在服务器端和客户端,哪一端执行? ........................................................... 3 2. 为什么 UniGUI 控件在 IE中显示的字体会变小、模糊? .................................................... 3 3. 在浏览器端不能使用 ShowMessage() .................................................................................... 5 4. 修改工程文件,使 exe 程序编译成 dll .................................................................................. 6 5. UniGUI 开发的 dll 如何发布 .................................................................................................... 7 6. uniGUI0.94 以 EXE形式发布程序的布署方法 ..................................................................... 13 7. uniGUI 执行程序部署有 3 种形式 ......................................................................................... 14 8. 在 UniGUI 里使用 ADO 的设置 .............................................................................................. 16 9. MainModule 怎样得到 js 变量的值 ...................................................................................... 16 10. TUniServerModule 和 TUniMainModule 这两模块有何区别 ....................................... 16 11. MainModule 里一般放什么, ServerModule 一般放什么? ....................................... 17 12. 主窗体的标题怎么去掉 ................................................................................................. 17 13. 用 ExtEvent 打开链接和下载文件 ................................................................................. 17 14. WebApplication 显示对话框 .......................................................................................... 17 15. Uni 中的 UniChart 的 Series增删 .................................................................................. 17 16. 怎样给每一个在线用户建立一套变量,在用户断开后立即清除 ............................. 18 17. TUniHiddenPanel 的作用 ................................................................................................ 18 18. UniDBGrid 如何转为 Excel供下载? ............................................................................. 18 19. uniGUI 实现 Excel的导出 .............................................................................................. 18 20. UniDBGrid Excel文件下载 .............................................................................................. 19 21. Excel文件导入系统 ........................................................................................................ 21 22. 文件转档与下载 ............................................................................................................. 21 23. Send File()应用 ............................................................................................................... 21 24. UniGUI 的 Canvas使用 ................................................................................................... 22 25. 动态生成 TTabSheet or TUniTabSheet ........................................................................... 22 26. UniGUI 中如果获得 Session情况 .................................................................................. 23 27. UniGUI Func 之 Sessions ............................................................................................... 23 28. uniGUI 通过 SessionList操作另外的登录用户 ............................................................ 24 29. UniGui 中如何监听 Session的开始与结束 ................................................................... 25 30. UniGUI 如何禁止关闭窗口 ........................................................................................ 27 31. UniGUI 中控件类名的变化 ............................................................................................ 27 32. 再议 UniGUI 中使用 Grid+Rport 报表控件 (推荐此方法 ) ............................................. 28 33. UniGUI 的布局面板控件 TUniRegionPanel ................................................................... 28 34. UniGUI 使用报表 Grid+Report 的方法之一 (静态调用 ) ................................................ 28 35. UniGUI 使用报表 Grid+Report 的方法之二 (动态调用 ) ................................................ 28 36. UniGUI 中 Cookies 使用中文汉字的方法 ...................................................................... 28 37. UniGUI 如何实现压缩传输数据? ................................................................................ 29 38. UniGUI 的 ShowModal .................................................................................................... 29 39. UniGUI 前台用户如何在软件中点击一个按钮打开浏览器并打开地址? ................ 29 40. How To Make Caption In UniGUI? ................................................................................. 30 41. 在 UniGUIUniHtmlFrame 中不能使用的 HTML 标签 .............................................. 30 42. 利用 UniGUI 中的 TUniPageControl 实现多页面 .......................................................... 30 43. UniGUI TreeView 处理 .................................................................................................... 31 44. UniGUI 设置超时 ........................................................................................................... 31 45. UniGUI 如何实现登陆页面 ............................................................................................ 31 46. UniGUI 如何实现超链接 ................................................................................................ 32 47. 从 ASP网站登录到 UniGUI 中 ....................................................................................... 32 48. UniGUI 数据库初始化要放到 MainModule 里 ............................................................. 32 49. UniGUI Cookies ................................................................................................................ 32 50. Form Inheritance ............................................................................................................. 33 51. UniGUI 组件中的 Client JavaScript Delphi 组件之间的操作 ......................................... 33 52. JS能取 Delphi 控件的值? ............................................................................................ 34 53. 写 js 的注意 .................................................................................................................... 34 54. unigui 结合 JS方法记录 ................................................................................................. 34 55. JS,Jquery获取各种屏幕的宽度和高度 ......................................................................... 35 56. uniGUI 动态建立 Form 及释放 ...................................................................................... 37 57. uniGUI 经验两则 uniTimer uniHtmlFrame .................................................................... 37 58. uniGUI 使用百度地图 api 进行标注 .............................................................................. 37 59. fileupload 的问题 ........................................................................................................... 38 60. unigui unidbgrid 显示列的合计值 ................................................................................. 38 61. UniGui 中设置 uniEdit 控件的 fieldLabel ,emptyText 等 Extjs 属性 .............................. 40 62. uniGUI 用 Grid++Report 报表插件设计保存报表 (For unigui ver:0.95.0.1045) ............ 40 63. UniGUI 的 TUniLoginForm 窗口自定义背景色 .............................................................. 46 64. uniGUI 显示 Warning: Form must be shown after it is created 的解决办法 ................. 46 65. 界面上的快捷方式 ......................................................................................................... 46 66. 调用 WebService............................................................................................................. 47 67. TUniTreeView 的 CheckBox ............................................................................................ 49 68. 通过 URL来获取相关参数 ............................................................................................ 52 69. uniDBGrid 实行多选表格行 ........................................................................................... 52 70. UniDBGrid 增加显示记录数的 label 及隐藏 refresh 按钮 ............................................ 56 71. 对 UniDBGrid 的单元格操作 .......................................................................................... 57 72. DBGrid 多选后计算问题(是否可以作为参考?) .................................................... 58 73. UniDBGrid 选择字段 Boolean 处理 ................................................................................ 59 74. UniDBGrid 自带 MultiSelect 无法使用【最版可以】 ............................................... 60 75. 如何打开 URL,让系统看起来舒服点 ......................................................................... 61 76. 如何修改 UniGUI 下的中文信息 ................................................................................... 62 77. 如何实现 UniDBGrid 下字段显示按钮 .......................................................................... 62 78. 如何实现 UniDBGrid 下字段自动换行 .......................................................................... 62 79. 如何结合 kbmMW .......................................................................................................... 63 80. 如何规避浏览器访问时 ajax 异常 ................................................................................ 63 81. 事件操作时,如果出现等待效果 ................................................................................. 63 82. 登录页面和主页面切换之间碰到的异常 ..................................................................... 63 83. 让 Page 中切换 Tab效果稍微好一点 ........................................................................... 64 84. UniImage 可以嵌入 PNG图片 ....................................................................................... 64 85. UniImage 自带导入 PNG图片的问题 ........................................................................... 65
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值