Форум: "Основная";
Текущий архив: 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.005 c