Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Поиск в RichEdit


Автор: popapo 18.6.2008, 13:42
Есть код

Код

int StartPos, ToEnd, FoundAt;
  StartPos = 0;
  ToEnd = RichEdit1->SelStart;
  String sFind = Edit3->Text;

  int nMatch=0, n;

  while (1) {
    n = RichEdit1->FindText(sFind, StartPos, ToEnd, TSearchTypes() << stMatchCase);
    if (n == -1)
      break;
    StartPos = n + sFind.Length();
    ToEnd = RichEdit1->SelStart - StartPos;
    ++nMatch;
    FoundAt = n;
  }

  if (nMatch) {
    RichEdit1->SetFocus();
    RichEdit1->SelStart = FoundAt;
    RichEdit1->SelLength = sFind.Length();
  }


только он ищет с конца, а как его изменить чтобы он искал с места где установлен курсор в RichEdit

Автор: popapo 18.6.2008, 14:04
и ещё, чтобы он показал где это слово (опустил ScrollBar до него)

Автор: petlyura 18.6.2008, 14:29
Цитата(popapo @ 18.6.2008,  13:42)
Есть код

Код

int StartPos, ToEnd, FoundAt;
  StartPos = 0;
  ToEnd = RichEdit1->SelStart;
  String sFind = Edit3->Text;

  int nMatch=0, n;

  while (1) {
    n = RichEdit1->FindText(sFind, StartPos, ToEnd, TSearchTypes() << stMatchCase);
    if (n == -1)
      break;
    StartPos = n + sFind.Length();
    ToEnd = RichEdit1->SelStart - StartPos;
    ++nMatch;
    FoundAt = n;
  }

  if (nMatch) {
    RichEdit1->SetFocus();
    RichEdit1->SelStart = FoundAt;
    RichEdit1->SelLength = sFind.Length();
  }


только он ищет с конца, а как его изменить чтобы он искал с места где установлен курсор в RichEdit

StartPos=RichEdit1->SelStart;
ToEnd = RichEdit1->Text.Length() - StartPos;

вместо 
StartPos = 0;
  ToEnd = RichEdit1->SelStart;

ToEnd = RichEdit1->Text.Length() - StartPos;
вместо
ToEnd = RichEdit1->SelStart - StartPos;

Автор: popapo 18.6.2008, 14:47
petlyura, не работает  smile 

Автор: petlyura 18.6.2008, 15:29
Цитата(popapo @ 18.6.2008,  14:47)
petlyura, не работает  smile

Я на "глаз" код писал smile  Чтобы  "он искал с места где установлен курсор в RichEdit"
Необходимо знать, что хочешь иметь на выходе.

Возьми в отладке попробуй построчно пройти (а параллельно в голове просчитывай или на пальцах, типа ищем "не" в "Денег нет - зовут Олег" - первый "не" - 2 буква, до конца фразы - около 20 символов, второй "не" - 7 буква, до конца фразы - где-то 15 символов) и сразу станет ясно, где что не так. 

Автор: popapo 18.6.2008, 16:40
Спасибо, с этим разобрался, а как 
Код

и ещё, чтобы он показал где это слово (опустил ScrollBar до него)


А все не надо, нашол -
SendMessage( RichEdit1->Handle,EM_SCROLLCARET, 0,0);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)