0

私の VCL プロジェクトにはTMemo、次のテキスト (|はキャレット) があります。

| | | |  
|ハローワールド | | |  
| | | |  
|テスト |  
| | | |  
| | | |    

ボタンをDown押すと、キャレットがここに移動します。

| | | |  
|ハローワールド |  
|| | |  
|テスト |
| | | |  
| | | |  

私が必要とするのは、代わりにここに移動することです:

| | | |  
|ハローワールド |  
| | | | | |   
|テスト |  
| | | |  
| | | |
4

2 に答える 2

7

これに対する独自の解決策を考案することは有益だと思います。TMemoキーへの応答のデフォルトの動作はDown、次の行にある文字数によって異なります。次の行に現在の行と少なくとも同じ数がある場合、キャレットは同じ列番号にとどまります。

したがって、簡単な解決策は

  • OnKeyDownキーによって引き起こされたイベントを検出したらDown、次の行の文字数を確認し、現在の行のキャレットの左側の文字数よりも少ない場合は、次の行まで空白で右パディングします。文字数は同じです。メモが固定小数点フォントを使用している場合、画面上の外観は列の位置を正確に維持するだけです。プロポーショナル フォントでは、スペースが他のほとんどの文字よりも狭いため、カーソルは左右に少し「小刻みに動きます」。

  • もちろん、Up キーに対してもこれを行う必要があり、マウス クリックに対して同様のことを行うかどうかはあなた次第です。

少しグーグルで検索すると、Delphi コードを簡単に見つけて、現在の行とキャレットの列番号をTMemo.

于 2016-06-14T17:46:21.607 に答える