Delphi备忘录为什么光标始终向左移动

Tmc*_*Tmc -1 delphi tmemo delphi-2010

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

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

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

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

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

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

Mar*_*ynA 7

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

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

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

  • 当然,您也需要为Up键执行此操作,并且由您来决定鼠标点击是否相似.

通过一些谷歌搜索,您可以轻松找到Delphi代码,以检测一个插入符号中的插入符号的当前行和列号TMemo.

  • 用鼠标选择线路怎么样?您认为在插入文本时填充空格以填充空行会更好.但是,如果用户选择*间距*行并删除选择,您会怎么做?我不认为强迫这种行为是一个可行的想法. (2认同)