解决方案 »
- 怎样管理单机版和网络版最合理
- 有人对delphi和flash采用ExternalInterface交互熟悉么?
- 想问问加速ide的用啥好,
- 高分请教进销存系统的应付款,应收款模块
- 只会c/s,想快速入门学一下三层,看什么书,各位给推荐一下
- 将DBGrid中个别列的数据(当然也可以是数据库中的数据)导入到excel中,excel中每五条记录做一页,如何实现呢?
- 哀求《参透Delphi/Kylix》附书光盘
- 求购DRP分销管理系统Delphi+SQLSERVER源码.....
- 来者有分!不够另开帖!中国软件市场似乎在走下坡路,不知什么类型或行业的软件好销?
- 关于rapi.dll的问题
- delphi XE7 demo FireDAC_SQLite 报错
- 一个函数里类型转换的问题
但我在D7中运用,它的汉字支持和英文字符混合运用,常出现错误。
希望在XE7中,能够较好的表现。
> 这玩意要什么算法,需要的就是慢功夫,慢慢磨. 也许我用“算法”这个词没有正确的表达我的意思。总之就是我实际在实现这个控件时,觉得有点无法完全掌控,
希望有些技巧(模式?数据结构?其他特殊方法、经验?),最终能够解决这些无法完全掌控的问题。起初也不觉得太难,实际设计后,光下面这个问题就让我不知如何是好:假设场景:在一个长达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代码。
richedit,多字体,有图文,其实比较复杂了
如果能文字自动环绕图片,那就是word了
如果图片支持不规则形状,文字的自动环绕 就更复杂了(word2007都没实现吧?)