Текущий архив: 2008.11.02;
Скачать: CL | DM;
Вниз
Найти порядковый номер строки Memo Найти похожие ветки
← →
sapsi (2008-09-22 11:15) [0]Добрый день.
Есть программа, которая находит вхождение строки текста в мемо.
Если вхождение найдено, т.е. есть позиция, то затем нужно определить, что написано в начале той строки мемо, в которой содержится эта строка.
Для этого поочередно просматриваю все строки в мемо, начиная с первой.
Есть ли способ быстрее определить номер строки мемо, в которой встретилась строка, т.е. по позиции в мемо.текст определить номер строки, в которую это входит?
Спасибо.
← →
Renegat © (2008-09-22 11:19) [1]Можно.
Надо всего лишь подсчитать из Text все символы CR (#13), чья позиция не превышает позицию начала найденной строки.
Добавляем к полученному числу 1 и получаем нужный номер.
← →
sapsi (2008-09-22 11:25) [2]Но будет же всегда возвращаться позиция первого CR (#13), если не удалять его после определения позиции.
← →
Renegat © (2008-09-22 11:28) [3]Это смотря, как и чем искать. Привыкли вы, батенька, pos юзать. А своё написать - не? ;)
← →
clickmaker © (2008-09-22 11:29) [4]Memo1.Perform(EM_LINEFROMCHAR
← →
arbin (2008-09-22 11:42) [5]clickmaker, Спасибо
← →
Leonid Troyanovsky © (2008-09-22 18:19) [6]
> sapsi (22.09.08 11:15)
> Есть ли способ быстрее определить номер строки мемо, в которой
> встретилась строка, т.е. по позиции в мемо.текст определить
> номер строки, в которую это входит?
И откуда уверенность, что определять в мемо.текст быстрее?
Во-первых, это GetTextStr, распределяющая длинную строку,
и заполняющая ее _всеми_ строками мемо.
Во-вторых, это Pos.
В-третьих, это EM_LINEFROMCHAR.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-09-22 19:20) [7]
> 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.
Страницы: 1 вся ветка
Текущий архив: 2008.11.02;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.006 c