![]() |
|
|
![]()
|
|
| Torn@do |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 24.9.2002 Где: Kiev Репутация: нет Всего: нет |
Приветик.
Я забыл как пользоваться диалогами. На пятом билдере был классный хелп, решались все вопросы. А вот на шестом что-то мне не удаётся вообще ничего найти, что меня интересует. (( Короче, добавил я диалоги на форму, в элементах управления прописал диалогам метод Execute(). Разобрался только с диалогом печати и диалогом шрифта. Работают. Остались Открыть, Сохранить, Найти, Заменить. Все должны работать с текстом в RichEdit. |
|||
|
||||
| Link90 |
|
|||
|
"Битый" пиксель ![]() Профиль Группа: Участник Сообщений: 214 Регистрация: 25.11.2005 Где: Иркутск - середин а земли! Репутация: 3 Всего: 7 |
Открыть, Сохранить:
Это сообщение отредактировал(а) Link90 - 13.6.2006, 09:19 |
|||
|
||||
| Torn@do |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 24.9.2002 Где: Kiev Репутация: нет Всего: нет |
Link90, точно! Спасибо.
А не подскажешь, как работают диалоги Найти, Заменить.. ? |
|||
|
||||
| Link90 |
|
|||
|
"Битый" пиксель ![]() Профиль Группа: Участник Сообщений: 214 Регистрация: 25.11.2005 Где: Иркутск - середин а земли! Репутация: 3 Всего: 7 |
Почитай бильдеровский хелп!!!! Там всё написано! Введи: FindText - это для TFindDialog, а для TReplaceDialog: ReplaceText!
|
|||
|
||||
| Torn@do |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 24.9.2002 Где: Kiev Репутация: нет Всего: нет |
Link90, да про хелп я сразу написал. В пятом билдере всё было отлично. А сейчас у меня шестой стоит. Так вот, всё это я и сам сначала искал. В хелпе написано, какая это афигенно удобная штука, диалог поиска текста (про диалог замены написано, что он такой же, как и поиска) и расписаны опции, которые доступны в окне диалогов, чтоб можно было поменять их в программе. А как ими пользоваться не написано.
|
|||
|
||||
| Kuber |
|
||||||||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 7.4.2006 Где: #vingrad Репутация: 1 Всего: 3 |
Сами по себе компоненты FindDialog и ReplaceDialog не осуществляют ни поиска, ни замены. Они только обеспечивают интерфейс с пользователем. А поиск и замену надо осуществлять программно. Для этого можно пользоваться событием OnFind, происходящим, когда пользователь нажал в диалоге кнопку Найти далее, и событием OnReplace, возникающим, если пользователь нажал кнопку Заменить или Заменить все. В событии OnReplace узнать, какую именно кнопку нажал пользователь, можно но значениям флагов frReplace и frReplaceAll. Поиск заданного фрагмента легко проводить, пользуясь функцией Object Pascal Pos, которая определена в модуле System следующим образом:
где S — строка, в которой ищется фрагмент текста, a Substr — искомый фрагмент. Функция возвращает позицию первого символа первого вхождения искомого фрагмента в строку. Если Substr в S не найден, возвращается 0. Для организации поиска нам потребуется еще две функции: Сору и AnsiLowerCase. Первая из них определена как:
Она возвращает фрагмент строки S, начинающийся с позиции Index и содержащий число символов, не превышающее Count. Функция AnsiLowerCase, определенная как
возвращает строку символов S, переведенную в нижний регистр. Теперь мы можем рассмотреть пример организации поиска. Пусть в вашем приложении имеется компонент Memo1 и при выборе раздела меню MFind вы хотите организовать поиск в тексте, содержащемся в Memo1. Для упрощения задачи исключим опцию поиска только целых слов и опцию поиска вверх от положения курсора. Программа, реализующая поиск, может иметь следующий вид:
В программе вводится переменная SPos, сохраняющая позицию, начиная с которой надо проводить поиск. Процедура MFindClick вызывает диалог, процедура FindDialog1Find обеспечивает поиск с учетом или без учета регистра в зависимости от флага frMatchCase. После нахождения очередного вхождения искомого текста этот текст выделяется в окне Memo1 и управление передается этому окну редактирования. Затем при нажатии пользователем в диалоговом окне кнопки Найти далее, поиск продолжается в оставшейся части текста. Если искомый текст не найден, делается запрос пользователю о продолжении диалога. Если пользователь не ответил на этот запрос положительно, то диалог закрывается методом CloseDialog. В дополнение к приведенному тексту полезно в обработчики событий OnClick и OnKeyUp компонента Memo1 ввести операторы
Это позволяет пользователю во время диалога изменить положение курсора в окне Memo1. Это новое положение сохранится в переменной SPos и будет использовано при продолжении поиска. При реализации команды Заменить приведенные выше процедуры можно оставить теми же самыми, заменив в них FindDialog1 на ReplaceDialog1. Дополнительно можно написать процедуру обработки события OnReplace компонента ReplaceDialog1:
Этот код производит замену выделенного текста и, если пользователь нажал кнопку Заменить все, то продолжается поиск вызовом уже имеющейся процедуры поиска ReplaceDialog1Find*. Если же пользователь нажал кнопку Заменить, то производится только одна замена и для продолжения поиска пользователь должен нажать кнопку Найти далее. -------------------------------------------------------------------------------- * Предлагаемый автором алгоритм принажатии на кнопку Заменить все заменяет только одно значение и находит следующее. На наш взгляд такия действия более логично было бы задать кнопке Заменить, а для Заменить все организовать цикл. Причем такой цикл проще осуществить в процедуре ReplaceDialog1Find. В приведенном ниже коде кроме того введена локальная переменная ss, так как свойству SelStart нельзя присваивать отрицательные значения.
Хоть из Delphi, но думаю тебе поможет. Взято из А. Я. Архангельский - 100 компонентов общего назначения Delphi5 --------------------
Если меня угораздило написать что то умное и вам понравилось, то не забудте нажать [-]...:) |
||||||||||||||||
|
|||||||||||||||||
| Torn@do |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 24.9.2002 Где: Kiev Репутация: нет Всего: нет |
Kuber, спасибо!
|
|||
|
||||
| Link90 |
|
|||
|
"Битый" пиксель ![]() Профиль Группа: Участник Сообщений: 214 Регистрация: 25.11.2005 Где: Иркутск - середин а земли! Репутация: 3 Всего: 7 |
Torn@do, у меня тоже 6 бильдер, а ты на ссылку Example жать не пробовал???
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |