Главная страница
    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.005 c
14-35418
esprit_bel
2002-06-06 11:27
2002.08.12
Исходник


4-35495
pantera
2002-06-04 08:45
2002.08.12
Win API


7-35473
RDA
2002-05-29 11:40
2002.08.12
PCI-карты


7-35472
ol
2002-05-28 15:30
2002.08.12
контроллер весов


14-35434
lak_b
2002-07-17 13:42
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский