Главная страница
    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
1-1202194972
Dmitriy
2008-02-05 10:02
2008.11.02
Вызов C# DLL из Delphi


15-1220948600
Anatoly Podgoretsky
2008-09-09 12:23
2008.11.02
Дмитрий Олегович успокаивает


2-1222425226
webpauk
2008-09-26 14:33
2008.11.02
как получить максимальное значение?


15-1220905107
Riply
2008-09-09 00:18
2008.11.02
Просмоторщик lib файлов.


4-1198791694
Elec3C
2007-12-28 00:41
2008.11.02
Проверка BalloonHint





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский