Советы по Delphi

         

Текущая позиция Tmemo I


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]



Содержание раздела