Главная страница
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.016 c
15-1221207727
berrometr
2008-09-12 12:22
2008.11.02
Защита программ от исследования


11-1194706878
matroskin66
2007-11-10 18:01
2008.11.02
Несколько форм в dll


2-1222216922
Lamer6666
2008-09-24 04:42
2008.11.02
Zeos+MySQL


2-1222054942
Алексей1985
2008-09-22 07:42
2008.11.02
Удаление элементов из масива


2-1222087552
berrometr
2008-09-22 16:45
2008.11.02
анимационный GIF