Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];

Вниз

Найти порядковый номер строки 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
2-1222157439
JustI
2008-09-23 12:10
2008.11.02
on...do


2-1222088665
Фоофа
2008-09-22 17:04
2008.11.02
Определение включенности интернета


11-1195121648
Альберт
2007-11-15 13:14
2008.11.02
при установки kol не найден exptintf.dcu


15-1221067217
tesseract
2008-09-10 21:20
2008.11.02
абрамов куда пропал


2-1222334998
deadteachers
2008-09-25 13:29
2008.11.02
Паук-Робот





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский