解决方案 »

  1.   

    TRichEdit是一个比较好的控件,它支持Rich文本格式,支持类似WORD部分功能。
    但我在D7中运用,它的汉字支持和英文字符混合运用,常出现错误。
    希望在XE7中,能够较好的表现。
      

  2.   

    富文本编辑器,目前有WPTools和RichView是安全从底层自己实现的
      

  3.   

    > 不需要复杂算法吧。
    > 这玩意要什么算法,需要的就是慢功夫,慢慢磨. 也许我用“算法”这个词没有正确的表达我的意思。总之就是我实际在实现这个控件时,觉得有点无法完全掌控,
    希望有些技巧(模式?数据结构?其他特殊方法、经验?),最终能够解决这些无法完全掌控的问题。起初也不觉得太难,实际设计后,光下面这个问题就让我不知如何是好:假设场景:在一个长达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代码。
      

  4.   

    memo还好办一些:只有文本,而且字体大小统一、每行等高
    richedit,多字体,有图文,其实比较复杂了
    如果能文字自动环绕图片,那就是word了
    如果图片支持不规则形状,文字的自动环绕 就更复杂了(word2007都没实现吧?)