有没有人在什么地方看过关于如何“自己写一个”TMemo或TRichEdit的算法的说明或文章?

Frank6600 2015-01-24 05:43:07
有没有人在什么地方看过关于如何“自己写一个”TMemo或TRichEdit的算法的说明或文章?
我自己看过最接近的只有设计模式的组合模式和迭代子模式。
这几年来一直想自己写一个,反复写了两个,效果不好,代码凌乱不好维护。
谁见过类似这样的东西,麻烦转贴一下,谢谢。
...全文
316 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Frank6600 2015-01-28
  • 打赏
  • 举报
回复
> 不需要复杂算法吧。 > 这玩意要什么算法,需要的就是慢功夫,慢慢磨. 也许我用“算法”这个词没有正确的表达我的意思。 总之就是我实际在实现这个控件时,觉得有点无法完全掌控, 希望有些技巧(模式?数据结构?其他特殊方法、经验?),最终能够解决这些无法完全掌控的问题。 起初也不觉得太难,实际设计后,光下面这个问题就让我不知如何是好: 假设场景:在一个长达8页(暂时不考虑800页)的内容中, 1.用户在第1页第一段某处按了一下回车 回车造成第1页第1段分成2段,于是原本第2段以后位置,全部向下挤。 (这部份不论我怎么调整修改,始终有闪烁或画面刷新不乾净现象。 即便我已用了BeginUpdate, EndUpdate的技巧,使用户一个动作只会发生1次“从必须处开始刷新”, 还是稍微有闪烁;或者是类似闪烁,总之就是刷新得不乾净利落导致眼睛看起来画面脏脏的感觉) (大家都知道,一段里有n行,总共有m字,假设n大约10,m大约400;当原本第2段开始往下移, 最笨的方法就是从那一段开始,每一行每个字都重新刷新一次; 这种方式我实现过一次, 可能因为每一次字都要从相对位置计算相对于控件的绝对位置,显示时既慢又不舒服; 后来的做法是,段落内容每一次用bitmap记住, 段落移动时,重新在绝对位置paint bitmap一次, 这么做后感觉好了很多,但仍不太好, 而且缺点是,用户在用鼠标选择n个字导致那n个字必须显示被选择的底色时,bitmap的存在会导致其不会立即刷新, 因此bitmap的使用得区分时机点) 2.用户在第1行第1段某处连续快速地输入n个字,此时该段文字要像祖玛游戏那样,快速地向后向下流动, 当然,因此新增一行,又会发生像第1个问题一样的“后续段落位置下挤刷新”的问题; (看著祖玛,就会想它怎么实现的?想到的一个方法是用TGraphpicControl来画每个球 TGraphicControl又是怎么确保它移动一次位置,整个Canvas只刷新一次呢? 我因为不确定使用TGraphicControl是否能在鼠标选择n个字时正确地将鼠标动作传送给底层Control, 因此一直没使用TGraphicControl实现) 3.Replace时,如何快速取代内容且刷新乾净呢? 总之,就是这些看似简单、但我一直没有乾净利落地处理(当然同时还要保证代码也要乾净利落好维护)的琐碎问题, 不再详述。 网上查过Chrome核心的Layout概念,但它没有用户编辑内容的功能,似乎无法借鉴。 不知道有没有高手们怎么处理这方面问题的经验讨论或说明呢? 光Composite模式和迭代子模式不够啊。 谢谢suiyunonghen,有空会看一下WPTools和RichView代码。
haitao 2015-01-28
  • 打赏
  • 举报
回复
memo还好办一些:只有文本,而且字体大小统一、每行等高 richedit,多字体,有图文,其实比较复杂了 如果能文字自动环绕图片,那就是word了 如果图片支持不规则形状,文字的自动环绕 就更复杂了(word2007都没实现吧?)
lhy 2015-01-28
  • 打赏
  • 举报
回复
引用 6 楼 frank_lee_cn 的回复:
> 不需要复杂算法吧。 > 这玩意要什么算法,需要的就是慢功夫,慢慢磨. 也许我用“算法”这个词没有正确的表达我的意思。 总之就是我实际在实现这个控件时,觉得有点无法完全掌控, 希望有些技巧(模式?数据结构?其他特殊方法、经验?),最终能够解决这些无法完全掌控的问题。 起初也不觉得太难,实际设计后,光下面这个问题就让我不知如何是好: 假设场景:在一个长达8页(暂时不考虑800页)的内容中, 1.用户在第1页第一段某处按了一下回车 回车造成第1页第1段分成2段,于是原本第2段以后位置,全部向下挤。 (这部份不论我怎么调整修改,始终有闪烁或画面刷新不乾净现象。 即便我已用了BeginUpdate, EndUpdate的技巧,使用户一个动作只会发生1次“从必须处开始刷新”, 还是稍微有闪烁;或者是类似闪烁,总之就是刷新得不乾净利落导致眼睛看起来画面脏脏的感觉) (大家都知道,一段里有n行,总共有m字,假设n大约10,m大约400;当原本第2段开始往下移, 最笨的方法就是从那一段开始,每一行每个字都重新刷新一次; 这种方式我实现过一次, 可能因为每一次字都要从相对位置计算相对于控件的绝对位置,显示时既慢又不舒服; 后来的做法是,段落内容每一次用bitmap记住, 段落移动时,重新在绝对位置paint bitmap一次, 这么做后感觉好了很多,但仍不太好, 而且缺点是,用户在用鼠标选择n个字导致那n个字必须显示被选择的底色时,bitmap的存在会导致其不会立即刷新, 因此bitmap的使用得区分时机点) 2.用户在第1行第1段某处连续快速地输入n个字,此时该段文字要像祖玛游戏那样,快速地向后向下流动, 当然,因此新增一行,又会发生像第1个问题一样的“后续段落位置下挤刷新”的问题; (看著祖玛,就会想它怎么实现的?想到的一个方法是用TGraphpicControl来画每个球 TGraphicControl又是怎么确保它移动一次位置,整个Canvas只刷新一次呢? 我因为不确定使用TGraphicControl是否能在鼠标选择n个字时正确地将鼠标动作传送给底层Control, 因此一直没使用TGraphicControl实现) 3.Replace时,如何快速取代内容且刷新乾净呢? 总之,就是这些看似简单、但我一直没有乾净利落地处理(当然同时还要保证代码也要乾净利落好维护)的琐碎问题, 不再详述。 网上查过Chrome核心的Layout概念,但它没有用户编辑内容的功能,似乎无法借鉴。 不知道有没有高手们怎么处理这方面问题的经验讨论或说明呢? 光Composite模式和迭代子模式不够啊。 谢谢suiyunonghen,有空会看一下WPTools和RichView代码。
刷新可以等50毫秒或100毫秒一次。如果规定时间内被更改就刷新,不更改就不刷新。
武稀松 2015-01-27
  • 打赏
  • 举报
回复
这玩意要什么算法,需要的就是慢功夫,慢慢磨.
不得闲 2015-01-27
  • 打赏
  • 举报
回复
富文本编辑器,目前有WPTools和RichView是安全从底层自己实现的
lhy 2015-01-26
  • 打赏
  • 举报
回复
不需要复杂算法吧。
lyhoo163 2015-01-24
  • 打赏
  • 举报
回复
TRichEdit是一个比较好的控件,它支持Rich文本格式,支持类似WORD部分功能。 但我在D7中运用,它的汉字支持和英文字符混合运用,常出现错误。 希望在XE7中,能够较好的表现。
附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[坡道(ramp)] · 训练集:275 张 · 验证集:27 张 · 测试集:0 张 · 总计:302 张 该数据集聚焦于城市环境中各类建筑入口处的坡道设施,涵盖住宅、商铺、公共设施等多种场景,真实反映了无障碍通行设施在实际应用中的多样化形态。数据集中包含金属、橡胶、塑料等多种材质的坡道,以及不同尺寸、结构和安装方式的实例,充分体现了坡道在城市基础设施中的广泛部署与重要性。该数据集为城市智慧化管理、无障碍环境建设及公共安全监控提供了高质量的视觉基础支持。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 33 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.6372** mAP50-95 | 0.3401 Precision | 0.6603 Recall | 0.6190 train/box_loss | 1.0569 train/cls_loss | 0.7307 val/box_loss | 1.6084 val/cls_loss | 1.9323 【训练过程分析】 33 轮训练后 mAP50 仅 0.6372,模型收敛不充分。Loss 曲线前期下降后进入平台期,mAP 提升缓慢。mAP50-95 为 0.3401,定位精度同样偏低。 【模型性能评估】 Precision 0.6603、Recall 0.6190,精度高于召回,存在一... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

5,944

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧