0

在我的 VCL 项目中,我有一个TMemo带有以下文本(|是插入符号):

| |  
|你好世界 | |  
| |  
|测试 |  
| |  
| |    

当我按下Down按钮时,插入符号移动到这里:

| |  
|你好世界 |  
|| |  
|测试 |
| |  
| |  

我需要的是让它移到这里:

| |  
|你好世界 |  
| | |   
|测试 |  
| |  
| |
4

2 回答 2

7

我认为您会发现为此设计自己的解决方案很有启发性。TMemo响应键的默认行为Down取决于下一行有多少个字符。如果下一行的数量至少与当前行的数量一样多,则插入符号将保留在相同的列号中。

所以一个简单的解决方案可能是

  • 当您检测到OnKeyDown由键引起的事件时Down,检查下一行中的字符数,如果它小于插入符号左侧的当前行中的字符数,则在下面的行右填充空格,直到字符数相等。仅当备忘录使用定点字体时,屏幕上的外观才会完全保持列位置;使用比例字体,光标仍会左右“摆动”一点,因为空格比大多数其他字符窄。

  • 当然,您也需要对 Up 键执行此操作,是否对鼠标单击执行类似操作取决于您。

通过一些谷歌搜索,您可以轻松找到 Delphi 代码来检测TMemo.

于 2016-06-14T17:46:21.607 回答
4

Delphi 仅将TMemo内部控件包装在 Windows 本身中 - 它本身并不支持您想要的此类功能。可以将其修改为以这种方式运行,但更容易使用已经为此设计的东西。可以做到这一点的一个非常流行的控件是SynEdit,它适用于代码编辑器和语法突出显示。它可能做的比你需要的多得多,但它可以解决你正在寻找的东西。

于 2016-06-14T17:15:47.763 回答