CurrentLine :=SendMessage(Memo1.Handle, EM_LINEFROMCHAR,Memo1.SelStart, 0); |
Это вернет номер строки, содержащей курсор. Нижеследующий код вернет позицию символа текущей строки, около которого находится курсор:
ColNum := Memo1.SelStart-SendMessage(Memo1.Handle, EM_LINEINDEX,CurrentLine, 0) + 1; |
Описания EM_LINEFROMCHAR и EM_LINEINDEX вы можете найти в файлах помощи по Windows API.
Дополнение
А можно и так, сообщает :
var X,Y: LongInt; ............ Y := Memo1.Perform( EM_LINEFROMCHAR, Memo1.SelStart, 0 ); X := Memo1.Parform( EM_LINEINDEX, Y, 0 ); inc( Y ); X := Memo1.SelStart - X + 1; ........ |
procedure TMyForm.BitBtn1Click(Sender: TObject); var iLine : Integer ;begin iLine := Memo1.Perform(em_LineFromChar, $FFFF, 0);{ Примечание: первая строка нулевая }messageDlg('Номер строки: ' + IntToStr(iLine), mtInformation,[mbOK], 0 ) ;end; |
дополняет:
Не знаю, как было раньше (там в углу написано "Delphi 1"), но в Делфи5 у ТMemo есть св-во
property CaretPos: TPoint; |
которое и решает эту проблему.
Т.е
Label1.Caption:='Строка '+IntToStr(memo1.caretpos.y);Label2.Caption:='Столбец '+IntToStr(memo1.caretpos.x); |
должно вполне работать.
По материалам книги г-на Архангельского "100 компонентов общего назначения в DELPHI 5" (за точность названия/фамилии не ручаюсь, книги под рукой нет). [000482]