![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Найти порядковый номер строки Memo [D5, XP]
sapsi © (2008-09-22 11:15:00)Добрый день.
Есть программа, которая находит вхождение строки текста в мемо.
Если вхождение найдено, т.е. есть позиция, то затем нужно определить, что написано в начале той строки мемо, в которой содержится эта строка.
Для этого поочередно просматриваю все строки в мемо, начиная с первой.
Есть ли способ быстрее определить номер строки мемо, в которой встретилась строка, т.е. по позиции в мемо.текст определить номер строки, в которую это входит?
Спасибо.
Leonid Troyanovsky (2008-09-22 19:20:00) [1]
> arbin (22.09.08 11:42) [5]
function AnsiStrLine(Memo: TMemo; const str: String): Longint;
var
hedit: HLOCAL;
bufedit, pfound: PChar;
begin
hedit := Memo.Perform(EM_GETHANDLE, 0, 0);
if hedit = 0 then
raise Exception.Create('Invalid memo handle');
bufedit := LocalLock(hedit);
Win32Check(bufedit <> nil);
pfound := AnsiStrPos(bufedit, PChar(str));
if pfound <> nil then
Result := Memo.Perform( EM_LINEFROMCHAR,
WParam(pfound-PChar(bufedit)),
0)
else
Result := -1;
LocalUnlock(hedit);
end;
--
Regards, LVT.
Leonid Troyanovsky (2008-09-22 18:19:00) [2]
> sapsi (22.09.08 11:15)
> Есть ли способ быстрее определить номер строки мемо, в которой
> встретилась строка, т.е. по позиции в мемо.текст определить
> номер строки, в которую это входит?
И откуда уверенность, что определять в мемо.текст быстрее?
Во-первых, это GetTextStr, распределяющая длинную строку,
и заполняющая ее _всеми_ строками мемо.
Во-вторых, это Pos.
В-третьих, это EM_LINEFROMCHAR.
--
Regards, LVT.
arbin (2008-09-22 11:42:00) [3]clickmaker, Спасибо
clickmaker (2008-09-22 11:29:00) [4]Memo1.Perform(EM_LINEFROMCHAR
Renegat (2008-09-22 11:28:00) [5]Это смотря, каки чемискать. Привыкли вы, батенька, pos юзать. А своё написать - не? ;)
sapsi (2008-09-22 11:25:00) [6]Но будет же всегда возвращаться позиция первого CR (#13), если не удалять его после определения позиции.
Renegat (2008-09-22 11:19:00) [7]Можно.
Надо всего лишь подсчитать из Text все символы CR (#13), чья позиция не превышает позицию начала найденной строки.
Добавляем к полученному числу 1 и получаем нужный номер.