Главная страница
    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.007 c
1-35382
Belov
2002-07-30 21:06
2002.08.12
Создание ярлыка на рабочем столе


7-35486
alehan
2002-05-28 11:32
2002.08.12
Сервис SRV


1-35376
Aleksandr
2002-07-30 17:47
2002.08.12
Люди, что случилось с модулем classes?


3-35150
roadrunner
2002-07-18 16:27
2002.08.12
Excell как мастер отчетов


8-35387
stup
2002-04-03 17:48
2002.08.12
Помогите сделать хороший интерфейс при использ. DelphiX





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