Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2011, 16:28   #1
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию поиск в richedit

всем привет,помогите организовать поиск в richedit с использованием finddialog.у меня вроде есть код но он иногда не находит я даже не понимаю,мне бы с подробными комментами,хочу понять весь процесс
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 18.05.2011, 16:43   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Ок, ну а где же сам код, который вам непонятен?
Человек_Борща вне форума Ответить с цитированием
Старый 18.05.2011, 16:52   #3
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

да вот он
Код:
procedure TForm1.FindDialog1Find(Sender: TObject);
begin
 with FindDialog1 do
 begin
  if frMatchCase in Options
  then richedit1.SelStart := Pos(FindText,Copy(richedit1.Lines.Text, SPos + 1,Length(richedit1.Lines.Text))) + Spos - 1
 else richedit1.SelStart := Pos(AnsiLowerCase(FindText),AnsiLowerCase(Copy(richedit1.Lines.Text, SPos + 1,Length(richedit1.Lines.Text)))) + Spos - 1;
    if richedit1.SelStart >= Spos
   then
    begin
     richedit1.SelLength := Length(FindText);
     SPos := richedit1.SelStart + richedit1.SelLength + 1;
    end
   else if MessageDlg(
    'Текст "'+FindText+'" не найден. Продолжать диалог?',
    mtConfirmation, mbYesNoCancel, 0) <> mrYes
    then CloseDialog;
 end;
 richedit1.SetFocus;
end;

Код:
procedure TForm1.ToolButton23Click(Sender: TObject);
begin
 SPos := richedit1.SelStart;
 with FindDialog1 do
 begin
  FindText := richedit1.SelText;
  Options := Options + [frHideUpDown, frHideWholeWord];
  Execute;
 end;
end;
но он можно сказать не находит
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 18.05.2011, 17:07   #4
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

Код:
function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): Boolean; 
var 
  StartPos, Position, Endpos: Integer; 
begin 
  StartPos := 0; 
  with RichEdit do 
  begin 
    Endpos := Length(RichEdit.Text); 
    Lines.BeginUpdate; 
    while FindText(SearchText, StartPos, Endpos, [stMatchCase])<>-1 do 
    begin 
      Endpos   := Length(RichEdit.Text) - startpos; 
      Position := FindText(SearchText, StartPos, Endpos, [stMatchCase]); 
      Inc(StartPos, Length(SearchText)); 
      SetFocus; 
      SelStart  := Position; 
      SelLength := Length(SearchText); 
    end; 
    Lines.EndUpdate; 
  end; 
end; 


procedure TForm1.Button1Click(Sender: TObject); 
begin 
  SearchForText_AndSelect(RichEdit1, 'Some Text'); 
end;

Последний раз редактировалось beegl; 18.05.2011 в 17:09. Причина: редактировал
beegl вне форума Ответить с цитированием
Старый 18.05.2011, 17:29   #5
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

Цитата:
Сообщение от beegl Посмотреть сообщение
Код:
function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): Boolean;
это я уже делал,не подходит мне это,мне бы желательно отредактировать мой вариант,да так чтоб понятно было
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 19.05.2011, 10:10   #6
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

ребята я тут догоняю этот код и переделываю,а почему ельзя написать вот так
Код:
richedit1.SelStart := Pos(AnsiLowerCase(FindText),AnsiLowerCase(richedit1.Lines.Text))-1;
чем вот так
Код:
richedit1.SelStart := Pos(FindText,Copy(richedit1.Lines.Text, SPos + 1,Length(richedit1.Lines.Text))) + Spos - 1
мой вариант работает вроде,но он ищет только вниз а то что вверху он не видит,почему так?
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 19.05.2011, 10:33   #7
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Используйте действие SearchFind из ActionList вкладки Standard

Пример можете посмотреть в папке <где делфи лежит>\Demos\Doc\TextEdit
ps: в d6-d7 точно такие папки есть
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.

Последний раз редактировалось Sparkman; 19.05.2011 в 10:35.
Sparkman вне форума Ответить с цитированием
Старый 19.05.2011, 10:42   #8
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

Цитата:
Сообщение от Sparkman Посмотреть сообщение
Используйте действие SearchFind из ActionList вкладки Standard

Пример можете посмотреть в папке <где делфи лежит>\Demos\Doc\TextEdit
ps: в d6-d7 точно такие папки есть
в принципе там будет тоже самое примерно,и вообще мне не нужен код который я сам не понимаю,поэтому переделываю под себя,в этом и прошу помощи
вот еще убрал строчку
Код:
 SPos := richedit1.SelStart + richedit1.SelLength + 1;
теперь всегда ищет от начала текста,но если в тексте например подряд идут два одинаковых слова
'привет'
'привет'
то он находит только первый
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск текста в RichEdit Kozlopiton Общие вопросы Delphi 4 29.01.2011 19:52
Поиск в RichEdit j0di Общие вопросы Delphi 3 12.09.2010 09:18
Поиск/Замена в RichEdit KREGI Компоненты Delphi 1 13.04.2010 13:47
Поиск слова в RichEdit vinimixer Общие вопросы Delphi 1 05.11.2008 00:17
поиск в RichEdit mauar Общие вопросы Delphi 2 05.05.2008 14:36