Delphi. Урок 4.5. Продолжим изучать поиск и замену. Функция Delphi StringReplace |
Автор megabax | |||||
27.06.2009 г. | |||||
Продолжим изучать поиск и замену. Функция Delphi StringReplace
В предыдущей статье я обещал научить Вас поиску с возможностью поиска без учета регистра. В текстовом редакторе, который мы написали на предыдущих уроках, если вы для поиска ввели слово «хлеб», то у вас найдет слово «хлеб» именно в таком написании, с маленькой буквы. А вот если это слово стоит в начале предложения и написано с заглавной буквы, то программа его «не увидит». В Delphi есть замечательная функция UpperCase. Она переводит все строчные буквы в заданном тесте в заглавные. Правда, она работает только для латинских букв. Если в тексте есть и русские буквы, тогда нужно использовать AnsiUpperCase. Для того, что бы не нагружать программу ветками if…then, вложенными одна в другую, так как это затрудняет чтение и понимание текста программы, введем еще одну локальную переменную SerchStr. Затем перепишем обработчик rdReplaceDialogFind, вот как он теперь будет у нас выглядеть:
Запускаем программу и убеждаемся, что у нас действительно поиск работает в двух режимам с учетом регистра и без учета регистра. Но у нас еще в диалоге поиска и замены остались две нереализованных кнопки: «Заменить» и «Заменить все». Давайте реализуем в нашем редакторе такую возможность. Создадим обработчик события OnReplace диалога поиска и замены:
Обратите внимание на moText.Lines.Text. Благодаря свойству Text мы можем напрямую обратится ко всему тексту компонента Memo, не перебирая в цикле все его строки. Еще посмотрите на строку
Заметили, что вместо mtInformation стоит mtError? Этот параметр определяет вид сообщения. Теперь, в случае, когда искомой фразу нет в тексте, сообщение выглядеть так:
Но у нас по прежнему не работает кнопка «Заменить все». Для реализации этой функции опять же обратимся к свойству Options компонента ReplaceDialog. Вот так теперь у нас будет выглядеть обработчик события OnReplace
И так, мы познакомились с новой опцией диалога поиска и замены frReplaceAll. Если у нас эта опция не присутствует во множестве опций диалога, используем старый алгоритм замены. Если присутствует – то производим замену при помощи функции StringReplace. У нее четыре параметра. Первый – это текс, где нужно произвести замену. Второй – что заменить. Третий – на какой текст заменить искомую строку. Четвертый – опции заменты. Это уже знакомый вам тип – множество. Опций замены всего две: rfReplaceAll - заменить все и rfIgnoreCase – не учитывать регистр. На этом я заканчиваю восьмой урок, а вам небольшое домашнее задание – подумайте, как сделать, что в нашей программе можно было заменять слово целиком, а так же производить замену как с учетом, так и без учета регистра.
|
|||||
Последнее обновление ( 30.06.2012 г. ) |
« След. | Пред. » |
---|