DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: bluewind23
今日帖子: 0
在线用户: 6
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 l_wming (L_Wming) ★☆☆☆☆ -
普通会员
2024/6/14 10:15:00
标题:
Delphi 12 (及其后续版本) 没有 IntraWeb 组件了 浏览:1937
加入我的收藏
楼主: Delphi 12 (及其后续版本) 不再附带 IntraWeb 组件。IntraWeb 是一个商业的Web应用服务器,用于Delphi和C++Builder。从2012年起,Raize Networks 公司停止开发新版本的 IntraWeb,转而专注于支持现有客户和提供商业更新。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2024/6/14 13:20:19
1楼: 优胜劣汰
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/6/14 13:51:12
2楼: IntraWeb 出现得很早了。那个年代,WEB 开发还是流行在服务器端把页面都组装好发送给客户端浏览器的。那个年代流行这样做也是有道理的,那时候的服务器比较强,而客户端的电脑普遍很弱,跑不动太多的 JS 代码。

在那个年代 IntraWeb 还是很强大很好用的。不过,因为它的设计思想是服务器端组装页面,而且封装得比较好,因此如果你想在页面端做点什么,可能比较难搞。

然后因为它封装得很好,服务器端需要的一些比如 Session 这样的针对客户端的一些状态,可能也找不到下手的地方去改代码,只能用它已经提供的功能,扩展性差一点。

现在流行前后端分开,页面是页面,后端只提供数据。这种情况下,IntraWeb 就过时了。

前后端分开的好处是开发可以更加的模块化。更多的工作(写代码的工作,以及计算量)放到前端浏览器里面,服务器干更少的活。这样在有巨大访问量的情况下,尽量多利用客户的电脑 CPU,服务器可以节省成本。也节省了流量费用,因为只传输数据,不用每次刷新都要传输整个页面。

Delphi 还有一个 UniGUI,这个是利用 JS 来做一些页面上的控件,然后把控件做成 Delphi 的设计期控件,这样可以在设计期可视化地操作页面控件,也是非常不错,把 Delphi IDE 做成了一个页面的可视化编辑器,总比手写页面代码好。但它也仍然是在服务器上把页面创建好。

如果把 UniGUI 做的页面控件,加上 HTMX 的框架和理念,那就完美了。

总结一下:
1. 如果有人用 JS 做好页面控件比如一个 DBGrid,并且这个页面控件有对应的 Delphi 设计期控件(设计期控件实际上是一个用 Delphi 代码实现的东西),通过拖拉控件就可以完成页面设计;UniGUI 已经有类似控件了。但可惜 UniGUI 不开源。

2. 页面布局,采用当前流行的框架,比如 BootStrap,这个假设也可以在 Delphi 里面指定;

3. 页面里面的元素的更新(页面刷新),采用 HTMX 的架构,也就是一个页面元素相当于一个控件,指定它的几个属性,就搞定它的动态刷新,而无需去写 JS 代码(HTMX 框架帮我们完成了 JS 代码部分)。这样就完全和 Delphi 的控件的用法一样,属性面板里面点几个设置,不用写程序就搞定。

4. HTMX 的服务器端,用什么语言都能写。用 Delphi 的 WebBroker 框架来写,逻辑清晰,概念清晰,非常简单。简直太爽滑。

做到这样几点,就是一个当下完美的 WEB 开发框架了。
----------------------------------------------
-
作者:
男 k3man (嗯哼) ★☆☆☆☆ -
普通会员
2024/6/14 14:05:33
3楼: 无论是IntraWeb还是UniGUI都停留在ASPX的WebForm时代,早与当下的Web主流格格不入。趁早丢弃这些,拥抱主流。
----------------------------------------------
-
作者:
男 xlonger (xlonger) ★☆☆☆☆ -
普通会员
2024/6/14 15:17:30
4楼: SpreadJS ,看js写的前端类excel表格控件,感觉挺厉害的。咋一看,顶部的菜单图标,还以为是office的excel软件呢。


我是不太懂。感觉delphi挺好的,但是不知道为何没有跟上时代的发展呢?不知道差在哪里啊,呵呵 需要架构师来解决。
----------------------------------------------
我打的是酱油,而不是别的什么油。
我灌的是口水,而不是别的什么水。
我聊的折腾不是那个不折腾的折腾。
我说的阿娇不是那个邓玉娇的阿娇。
3个代表,6个为什么,9个肠胃炎。
D性强的领导干部都不喜欢热比娅。
我特别要讲的是,屁民网黄色论坛是我经常上网必选的 网站之一
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2024/6/14 15:28:51
5楼: 1、unigui内核未必比intraweb先进。
但是unigui的web组件做得非常丰富和实用,绝大部分商业应用都涵盖了,这正是intraweb的短板,因此unigui发展远比intraweb要好,看看它的论坛就知道很热闹,而且有许多成功的商业案例。
2、前后端分离未必比用vcl服务器式开发先进。
unigui被诟病的地方是前后端没分离,导致数据代码和界面表现代码混杂在一起。
很多人认为这是unigui的短板,相反我认为这正是他的优势所在。
unigui的这种方式最大限度地发挥了面向对象组件式开发的优势,绝大多数object pascal\vcl不可视组件和非win32函数在unigui web中都是可用的,包括所有的数据集组件、数据驱动组件和一系列优秀的不可视第三方组件如fastreport、realthinclient都是可用的,这正是unigui的神奇之处,因为他没有像tms web core那样脱离delphi的工作方式而另起炉灶。
其实前端和后端分离,无论开发效率和运行效率都不会比unigui的面向组件式开发效率高。因为web前端和后端并不像cs的前后端那样,一个运行在服务器一个运行在客户机,其实web的前后端全部部署在服务器上,只是数据处理和界面表现层分布在两个程序中。unigui核心是把vcl转化为js\html\css代码,前后端则在后端处理数据然后把数据送达前端表现给客户。
3、综上,unigui走的路径是很正确的,特别是用rtc优化他的网  络并发性能后越发显得强大。目前它只有两个任务:一是开发更好的前端表现web组件,二是跨平台的脱离win32,争取在lazarus\freepascal上编译。而这两个都不存在技术障碍。
顺便提示:unigui推荐像android那样使用非阻塞式开发,这与vcl稍有区别,这提高了运行效率,但可能让win32开发者不适应,这里其实是一个函数式开发的概念:匿名闭包回调。
procedure TuniFrTreat.UniFSButton3Click(Sender: TObject);
begin
   MessageDlg
   (
      '该患者已经付款了吗?未付款的病历请及时删除', mtConfirmation, mbYesNo,
      procedure (Sender: TComponent; AResult:Integer)
      begin
       VbTreatRecords.Edit;
       if AResult=mrNo then
          VbTreatRecords.FieldByName('isPay').AsString:='未付款'
       else
          VbTreatRecords.FieldByName('isPay').AsString:='已付款';
       VbTreatRecords.Post;
       if not  VbTreatRecords.Update  then ShowMessage('信息变更错误')  ;
      end
   )
end;
这里使用了匿名式回调函数改变代码运行顺序,让你选择一个答案后再往下运行。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/6/14 15:45:13
6楼: 1. 前后端分离,是开发的需要,说白了就是模块化。程序越大,越需要分开。其实,VCL 的 DBGrid 就是标准的前后端分离。DBGrid 是前端表现层。数据在 DataSet 里面。而 DataSet 里面的数据,又来自后端的数据库或者说是来自中间层。在多层开发的框架下,中间层就类似 Web 的服务器端代码,负责业务逻辑和数据处理,DBGrid 只负责呈现数据。前端代码和后端代码混在一起,不是好的开发方式;

2. 非阻塞模式的开发不是好的模式。前端行业喜欢非阻塞模式那是因为 JS 没有多线程。安卓喜欢非阻塞模式同样是因为安卓系统里面不能阻塞主线程,一旦阻塞主线程,安卓系统会杀掉 APP。好的开发模式是阻塞模式,业务逻辑的代码是一行一行往下执行的,易读,易懂,不容易出错。

3. 至于说 Delphi 的非可视组件在 UniGUI 里面能用。这是废话。在 IntraWeb 里面,在 WebBroker 里面,非可视组件都能用。
----------------------------------------------
-
作者:
男 xlonger (xlonger) ★☆☆☆☆ -
普通会员
2024/6/14 16:01:38
6楼: , FMSoft is a company based in city of Ankara the capital of Turkey 

土耳其水平这么高啊。
----------------------------------------------
我打的是酱油,而不是别的什么油。
我灌的是口水,而不是别的什么水。
我聊的折腾不是那个不折腾的折腾。
我说的阿娇不是那个邓玉娇的阿娇。
3个代表,6个为什么,9个肠胃炎。
D性强的领导干部都不喜欢热比娅。
我特别要讲的是,屁民网黄色论坛是我经常上网必选的 网站之一
作者:
男 dlfsystem (dlfsystem) ★☆☆☆☆ -
盒子活跃会员
2024/6/14 22:15:32
7楼: IW是不错的高效开发工具,各位都是技术流,用户可不管这些,他们关注的是你的交货期,系统的稳定性和运行的流畅。
----------------------------------------------
-
作者:
男 tuao (tuao) ★☆☆☆☆ -
盒子活跃会员
2024/6/20 10:42:26
8楼: 看大神讨论,受益匪浅
----------------------------------------------
tuao
作者:
男 isxuzhu (e.Wong) ★☆☆☆☆ -
盒子活跃会员
2024/6/20 17:21:32
9楼: 看大神讨论,受益匪浅
----------------------------------------------
你我,都可以是个造梦者!欢迎加入脚本引擎PaxCompiler交流群303904495http://www.cnblogs.com/fireboxsoft有需要错别字检测软件的朋友可以在我博客上的地址下载使用,备注“2ccc”的朋友可以免费获取超级黄金VVVVVVVVVVIP授权
作者:
男 pp0123 (pp0123) ★☆☆☆☆ -
普通会员
2024/6/21 15:45:08
10楼: Intraweb 最大问题, 就是一直拒绝完成一份齐全完备的使用手册. 很多人向他们投诉过, 但一直置之不理. 有什么问题, 自己在一埋范例中找答案吧, 不论根本没有答案. 而且还要自己找各版本有没有更改相关功能用法. 这样的产品也敢收费, 哈.

Delphi 肯定有很大压力去支援像 Intraweb 的应用开发. 早前几次问题都有提及过. 放弃给 Intraweb 作推广, 估计是为推出自己的组件而准备. 他们曾对 WASM 与 HTMX 作研究, 似乎想走最新技术的路. 但恐怕越新的问题就越多.

Delphi 这样高昂的授权费, 竟然没有快速网页开发, 是过份了一点.
----------------------------------------------
-
作者:
男 FengLinYuShu (FengLinYuShu) ★☆☆☆☆ -
盒子活跃会员
2024/6/21 16:53:34
11楼: DeWeb了解一下?
----------------------------------------------
-delphi大富翁论坛http://www.delphibbs.com
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/6/21 18:30:28
12楼: 搜了一下 DeWeb,搜出 B 站一个视频:

https://www.bilibili.com/video/BV1Lf4y1G7ch/?vd_source=d418dfd96f3c3c9398a1f04a5e65f8dd

做得很牛叉啊。而且做到那么好,工作量也很大的。这哥们是个牛人。作者是 11 楼的楼主吗?
----------------------------------------------
-
作者:
男 yam (yam) ★☆☆☆☆ -
盒子活跃会员
2024/6/22 13:49:22
13楼: 新技术永远学不完,不用管过不过时,能实现项目要求不就得了,什么东西弄好了都牛逼
----------------------------------------------
-
作者:
男 wuxi15 (似水·流年) ▲▲▲▲▲ -
普通会员
2024/6/22 14:33:21
14楼: Deweb和UniGui原理是一样的。但是在大陆这边,我们要的Web应该是可以编译或者说是生成输出类例于UniApp的项目代码。然后用其他编译工具编译成小程序,安卓App,苹果App甚至是那个‘遥遥领先’的App。我就是说说而己,大家不要喷我。
----------------------------------------------
-
作者:
男 emtgao (element) ★☆☆☆☆ -
盒子活跃会员
2024/6/22 16:40:15
15楼: https://www.d2bridge.com.br/index.html这个开源的我一直在关注,也是一个DELPHI的WEB解决方案。
----------------------------------------------
-
作者:
男 wuxi15 (似水·流年) ▲▲▲▲▲ -
普通会员
2024/6/22 23:57:54
16楼: 15楼,你说的这个我也在关注,他就是一个类例于UniGui的框架。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/6/23 0:56:34
17楼: 15 楼说的,我去下载了,测试了一下,做得确实很好,封装得很好,作者水平很高,工作量也很大。巴西人做的。看起来巴西用 Delphi 的人不少。

不过,它也是自己把 WEB 服务器也封装了。页面上点个打开另外一个页面的按钮,实际上是发送请求给了服务器,服务器端再输出。因为它封装得很好,服务器端完全是 Delphi VCL 的惯性写法,Delphi 的使用者可能会觉得很熟悉,但是,封装得太好了,没有文档介绍的情况下,它的实现原理不知道的情况下,有什么需求需要做就不好做了。也就是使用者的自由度没那么高。而且我测试了它的第一个例子:

procedure TForm1.Button_Example2Click(Sender: TObject);
begin
 if Form2 = nil then
  TForm2.CreateInstance;
 Form2.Show;
end;

页面上点了一个按钮,确实调用到服务器端这段代码。然后页面上确实显示了第二个页面。问题来了,我点浏览器的回退按钮,并没有返回第一个页面。这种模式,给我的感觉,和 IntraWeb 差不多。

它厉害的地方在于,它把 Delphi 的页面元素,转换为了 WEB 元素。然后 WEB 元素点击后会触发对服务器的访问,然后服务器会把访问分派到某个 OnButtonClick 的事件方法里面。这样做确实需要写很多代码。

但是,我觉得这样做并不是好的 WEB 编程模式。好的模式其实就是在 WebBroker 架构底下编程,当然,页面设计可以是在 Delphi 的 Form 上做可视化设计,然后输出为 WEB 页面代码。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/6/23 1:04:25
18楼: 继续测试,发现它的模式和 IntraWeb 很相似,服务器端保持客户端的 Session,而且保持了 Form 的实例。并且,客户端和服务器端保持长连接。保持长连接的好处当然有,它的服务器端可以主动向客户端发送消息,客户端页面上能弹出消息。但也有坏处,那就是服务器端保持每个客户端页面的连接,需要很多资源。这样服务器端能同时顶住的访问量会更少。好的做法还是页面打开完毕就断开和服务器端的连接,这样是 WEB 的标准做法。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/6/23 2:17:03
19楼: TPrismServerTCP = class(TIdCustomTCPServer)

看起来这个框架是自己用 Indy IdTCPServer 实现了一个保持长连接的 WebSocket。

实际运行时,页面打开就和服务器一直保持连接。如果服务器端关闭,页面就会显示一个服务器掉线的提示页面,如果服务器打开,它又自动和服务器建立连接,然后服务器端的默认页面就出来了。

------
这个框架非常不错。使用它做一些小的内部使用的应用程序非常好,简单,易用,上手快,不需要懂 JS, css, html 等语言,会 Delphi 就能用它写 WEB。因为它保持长连接,登录后的 Session 它维护了,写代码的人不用操心登录后维护多个页面之间的 Session 的问题。

但是,这种架构不利于做那种针对大众的页面或者 APP,想要自己定制或者自己做一些它没有的东西时,不方便定制化开发,只能使用它已有的功能。

它的页面代码,还是最终使用了一些开源的网页框架,比如 BootStrap 这个框架,以及其它的一些开源框架。只不过它的 Delphi 代码对设计期拖到 Form 上的 Delphi 控件,进行了翻译,翻译成了 HTML 的代码。
-----

我心目中的 WEB 框架,应该是可视化开发/直接套页面框架,这两种模式。不管哪种模式,最终都是用 Delphi 的代码封装和操作一些开源的 WEB 组件。

然后作为 WEB SERVER 部分的代码,还是使用 WebBroker 这个架构。WebBroker 这个架构是一个非常好的架构,好到优秀。使用 WebBroker 框架,服务器端代码:
1. 可以利用 Indy HTTP Server 编译成一个独立的内置 WEB Server 的程序,这样方便调试,小的应用也可以直接用它。

2. 可以编译成 IIS 底下跑的 CGI 或者 ISAPI,这样可以充分利用 IIS 的能力;

3. 还可以编译成 APACHE 底下的 CGI 或者 .SO 充分利用 APACHE 这个 WEB Server 的能力;

4. 还可以编译成 Linux 底下的 Apache 的 CGI 或者 .SO,支出巨大访问量绝对没有问题,唯一问题是你的服务器的内存够不够。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/6/23 2:33:46
20楼: 它的一个 Demo 的代码:

function TForm1.BuildDataTable: string;
var
 vDataTables: TStrings;
begin
 vDataTables:= TStringList.Create;

 ClientDataSet_Country.First;
 ClientDataSet_Country.DisableControls;

 //HTMLElement
 with vDataTables do
 begin
  add('<div class="table-responsive">');
  add('    <table id="autofill-table" class="display compact table table-bordered text-nowrap mb-0">');
  add('        <thead>');
  add('          <tr>');
  add('          <th>Cod</th>');
  add('          <th>Country</th>');
  add('          <th>DDI</th>');
  add('          <th>Population</th>');
  add('          <th>Detail</th>');
  add('          <th>Options</th>');
  add('          </tr>');
  add('        </thead>');
  add('        <tbody>');

  //Popule Recs
  repeat
   with ClientDataSet_Country do
   begin
    add('<tr> ');
    add('    <td>'+FieldByName('AutoCod').AsString+'</td> ');
    add('    <td>'+FieldByName('Country').AsString+'</td> ');
    add('    <td>'+FieldByName('DDI').AsString+'</td> ');
    add('    <td>'+FieldByName('Population').AsString+'</td> ');
    add('    <td><span class="badge bg-success rounded-pill p-2" style="width: 7em;">Example</span></td> ');
    add('    <td class="text-center"> ');
    add('        <button id="bEdit" type="button" class="btn btn-sm btn-primary" onclick="{{CallBack=ButtonGrid(RecNo=' + IntToStr(RecNo) + ')}}"><span class="fa fa-edit"></span></button> ');
    add('    </td> ');
    add('</tr>');
   end;


   ClientDataSet_Country.Next;
  until ClientDataSet_Country.Eof;

  add('        </tbody>');
  add('    </table>');
  add('</div>');
 end;

 ClientDataSet_Country.EnableConstraints;

 Result:= vDataTables.Text;

 FreeAndNil(vDataTables);
end;

这段代码,最终还是在服务器端,用 Delphi 代码,拼字符串,拼了 HTML 的 Table 的字符串代码。

很多开源的前端 Web Grid,按照我的设想,好的框架,可以直接封装这种 Grid 然后 Delphi 的代码只需要把数据准备好(把数据变成这个 Grid 可以接收的 JSON 数据格式)然后丢给这个 Grid 就好了。

这样做,使用者完全可以随便扩展自己想使用哪个开源 Grid。使用者也不需要在 Delphi 代码里面写 Grid 的 HTML 代码。这样才是把前端的 Grid 组件化,使用者完全不需要知道 Grid 本身的代码,仅仅只向它提供数据。
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2024/6/23 18:37:30
21楼: d2bridge那个粗看起来没啥文档……
----------------------------------------------
z@S7
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/6/23 23:11:00
22楼: d2brideg 的 demo 还是不错的。看 demo 就足够学会如何使用了。用来做比较小的程序没问题,上手也快。

但它那种模式,用来做大程序不太好。

我前面几个贴说的就是它。看它的 Demo 分析的。
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2024/6/24 0:27:50
23楼: d2bridge确实有点意思。
就是网页显示什么怎么显示,
得靠在TD2BridgeForm.ExportD2Bridge和InitControlsD2Bridge里面写点代码才行。
----------------------------------------------
z@S7
作者:
男 bestfw (bestfw) ▲▲▲▲▲ -
普通会员
2024/6/25 14:12:58
24楼: @pcplayer谢谢你的测试啊,d2bridge,他这个思路很不错啊,利用了websocket实时技术,实现页面和服务程序的互动,其实负载问题,可以在服务器端分布式解决的,况且百分之90的程序不需要考虑负载问题的。这个东西挺有意思的,符合程序快速开发的思路。就像几十年前delphi刚刚诞生差不多,那时候也没人去研究vcl组件功能都是怎么实现的,现在只是图形vcl,变成了各种web控件。隐藏vcl跟操作系统的实时互动,变成web控件隐藏实时通讯过程了。这个东西挺有意思,跟intraweb unigui不一样,感觉更进了一步,不过发展需要很大工作量。没有投资可能没法持续。继续关注一下。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/6/25 15:35:16
25楼: 又发现一个:WebUI4Delphi

https://github.com/salvadordf/WebUI4Delphi

有人用过吗?暂时我还没空去测试。
----------------------------------------------
-
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2024/7/9 14:16:27
26楼: 既然不再开发了,就该开源。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2024/7/9 14:34:40
27楼: (不是有逆向好的源码?.
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 ritapl (ritapl) ★☆☆☆☆ -
盒子活跃会员
2024/7/10 9:20:45
28楼: 看好tms web core,真正的前后端分离
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行39.91699毫秒 RSS