就像这种功能要求就是同时平行显示两行文本 一行中文 一行英文  上下位置对应 可以自动换行 换行不会截断中英文单词鼠标可以划选编辑框内的文本 
鼠标悬浮在文本上可以弹出下拉菜单鼠标点击单词可以激发事件 将所点击单词拷贝出来
这种编辑框怎么做呢?
感觉delphi的Memo的派生不能实现这个功能
用canvas画文本 是死的 是个图片无法编辑 用透明的edit做 又没法划选 因为划选的时候是多个单词一起划选的 而且一个单词一个透明edit的话 会导致数千个控件堆积在程序里  会卡住查了下vcl的customedit类 发现没有具体的实现过程 只是从windows那里拿来一个style就成为
可编辑文字的控件了 没有具体怎么让文字可以选择 怎么让文字可以删除的过程

解决方案 »

  1.   

    不能指望有现成的,很多文本编辑控件都是从 CustomControl 继承的呢。
      

  2.   

    关键是没思路 能用文字表述一下么?比如发什么消息 怎么个数据结构之类的话说我现在也不知道怎么让canvas输出的文字 是可选择 复制 删除 插入的“活”文字  而不是图片
      

  3.   

    两个richedit 应该不行吧  平行显示两行的意思是
    a1a2
    b1b2
    a3a4
    b3b4
    a5a6
    b5b6
    ......这样交叉的 直到数千行 用现成的控件去组合 先不说能不能同时选择上下两行的内容  就说资源占用也不大可能
    1000行就要1000个控件  那很快就卡住了
      

  4.   


    实现这玩意,还是老一套 数据结构 + 算法数据可以有两种方式1.
    一个节点 对应两组数据 一是英文单词 一是中文词句一系统节点组成一串句子2.
    两个 StringList  一个为英文单词列表,一个为中文字串列表, 翻译关系一一对应。
    显然 第二个方案容易实现些
    第一个 用 ObjectList 也可以不难实现算法实现输出绘制:
    因为如果不利用 RichEdit的显示能功能,要显示 自已放在 List中的内容只能 用Canvas来绘制了,问题也不会太大。工作量多些。但实现输入 如选择反白显示,光标这些还是挺麻烦.所以要利用 RichText的语法 自已加些标记  每一个词就是一个 语法段, 自定义的标记显然 要加上词对应的 List.Index 输入绘制:
    光标位置,选择相当同的 语法属性文件 (其实就是 一个词),通过获取自定义标记 就取得 Index 然后绘个Hint窗口,加两个Edit就搞得定。
      

  5.   

    不是一对一的关系 而是多对多的关系work works working worked对应n 工作
    n 职业
    n 劳动
    v 做事
    v 使工作
    v 管理
    v 操作
    v 可行
    v 抽搐
    n 工厂
    n 部件
    n 全套物品
    adj 可行的
    用richedit怎么让单词在特定位置显示呢?因为第一对词长度不等的,一般中文比英文的width长一些,所以第二对词定位的时候就要以第一对词的结尾为准, 这个时候richedit怎么定位第二对词的开始位置呢,而且是两行同时定位,这时候第一行还没结尾呢。在指定坐标 textout显然不行,因为textout是画,不可选择,不可插入,不可编辑。