Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.014 c
15-1221227421
Vlad Oshin
2008-09-12 17:50
2008.11.02
Прикольно..


2-1221981870
DmT
2008-09-21 11:24
2008.11.02
Как вкомпилить dll в exe


15-1220751873
Скан
2008-09-07 05:44
2008.11.02
Как загрузить домашнюю страничку на googlepages.com ?


2-1222246161
DevExpress
2008-09-24 12:49
2008.11.02
При задании фильтра вылетает ошибка:


2-1222177041
начинающий сетевик
2008-09-23 17:37
2008.11.02
Обмен сообщениями по сети