Главная страница
    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.007 c
2-1222087552
berrometr
2008-09-22 16:45
2008.11.02
анимационный GIF


2-1222343693
Семенов. Н
2008-09-25 15:54
2008.11.02
Поясните строку в коде...


15-1220959204
vajo
2008-09-09 15:20
2008.11.02
Вот уж не думал, что тема про штрафы ГИБДД никому не интересна.


15-1220175582
Dmitry S
2008-08-31 13:39
2008.11.02
WiFi на висте


2-1222177041
начинающий сетевик
2008-09-23 17:37
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский