在我的 VCL 项目中,我有一个TMemo
带有以下文本(|
是插入符号):
| | |你好世界 | | | | |测试 | | | | |
当我按下Down按钮时,插入符号移动到这里:
| | |你好世界 | || | |测试 | | | | |
我需要的是让它移到这里:
| | |你好世界 | | | | |测试 | | | | |
在我的 VCL 项目中,我有一个TMemo
带有以下文本(|
是插入符号):
| | |你好世界 | | | | |测试 | | | | |
当我按下Down按钮时,插入符号移动到这里:
| | |你好世界 | || | |测试 | | | | |
我需要的是让它移到这里:
| | |你好世界 | | | | |测试 | | | | |
我认为您会发现为此设计自己的解决方案很有启发性。TMemo
响应键的默认行为Down取决于下一行有多少个字符。如果下一行的数量至少与当前行的数量一样多,则插入符号将保留在相同的列号中。
所以一个简单的解决方案可能是
当您检测到OnKeyDown
由键引起的事件时Down,检查下一行中的字符数,如果它小于插入符号左侧的当前行中的字符数,则在下面的行右填充空格,直到字符数相等。仅当备忘录使用定点字体时,屏幕上的外观才会完全保持列位置;使用比例字体,光标仍会左右“摆动”一点,因为空格比大多数其他字符窄。
当然,您也需要对 Up 键执行此操作,是否对鼠标单击执行类似操作取决于您。
通过一些谷歌搜索,您可以轻松找到 Delphi 代码来检测TMemo
.
Delphi 仅将TMemo
内部控件包装在 Windows 本身中 - 它本身并不支持您想要的此类功能。可以将其修改为以这种方式运行,但更容易使用已经为此设计的东西。可以做到这一点的一个非常流行的控件是SynEdit,它适用于代码编辑器和语法突出显示。它可能做的比你需要的多得多,但它可以解决你正在寻找的东西。