Как получить позицию курсора в компоненте 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;