DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: haibei
今日帖子: 7
在线用户: 8
导航: 论坛 -> 开源项目 斑竹:joki,ralf_jones  
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/1/12 19:00:26
标题:
打算开源一个聊天软件 浏览:5581
加入我的收藏
楼主: 05年用 DELPHI 做的一个聊天软件。后来再也没维护,没时间搞它。
最近有一些新的想法,想功能上做一点更新,也想移植到手机上。之前的 DELPHI 代码,用了很多第三方控件,在新版的 DELPHI 上面,多半连编译也是通不过的,更不用说需要移植到 FireMonkey 上。而且有些功能,使用了 Windows 系统的功能,比如视频聊天用到 DirectShow。

另外,很多年没搞它,我自己都忘记了一些细节。所以我打算什么功能都不改,而且要简化掉一些功能,先用新版的 Delphi FireMonkey 重写一遍,新写的能够运行了,再来改,可能连通讯协议都要改。

因此,我把它安装起来,先自己用用,然后呢,让新写的可以和之前的老版本兼容,这样的代码重构,才可以一点一点地改出来,避免一下搞很多修改还不知道能不能正常工作。

因此,我重新发布了服务器端。然后,客户端发在这里,有兴趣的可以下载客户端,然后安装后试用。10多年前的代码,界面比较土,大家容忍一下。

待我用新版的 FireMonkey 重构完代码后,就开源出来。

所以呢,这里就是提供给大家试用,有兴趣的,请回帖给我重构然后开源的动力。

本贴附件,是客户端。安装以后,在选项菜单里面,把服务器设置为:154.222.1.190  就可以注册,登录,添加好友等等。

--- 功能介绍 ---
1. 通讯架构:基于 UDP 的 P2P 通讯。有 NAT 打洞的功能;
1.1. 在 UDP 基础上模拟 TCP 算法保证 UDP 的丢包重传,模拟了 TCP 的连接。
1.3. 在上述基础上,搞了一个基于 UDP 的 WebService 的函数调用框架,修改自 Delphi 本身的 WebService 框架。

2. 富文本的打字聊天。自己写的基于 IE 的富文本编辑器。可以图文混排,随意修改文字的字体大小颜色等等,可以随意插入图片。
2.1. 文字的传输是加密的。本身P2P的通讯也是端到端的,不从服务器过。加密用的 Key 是每次聊天建立时双方协商的,因此 KEY 是什么,没法预测。
2.2. 加密采用的是 LockBox 那套控件。

3. 音频聊天;

4. 多方视频会议。

5. 电子白板。一个聊天会议窗口里面的多个白板。参与者都可以在上面贴图画图。

6. 文件传输,自动断点续传。
6.1. 文件夹共享给对方,让对方自己选择下载什么文件,类似把自己当作 FTP SERVER,对方当作 FTP CLIENT 的玩法。当然这里仍然是基于 UDP 的。

7. 还有一些乱七八糟花了不少时间的功能,似乎也没太多使用价值。

---- 新版的第一阶段修改的想法 ---------
1. 首先,去掉这个富文本编辑。只是单纯的文字。因为之前那个是基于IE的,在手机端是不可能正常工作的。

2. 语音对讲也暂时去掉。因为之前的语音是基于 WINDOWS 的 API 的。

3. 视频也要去掉,因为之前的视频是基于 DirectShow 的。

在暂时把基本通讯框架搭起来后,能够文字聊天的情况下,再逐渐增加一些功能,如果开源,希望大家一起帮忙。每天要上班挣饭钱,没太多时间研究新技术了。这次考虑开源,也是因为 Delphi 有社区版,大家可以玩玩正版。为了将来的兼容性,因此新版不用闭源的第三方控件。

最后,试用的同学,有兴趣的可以在这个软件里面添加好友 pcplayer,通过这个软件可以和我交流。
此帖子包含附件:pcplayer_20201121903.zip 大小:7.86M
----------------------------------------------
-
作者:
男 akay (akay) ★☆☆☆☆ -
普通会员
2020/1/12 19:56:33
1楼: 支持,支持!
----------------------------------------------
-
作者:
男 arhaha (lin) ★☆☆☆☆ -
盒子活跃会员
2020/1/12 22:14:18
2楼: 支持!!
----------------------------------------------
-
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2020/1/12 23:44:44
3楼: 建议开一个群收集意见,这样互动性也更强一些。
而且做FMX是否有必要?毕竟是一件没有收益的事情。
把手里的VCL完善就行,就当是给小白们的礼物,应该还是可以学到很多东西的。
或者也可以这样,FMX继续开发,但FMX版收钱!
----------------------------------------------
只有偏执狂才能生存!
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/1/12 23:53:04
4楼: 楼上的,VCL 的,要做的工作主要是把 D7 的代码,升级到最新版 DELPHI。
另外就是一些第三方控件要去掉,否则依赖第三方闭源的控件就不好玩了。

但 VCL 的,不支持手机。现在这个时代,支持手机也很重要。所以想搞 FMX 的。

可以考虑 PC 版功能更多,手机版简化一些。总体来说,要一套代码兼容。因此还是需要用 FMX。

至于说收益,开源了,就不考虑收益了。当作是为 Delphi 世界做点贡献。
----------------------------------------------
-
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2020/1/13 0:39:32
5楼: 那就期待你的大作了,我提前预定捐款200元,一点小意思哈~
----------------------------------------------
只有偏执狂才能生存!
作者:
男 hbug (hbug) ★☆☆☆☆ -
普通会员
2020/1/13 8:01:52
6楼: 期待中。。。。
----------------------------------------------
专业提供人力资源软件、指纹考勤软件、POS进销存软件、酒店餐饮软件
http://www.winsoftcn.com
作者:
男 blueflag (昆了) ★☆☆☆☆ -
盒子活跃会员
2020/1/13 8:50:02
7楼: 强烈支持---
----------------------------------------------
-
作者:
男 looper (keyo) ★☆☆☆☆ -
盒子活跃会员
2020/1/13 9:07:36
8楼: 支持支持!
----------------------------------------------
虽千万人吾往矣!
作者:
男 kenliaoliao (ben) ★☆☆☆☆ -
普通会员
2020/1/13 9:25:30
9楼: 强烈支持
----------------------------------------------
-
作者:
男 mricy (Icy) ▲▲▲▲△ -
普通会员
2020/1/13 10:05:27
10楼: 能不能让大家凑点热闹 参与一下哈
----------------------------------------------
哦哟喂,看过来: http://zelig.cn
作者:
男 joesyuan (joes) ★☆☆☆☆ -
盒子活跃会员
2020/1/13 10:15:56
11楼: 开个群吧。
----------------------------------------------
-我爱Delphi6
作者:
男 dolang (dolang) ★☆☆☆☆ -
普通会员
2020/1/13 10:28:29
12楼: 强烈支持,期待。。。。。。
----------------------------------------------
-
作者:
男 hardnut (麦轲数据管家) ★☆☆☆☆ -
普通会员
2020/1/13 10:52:18
13楼: 支持,我愿参与
----------------------------------------------
UniKeeper V10.36 -- 您最贴心的个人数据管理助手
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/1/13 11:08:52
14楼: 11 楼,开群就算了。我平常不开QQ,要开 QQ 还要开虚拟机。如果有兴趣,下载我那个客户端装上,改一下服务器设置,添加好友 pcplayer 就可以联系了。
----------------------------------------------
-
作者:
男 lzhg_kn (lzhg_kn) ★☆☆☆☆ -
盒子活跃会员
2020/1/13 13:50:33
15楼: 强烈支持,期待
----------------------------------------------
-
作者:
男 learndelphi (beside) ★☆☆☆☆ -
盒子活跃会员
2020/1/13 14:31:03
16楼: 强烈支持,期待
----------------------------------------------
-
作者:
男 hans (hans) ★☆☆☆☆ -
普通会员
2020/1/13 17:43:42
17楼:

嗯,这个支持
----------------------------------------------
Hans
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
2020/1/13 18:29:36
18楼: 服务器连接不了
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 majx (skin) ★☆☆☆☆ -
普通会员
2020/1/13 19:31:48
19楼: 感谢!!!希望有更多的DELPHI软件能开源,大力促进DELPHI生态的发展!!!在盒子上专门建立一个开源版块,供大家互相学习。
----------------------------------------------
majx,QQ 613354940
作者:
男 majx (skin) ★☆☆☆☆ -
普通会员
2020/1/13 19:41:14
20楼: 360真是个畜生,DELPHI开发的一下载就报病毒。
----------------------------------------------
majx,QQ 613354940
作者:
男 qq81709989 (ChatGPT-4) ▲▲△△△ -
普通会员
2020/1/13 19:55:19
21楼: 以前有一款Delphi写的聊天软件客户端,源码网上应该能找到,跟QQ差不多,服务端是C#写的。
----------------------------------------------
《Python图形用户界面设计——Delphi For Python高级开发教程》、《Delphi Web 前端开发教程》:WWW.Z-SHi.NET
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/1/13 20:19:02
22楼: @letianwuji  服务器能够连接。我刚刚登录过。

向服务器注册和登录,是 Delphi 的 WebService,已知的问题,在 WIN XP 不存在,在 WIN8 存在的问题是,这个 WebService 的调用,可能是:

D7 做的 WebServices  客户端,用 HttpRIO 去访问 WebServices 服务器端的时候,会出 AV 错误。 

点"我的电脑"右键"属性""高级""性能""设置"。把"数据执行保护"关掉。然后就可以了。
----------------------------------------------
-
作者:
男 myid (林锋) ★☆☆☆☆ -
盒子活跃会员
2020/1/13 20:29:46
23楼: 支持,期待
----------------------------------------------
-
作者:
男 chinaz (有缘人) ★☆☆☆☆ -
神秘会员
2020/1/13 21:37:30
24楼: 支持
----------------------------------------------
一路风雨走过,因为有你们
作者:
男 gxabc (cgh) ★☆☆☆☆ -
普通会员
2020/1/13 22:04:56
25楼: 支持!
----------------------------------------------
-
作者:
男 iapeng (iapeng) ▲▲▲▲△ -
普通会员
2020/1/14 11:54:47
26楼: 强烈支持,世上还是有好人!
----------------------------------------------
-
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2020/1/14 12:38:28
27楼: 支持楼主,如果有需要,我可以把自己写的富文本编辑控件移植到fmx下,免费开源。
----------------------------------------------
18114532@qq.com
作者:
男 edwinyeah (Edwin) ★☆☆☆☆ -
盒子活跃会员
2020/1/14 14:21:42
28楼: 支持,建议放到github
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/1/14 17:03:17
29楼: @abcjingtong  多谢。我写的富文本编辑器是基于 WebBrowser 的,我是打算这个项目开源的同时也把它放出来。如果单纯的 Windows 软件,在 FireMonkey 里面嵌入一个 VCL 的 Form 还是可以做到的。问题是如果是手机,估计就没戏了。

不过这几天我考虑了一下,暂时第一步,还是先做 VCL 的,也就是把以前的基于 D7 的代码整理一下,去掉没开源的第三方控件,简化掉工程里面一些可有可无的功能,然后能够在最新版 DELPHI 底下编译通过,就先放出来。然后在此基础上,再考虑第二步的优化算法,优化代码,然后再考虑第三步的移植到 FireMonkey。

最近时间不多,进度肯定快不起来。看看春节假期的时间里面能不能干点活。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/1/14 17:05:40
30楼: @edwinyeah  我会放到 github 上面的。

只是以前的代码很烂,真的不好意思放出来给大家看。原本想花点时间搞得稍微好点再放,但实在是时间和精力有限。所以现在打算先整一个能跑的,先放出来。然后再优化。
----------------------------------------------
-
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2020/1/15 10:47:24
31楼: @pcplayer 对先用vcl的,先把整个业务跑起来,细节预留出完善的接口或方法就行,比如我写东西,有时候好多未来会用到的事件,先定义然后空实现,在begin和end中间写上注释或todo。整个跑起来有人使用也会对自己是个激励,会让你也有不断完善细节的动力。广度和深度在前期是不要想着全部能达到的,一条坑坑洼洼能到终点的完整线路,要好于半条笔直平坦的道路,虽然两者都有达到笔直完整的机会,但对于现代IT行业来说,谁都想要个马上能用,慢慢完善的东西。因为前者你提供了能实现整个目标的方案,后者没人会关注的。希望你能坚持。
  另外补充一点,如果打算长期投入,要做好能收服务费用的地方,编码过程要注意一些模块或功能可以单独被别人使用,比如通讯方面的,可以方便的抽取来脱离了你的项目给别人用,做订制化的需求。
----------------------------------------------
18114532@qq.com
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2020/1/15 17:53:07
32楼: 我看好去中心化应用,无论是架构去中心化还是政治去中心化,去中心化的应用会成为未来的主流,但要到未来啥时候呢,不好估计。

人类社会的交换最早就是去中心化,你家有米缺肉,我家养鸡缺米,那彼此就交换了。随着交通越来越发达,中心化程度越来越高。

互联网恰恰是相反的,最早是中心化,为什么?因为带宽不足,没那么多带宽支持点对点的数据交换。随着带宽越来越大,去中心化的应用会越来越多。

不仅仅聊天工具,连DNS这等底层协议迟早要变为去中心化或者被弃用。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/1/15 17:57:34
33楼: @hawke2e 是的。我最早开始这个项目,想的就是逐渐做一个完全去中心化的东西出来。这也是一种思考方式。

当然,中心化的东西,需要考虑的问题会少很多,代码因此简单。但人类社会的组织方式本身是去中心化的。
----------------------------------------------
-
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2020/1/15 18:00:34
33楼: 在中国搞去中心化对于个人最大障碍我认为在于环境,中国天然排斥去中心化;起码在20、30年内都不会改变,届时我们都老了。
所以,如果你20来岁,又不在中国,那搞去中心化肯定是赚的。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2020/1/15 18:31:15
34楼: pcplayer和其他志于搞去中心化应用的朋友,给个指引:
像去中心化这种社会变革,从用户角度来看,最初的产品形态都是信息的获取或者信息查询。比如:互联网最初的产品形态就是网站,手机端的就是看新闻。然后才是交互形式复杂的应用。

同理,
相同的使用场景,发生去中心化应用取代中心化应用,那么这场景最初也会发生在信息获取上,而不是聊天工具。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/1/15 19:05:27
35楼: 虽然我不知道你们为什么 讨论 去中心化。
但是 聊天工具,本来就可以 去中心化。
例如 最简单的 WIFI Ad Hoc 模式。就是 无中心的。
大家 碰面 一起聊天(大家在一起,居然不说话,用机器打字或画图聊天,你们知道谁开发的软件这样干了吗?)

另外就是 p2p 聊天。KAD 网络就可以这样。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
2020/1/15 19:30:24
36楼: 楼上的,一看就是没玩过qtox...那才是真正去中心化。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/1/16 9:19:43
37楼: kad 基础上家个密就高级了?还真正?我说的也是真正的。
我没玩过的多了去了。
你没玩过的也多了去了。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 looper (keyo) ★☆☆☆☆ -
盒子活跃会员
2020/1/16 10:05:41
38楼: 懵逼了,怎么突然就说到去中心化,这楼歪的厉害啊!
----------------------------------------------
虽千万人吾往矣!
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/1/16 12:07:10
39楼: 就聊天来说,国内用户最多的是QQ和微信吧?这两个玩意,至少有一条:需要登录到一个中心服务器。

另外,QQ我不知道,微信的话,应该是聊天信息通过服务器转发给对方的。

要做到最简单的2点:
1. 没有一个中心服务器用来做用户登录,做用户身份认证;
2. 聊天信息不需要通过中心服务器转发;

要做到这两点,就会有很多麻烦事,而且可能还不稳定可靠,要做到稳定可靠,麻烦事更多。所以,如果是做一个聊天的产品,有服务器,简单很多。这个也就是最近这些年,云计算很流行的原因。

如果彻底没有中心服务器来支撑,俺名之为:雾计算。

这个想法俺很多年前就有了,能力有限,做不出来。那时候也没有类似的软件出现。

现在有了,比如 ZeroNet,比如....反正已经出来好多了。
另外,比特币也是一个彻底去中心化的应用。

只是,这些应用,我没看到过是 Delphi 代码写的。
----------------------------------------------
-
作者:
男 jacky163 (jacky) ▲▲▲▲△ -
普通会员
2020/1/17 22:19:33
40楼: 支持,支持!
----------------------------------------------
-
作者:
男 isxuzhu (e.Wong) ★☆☆☆☆ -
盒子活跃会员
2020/1/18 17:23:24
41楼: 支持!!支持!!
----------------------------------------------
你我,都可以是个造梦者!欢迎加入脚本引擎PaxCompiler交流群303904495http://www.cnblogs.com/fireboxsoft有需要错别字检测软件的朋友可以在我博客上的地址下载使用,备注“2ccc”的朋友可以免费获取超级黄金VVVVVVVVVVIP授权
作者:
男 fausten (fausten) ★☆☆☆☆ -
盒子活跃会员
2020/1/26 17:15:07
42楼: 期待!!!
----------------------------------------------
-
作者:
男 hs_kill (lzl_17948876) ★☆☆☆☆ -
普通会员
2020/1/26 21:52:00
43楼: 支持支持......

不过我建议能不能吧核心功能分离出来, 其他功能已插件形式提供, 哪怕代码级别的插件也好啊, 这样可以根据需求增减或替换功能
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 ywqq (ywq) ★☆☆☆☆ -
盒子活跃会员
2020/1/27 0:10:14
44楼: 支持支持!
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/1/28 17:37:55
45楼: @hs_kill (lzl_17948876)   43 楼,目前我在重构,也就是架构上做成比较容易拆卸的模式。但最终会开源。有源代码你随便整。

这几天碰到一个怪事,我把以前做的那个 WebBrowser 的编辑器拿出来重新编译测试,发现有问题。我已经排除了运行环境问题,也排除了其它一些问题,比如我单独拖一个 TWebBrowser 出来写一个例子程序,那个问题不存在。偏偏在我写的控件里面它就存在。很奇怪。继续找原因。
----------------------------------------------
-
作者:
男 fausten (fausten) ★☆☆☆☆ -
盒子活跃会员
2020/2/2 10:55:54
46楼: 支持!!!!!
----------------------------------------------
-
作者:
男 wjhyp (wjhyp) ▲▲△△△ -
普通会员
2020/2/5 14:24:32
47楼: 果断支持,期待。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/2/13 4:02:04
48楼: 为了这个代码重构,最近几天学习了一些 Delphi 的新技术。主要是 MVVM 模式的概念和在 Delphi 上的实现。也学习了一下用 LiveBindings 来实现 MVVM 模式。

顺便把学习结果写在了我的 cndev 的博客里面。
----------------------------------------------
-
作者:
男 denkun (dk) ★☆☆☆☆ -
普通会员
2020/2/13 9:56:22
49楼: 支持支持!
----------------------------------------------
-
作者:
男 crazydingo (crazydingo) ★☆☆☆☆ -
普通会员
2020/2/13 16:35:35
50楼: 支持开源。
----------------------------------------------
人的泪代表执着。\r\n鬼的泪代表爱和重生
作者:
男 wjhyp (wjhyp) ▲▲△△△ -
普通会员
2020/3/21 16:42:16
51楼: 每过段时间回来再看看,进度如何了。
----------------------------------------------
-
作者:
男 dalas (dalas) ★☆☆☆☆ -
普通会员
2020/3/21 20:02:09
52楼: 两个月了,有什么进展?
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/3/26 0:10:52
53楼: 两个月了,整理代码啊。把这里提到的基于 TWebBrowser 的富文本编辑器整理出来,放到 github 上了。

整理代码的过程中发现以前的代码因为赶时间,架构不好。然后研究了一下 MVVM 模式,研究了一下如何用 LiveBindings 去实现 MVVM 并且要做到 VCL 和 FMX 兼容。写了一些实验性的代码。然后写了两篇博客,并且把例子代码发 github 上了。

因为之前实现的就是基于 UDP 的 P2P 的东西。以前我写这样的东西,网上没有任何资源。我自己写得虽然稳定,但代码烂。上网一搜,这些年出来好多类似的东西。想看看别人写的是否可以拿来用或者借鉴,下了一些代码研究测试了一下。但类似的东西,大多是C的,DELPHI 的比较少。github 上有一个把 C 代码改为 Delphi 的,我在  Delphi 底下测试了一下,能工作,但不稳定。

顺便读了几篇老外写的 NAT 穿越的文档,测试了一下 TCP 打洞穿越 NAT,结论是,支持的路由器太少,不值得去花时间做。测试代码我也发到 github 上了。
----------------------------------------------
-
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2020/3/26 4:40:28
54楼: 楼主是个好人,却总舍不得贴博客网站、代码网站,所以不得不搜了一下,借花献佛给大家:

基于 WebBrowser 的富文本编辑器
https://blog.csdn.net/pcplayer/article/details/105085253

基于 LiveBindings 的 MVVM 模式的例子代码
https://blog.csdn.net/pcplayer/article/details/104303639
----------------------------------------------
只有偏执狂才能生存!
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2020/3/26 4:47:26
55楼: >>希望以后可以基于 Javascript 和 CSS 做一套任何浏览器都可以兼容的富文本编辑器,而且是 Delphi 可以调用的。这样就可以在 FireMonkey 框架里面实现一个富文本编辑器了。
如果有谁知道有这样的编辑器,请通知我。

https://www.delphihtmlcomponents.com/demo.html
----------------------------------------------
只有偏执狂才能生存!
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/3/26 9:58:54
56楼: 楼上多谢。人家这个功能强大,是商业化的软件,要钱的。我的目标是能完成简单的富文本编辑就行,但最好是开源的。穷人木有钱。我自己写出来的,也开源。反正也没靠 Delphi 挣到钱。但因为是开源,肯定不够完整、严密,质量也多半不行。那是需要很多时间打磨的。
----------------------------------------------
-
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2020/3/26 11:31:19
57楼: 第一步,先成功了再说,要无耻一点。英雄不问出身。

备注:这个控件可以在各大群里找到,而且是3.9源码版
----------------------------------------------
只有偏执狂才能生存!
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2020/3/26 11:33:19
58楼: 除此以外,TMS 也有FMX RICHEDIT。
还有一个开源作品:http://bbs.2ccc.com/topic.asp?topicid=553493
http://bbs.2ccc.com/topic.asp?topicid=544283
----------------------------------------------
只有偏执狂才能生存!
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2020/3/26 12:17:51
59楼: https://gitee.com/HCView/HCView-Pascal
我开源的,里面有一个HCEdit,看看是否符合你的要求,开源免费的。
----------------------------------------------
18114532@qq.com
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/3/26 17:17:23
60楼: 多谢59楼。我下载来学习一下。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/3/26 17:31:50
61楼: 下载了 59 楼的开源代码,太厉害了。教科书级的代码。
----------------------------------------------
-
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2020/3/26 18:16:32
62楼: 功能不敢说多么强大,代码工整度和规范上还是有自信的。
----------------------------------------------
18114532@qq.com
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2020/3/28 10:06:43
63楼: 冲“教科书级”略略看了HCView-Pascal的代码,代码编写规范教科书级我没意见,but。。。呵呵,真赞不出口。
@abcjingtong:
看了你的代码就知道前面我说的话你看不懂。并没有踩你的意思,我也是这么走过来的,你说你很喜欢写代码,我简单说几句,你愿意进一步提高就研究我说的话,否则,赚钱更重要。

----------
像HCView这种技术比较密集的组件,需要有核心(或者说架构)的意识。而核心不是基础功能和主要数据结构,我看你的代码你是这么认为的。核心跟功能的关系是里与表的关系,好比:武术家有单手开砖的功能,而这功能要靠神经系统、发达的肌肉、强健的骨骼等内在机制互相配合来实现。
就拿THCLineItem,你的思路就是line是文档里的元素,所以把绘画过程封装在THCLineItem。(我没细看说的细节可能不准确)

然而,文档里的元素不属于核心!!
就绘画过程,元素何时绘画、如何保证相邻元素不会重叠在一起、绘画得够不够迅速、如何通过避免重复的绘画来提高性能、如何zoom in zoom out等等,这些问题才属于核心,而这些问题不是在THCLineItem.DoPaint一个函数就能解决,需要写一大堆单元才行。


寻找哪些问题才属于核心问题,往往可以通过极端的场景或者特性找出来,我简单列举几个场景,因为没研究过,细节可能不对,意思明白即可:
1. 假设文档有几千万页,几G,用户打开文档后立即拉到最后一页,组件如何迅速把最后一页展现出来。
2. 假设文档有几千万页,每页里,相邻的两个元素样式都不同,要么字体不一样要么非文字,用户迅速地按PgDn,如何避免界面卡顿或者闪烁。
3. 假设文档有几千万页,文档要支持通过正则表达式找文字,如何提高性能。
4. 两段文字,如果前一段文字在增删改后不出现行数改变,一般不影响后一段文字,但不绝对,如果某个字特大或者插入图片,那会影响后一段文字的排版。

等等。
当然这些问题都可以在你现有的结构上改和完善,只是会越改越乱越来越难改而已。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2020/3/28 10:55:40
64楼: 还有,像这种技术密集型的组件,技术上如果追求极致,其核心必定具有以下2个特征:
1. 核心跟领域相对独立。也就是说,核心从组件剥离出来后,稍作修改甚至不用改就能运用在其它领域里。就拿HCView来说,其核心不会关心是画一段文字、直线、波浪线还是几何图形,它关心的是它给出的RECT是否足够绘画,需要多大的RECT绘画,如何控制不要画出RECT的边界,是否会画得很久从而影响整体的绘画,如果要画得很久那只能空闲时再给时间画等等,这些才是核心要关心的问题。

2. 如果核心由若干核心模块紧密合作构成,那么往往每个核心模块剥离出来,稍作修改再加上“外壳”,就能独立成一组件。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2020/3/28 12:55:35
65楼: 感谢您的指点,我想仅从技术方面回复一下,THCLineItem.DoPaint(每一类Item)只封装了Line自己的绘制过程,不包括别的东西的绘制,它外面是Data层,Data外面是Section,Section外面是View。是一层层的处理的。我为了保证Item的各自灵活多样,所以每一类Item要画成什么样子是由这类Item自己决定的,Data层会根据它的大小告诉它你在这个Rect里绘制,至于绘制成什么样Data层不会管,包括鼠标键盘事件也是这样,从外往里传递,从里往外响应。

另外,关于如何得到最小的更新区域,我承认目前还不是很精确,导致不精确的原因主要是有一些功能并不是只在固定的区域,比如处理表格时,要在表格的左上角显示快速操作的工具栏,那这个更新区域就不是表格的区域了,批注内的文本修改时可能同时也要更新它对应的批注说明,目前我还没有弄到这一层面的精确计算区域,我曾经尝试过精确处理但最后放弃,原因有2,一是成本太高,二是我在10年前的xp机器性能上测试发现精确和不精确没有差别。但我在设计时是留有局部更新的,比如像gif动画这样的,每播放一帧并不是整个界面都更新的。

关于绘图效率,我没有试过上千页上万页的文档,最多测试过200多页,在这个量级上和word,wps没有什么差别,我看您比较注重这方面,如果您发现了在某种情况下绘图效率不高的话,可以具体说下,我试试能不能优化下。

关于排版的原理,我很早之前录制过一个视频有说了一下,
HC排版原理介绍视频
链接:https://pan.baidu.com/s/1hx32otmVl768_SP8Y6p2iQ 密码:y6nr

HCView和外部交互介绍
链接:https://pan.baidu.com/s/1yYyGDnFQGMGWzowKXOLzLQ 密码:iklh

另外,在这个帖子里讨论HCView有点不太合适,如果您愿意,欢迎加群649023932或加我QQ更方便的给我提意见,再次感谢您的交流。
----------------------------------------------
18114532@qq.com
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2020/3/28 17:04:27
66楼: 63 楼提的意见比较硬核,也确实非常有道理。东西做大了,架构非常重要。做着玩的小东西,那就是想到哪做到哪。

65 楼的解释也有信息含量。

我觉得这样的讨论和碰撞,我作为旁观者可以学到很多。你们可以继续。
----------------------------------------------
-
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2020/3/28 18:49:29
67楼: 我当然知道THCLineItem.DoPaint是指直线这类文档元素的绘画过程。
看THCLineItem.DoPaint的参数:
(const AStyle: THCStyle; const ADrawRect: TRect;
  const ADataDrawTop, ADataDrawBottom, ADataScreenTop, ADataScreenBottom: Integer; const ACanvas: TCanvas; const APaintInfo: TPaintInfo);
把[ADataDrawTop, ADataDrawBottom, ADataScreenTop, ADataScreenBottom]范围的Data画到ADrawRect范围的画布ACanvas上,用风格AStyle来画,APaintInfo好像是用来处理缩放的。
没这么简单吧:
THCLineItem不需要关心何时何处进行实际绘画,它只需要关心什么内容画成什么样子就够了。所以,是不是应该传进去是虚拟画布? 这样的好处:
1. 核心无需担心THCLineItem超范围绘画
2. 可以缓存这样得到的虚拟画布,在相同条件的绘画上重用,这样能提高效率
3. THCLineItem左右不了整个页面的绘画,因为核心可以多线程调用。而且多线程能加快绘画速度。
4. 得到的虚拟画布再由核心处理缩放,也就无需APaintInfo

当然这是很粗鄙的看法,毕竟我没研究过这领域,我也不感兴趣。
----------

前面我说的意思是指出你对架构的认识还是比较初级,跟我当年一样。你很简单的认为,从用户角度看,HCView有概念:文字段 line 几何图形 Section Table等,那么你每一样设计一个类,那么HCView的活动就写成这些类之间的交流了,对吧?!
呵呵,看到HCView文档里各个单元的单元名都是静态的名词我就皱眉头了,说明你把核心的处理都分散写到各个类里,我希望看到体现控制、动态的名字起的单元名,这样说明你已经有控制整个HCView运作的意识。
设计能体现设计者对事情的控制力,落到代码层面就是一个个起控制软件运作作用的单元。


需不需支持几千万页的文档要看HCView的卖点,以前说了卖点要么讨好用户要么讨好开发人员。现在没办法,你已经写成这样,你可以根据现有结构的能力来寻找一些卖点。
大概就这样。
如果你想技术上更上一层楼,你回答得太快了,你需要反复看我说的话。还是那句话,赚钱最重要,技术这些有机会再提高吧。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2020/3/28 19:18:00
68楼: 再次谢谢!
----------------------------------------------
18114532@qq.com
作者:
男 chenming13500 (风一样的男子) ▲▲▲▲△ -
普通会员
2021/11/26 22:26:58
69楼: 支持一下,
----------------------------------------------
-
作者:
男 12288144 (12288144) ★☆☆☆☆ -
普通会员
2021/11/27 10:21:22
70楼: 再次谢谢!
----------------------------------------------
-
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2021/11/27 14:24:45
71楼: 楼主是个好人.顶
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 jacky163 (jacky) ▲▲▲▲△ -
普通会员
2021/11/27 23:21:10
72楼: 支持!!
----------------------------------------------
-
作者:
男 tuhemm (刀锋土禾) ▲△△△△ -
禁用账号
2022/5/12 22:46:06
73楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
SPAM
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行78.125毫秒 RSS