В TRichEdit или TMemo при нажатии Enter позиционирование курсора в позицию как в предыдущей строке
Вопрос в службу поддержки:
Что делать если я довел мышку до края коврика, а курсор не дошел до края экрана?
unit Unit1;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
RichEdit1: TRichEdit;
procedure RichEdit1KeyPress(Sender: TObject; var Key: Char);
private{ Private declarations }public{ Public declarations }end;
var
Form1: TForm1;
implementation{$R *.DFM}uses
richedit;
procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
var
line, col, indent: integer;
S: string;
beginif key = #13 thenbegin
key := #0;
with sender as TRichEdit dobegin{figure out line and column position of caret}
line := PerForm( EM_EXLINEFROMCHAR, 0, SelStart );
Col := SelStart - Perform( EM_LINEINDEX, line, 0 );
{get part of current line in front of caret}
S:= Copy( lines[ line ], 1, col );
{count blanks and tabs in this string}
indent := 0;
while (indent < length( S )) and (S[indent + 1] in [' ', #9]) do
Inc( indent );
{insert a linebreak followed by the substring of blanks and tabs}
SelText := #13#10 + Copy(S, 1, indent);
end;
end;
end;
end.
В статье описывается решение проблемы с позиционированием курсора в TRichEdit или TMemo при нажатии клавиши Enter, которое позволяет обеспечить его перемещение на следующую строку с сохранением прежнего положения.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.