Обзор компонентов библиотеки C++Builder_______________________219

/* ToEnd — длина текста, начиная с первой позиции поиска и до конца */
ToEnd = Memol->Text.Length() - StartPos;

/* поиск с учетом или без учета регистра в зависимости от

установки пользователя */

if (FindDialogl->Options.Contains(frMatchCase))
FoundAt = StartPos + Meniol->Text.Substring(StartPos+1,
ToEnd).Pos(FindDialogl->FindText);

else
, , FoundAt = StartPos + Memol->Text.Substring(StartPos+1,

'' ToEnd).Lowercase().Pos(FindDialogl->FindText.Lowercase());

if (FoundAt '.= StartPos) // если найдено
{

Memol->SetFocus();

Memol->SelStart = FoundAt-1;

Memol->SelLength = FindDialogl->FindText.Length();

}
else ShowMessage("Текст '" + FindDialogl->FindText + "' не найден");

}

Программа аналогична приведенной ранее для компонента RichEdit и отлича-
ется только несколькими операторами, осуществляющими непосредственно поиск.

При реализации команды Заменить приведенные выше процедуры можно
оставить теми же самыми, заменив в них FindDialogI на ReplaceDialogl. Допол-
нительно можно написать процедуру обработки события OnReplace компонента
ReplaceDialogl. Кроме того желательно обеспечить, чтобы при нажатии пользова-
телем в диалоге клавиши Заменить все программа просматривала бы весь текст и
проводила все замены без дополнительных вопросов пользователю. Для этого мож-
но в конце обработчика события OnFind вставить оператор, который в случае, если
пользователь нажал в диалоге клавишу Заменить все (см. рис. 3.48), вызывал бы
обработчик события OnReplace. В итоге текст, обеспечивающий замену в компо-
ненте RichEdit, может иметь вид:

void_fastcall TFormI::ReplaceDialoglFind(TObject *Sender)
{

// Если нажата кнопка "Заменить все", то уход на замену
if(ReplaceDialogl->Options.Contains(frReplaceAll))
ReplaceDialoglReplace(Sender) ;

}

//—————————————————————————

void_fastcall TFormI::ReplaceDialoglReplace(TObject *Sender)
{
if (RichEditl->SelText != "") // Если есть выделенный текст

<
// Замена выделенного текста

RichEditl->SelText = ReplaceD'ialogl->ReplaceText;

// Если нажата кнопка "Заменить все", то изменение позиции
if (RepiасеDialogl->0ptions.Contains(frReplaceAll))
RichEditl->SelStart += ReplaceDialogl->ReplaceText.Length();

}

else if (ReplaceDialogl->Options.Contains(frReplace))                  '
{
ShowMessage("Текст '" + ReplaceDialogl->FindText + "' не найден");

return;

}

// Если нажата кнопка "Заменить все", то уход на поиск
if (ReplaceDialogl->Options.Contains(frReplaceAll))
ReplaceDialoglFind(Sender) ;

1