Как получить позицию курсора в компоненте TMemo?

В компоненте TMemo предусмотрено получение позиции курсора через механизм сообщений. Для получения позиции необходимо послать два сообщения. Первое -

LineNum := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);

для получения номера строки в которой находится курсор. И второе -

CharNum := Memo1.Perform(EM_LINEINDEX, LineNum, 0);

для получения позиции курсора в заданной строке. Будте внимательны, так как номер строки и позиция в строке отсчитываются от нуля.

Пример:

{Получаем позицию курсора при щелчке мыши на компоненте}
procedure TForm1.Memo1Click(Sender: TObject); 
VAR 
 
 LineNum : LongInt; 
 CharNum : LongInt; 
 
begin 
 
 {Получаем номер строки}
 LineNum := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0); 
 {Получаем позицию в строке}
 CharNum := Memo1.Perform(EM_LINEINDEX, LineNum, 0); 
 {Выводим позицию на экран}
 Label1.Caption := IntToStr(LineNum+1)+' : '+
 
 IntToStr((Memo1.SelStart-CharNum)+1); 
 
end;
 
............ 
 
{Получаем позицию курсора при отпускании клавиши на клавиатуре}
procedure TForm1.Memo1KeyUp(Sender: TObject; 
                             var Key: Word; Shift: TShiftState); 
begin 
 
 Memo1Click(Self); 
 
end;

Последние комментарии

Счетчики