Delphi memo 为什么光标总是向左

Delphi memo why cursor going to the Left always

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

|                   |  
|Hello world |      |  
|                   |  
|test               |  
|                   |  
|                   |    

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

|                   |  
|Hello world        |  
||                  |  
|test               |
|                   |  
|                   |  

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

|                   |  
|Hello world        |  
|               |   |   
|test               |  
|                   |  
|                   | 

Delphi 中的 TMemo 仅将内部控件包装在 Windows 本身中 - 它本身不支持您想要的此类功能。可以将其修改为以这种方式运行,但更容易使用已经为此设计的东西。 SynEdit 可以做到这一点的一种非常流行的控件是面向代码编辑器和语法高亮显示的。它的功能可能远远超出您的需要,但它可以满足您的需求。

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

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

  • 当你检测到由向下键引起的OnKeyDown事件时,检查下一行的字符数,如果是小于当前行中插入符号左侧的字符数,用空格向右填充下面的行,直到字符数相等。如果备忘录使用定点字体,屏幕上的外观只会准确地保持列位置;使用比例字体,光标仍会 "wiggle" 左右移动,因为空格比大多数其他字符窄。

  • 当然,你也需要为Up键做这个,你是否对鼠标点击做类似的操作取决于你。

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

中插入符号的当前行号和列号