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

Вниз

Поиск вверх/вниз по RichEdit (Memo)! и чтоб было выделение и пока   Найти похожие ветки 

 
Kurt   (2002-07-29 18:19) [0]

Поиск вверх/вниз по RichEdit (Memo) с любого места! и чтоб было выделение и показ того самого места где найдено и что найдено.
Я уже долго с этим маюсь, но все как то не получается.
с помощью FindDialog.FindText могу это делать "вниз" (и выделять уже зная "новый" SelStart). Но "вверх" это не делается. С помощью цикла по строчкам с помощью уважаемого <Song> а также <Mbo>, но как-то окончательный вариант в связи с неполучением результируещего SelStart-а, да и в конце концов када получил очень медленно работалось. Уже совсем замучился! ПОМОГИТЕ люди, голова уже болит:-) Предложите свои варианты этого, киньте исходнички!
а то времени у меня мало, куча всего и не получается сесть основательно и доделать!
ПЛИЗ! Очень буду благодарен! с меня пиво!:-))


 
Kurt   (2002-07-30 09:47) [1]

Люди, помогите!!!
ау!:-)


 
Song   (2002-07-30 09:54) [2]

В привведённом цикле использовалась ф-ия Pos(). Она возвращает номер символа в строке, где была найдена искомая строка. Но это не SelStart. Поэтому чтобы найти нужное число мы высчитаем его из следующей формулы:

EM_LINEINDEX от номера искомого ряда+результат от ф-ии Pos и возможно минус один (надо попробовать). Вот это и будет значение SelStart. SelLength будет равно длине искомой строки.


 
lenin   (2002-07-30 10:20) [3]

Я не знаю, что тебе советовали Song и Mbo, но можно попробывать следующее:
k:=length(RichEdit1.Text);
k1:=length(fins);
for i:=1 to k do//i:=k downto 1//
begin
if k1>k-i then Continue;
temps:=copy(RichEdit1.text,i,k1);
if temps=fins then
begin
//------
break;
end;
end;


 
Kurt   (2002-07-30 10:23) [4]

краткий кусок текста программы можешь кинуть, если не трудно?


 
Kurt   (2002-07-30 10:29) [5]

Song! я тебе в смысле. ну с использованием EM_LINEINDEX...


 
Song   (2002-07-30 10:52) [6]

ооох... Kurt, ну неужели так трудно?

...
IF Pos(S,Lines[t])>0 then
Begin
SelStart:=Perform(EM_LINEINDEX,t,0)+Pos(S,Lines[t]);
SelLength:=Length(S);
End;
...


Если будет ошибаться на символ добавьте в строку SelStart:=... -1 перед точкой с запятой.


 
Song   (2002-07-30 10:54) [7]

И ещё чтобы выделение было видно нужно чтобы был фокус на компоненте, поэтому возможно придётся поставить SetFocus перед SelStart


 
Kurt   (2002-07-30 11:41) [8]

Song! Большущее спасибо! я тут правда уже вроде допер:-), но ты реально помог. Просто куча всего на работе и нет времени сосредоточиться.
Кстати, на счет SetFocus то понятно, но его можно ставить не обязательно перед SelStart-ом:-), там все равно, лишь бы када нужно чтоб было видно выделение.

Всем спасибо, извините за беспокойство!


 
Kurt   (2002-07-30 15:47) [9]

Вроде все сделал. работает, НО....
Када файл где-то около и более 8 Мегабайт, то блин так долго все делаетсяб можно даже сказать зависает, настолько долго!!! (я каждую строчку RichEdit.Lines анализирую)....
Не подскажите, что делать??? как оптимизировать?!!!


 
Kurt   (2002-07-30 16:23) [10]

ХЕЛП!!!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
14-35425
Dimich1978
2002-07-17 10:18
2002.08.12
Вопрос про короткие имена файлов


1-35264
beginner25
2002-07-31 11:52
2002.08.12
Проблема с Object Pascal, помогите!!!


3-35130
Bash.ua
2002-07-19 21:12
2002.08.12
исключительная ситуация при SQL-запросе...


1-35337
Holodilnik
2002-07-30 12:09
2002.08.12
сортировка в TreeView


3-35191
DmitryM
2002-07-22 17:57
2002.08.12
Вывод результатов запроса в файл





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