![]() |
|
|
![]()
|
|
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Не ругайтесь, это последний вопрос, я думаю... Как выполнить поиск в TМemo? Про поиск в ЛистБоксе rsm мне более-менее объяснил, за что ему отдельное спасибо. Осталось только понять, как же искать строчки в Memo, + разумеется, Memo должно "прокручиваться" до выделенного слова, а слово должно выделяться.
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
просто так искать не получится -- нет у него соотв. метода => берем memo->Lines->Text b и в нем или вручную ищем или Pos() с последующим удалением найденного текста
позиционирование: SelStart / SelLength -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| mr.Anderson |
|
||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
А вот это еще нафига?! Мне не надо удалять! Мне надо найти! И выделить! Кстати, как выделять, я так и не въехал.... Хотя, может быть, вот так получится? (пишу сходу):
|
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
чтбы последующие вхождения найти ( а не только первое ) читаю тоже сходу... кажись, должно получится. только к x-у длину текста приплюсовывать не нужно -- хватит и просто длины -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Элементарно просто, как и все в С++ Builder
Если нужно реализовать пользовательский интерфейс, то достаточно использовать TSearchFind или TSearchFindFirst. Даже кодировать ничего не придется Ах, да. Я и забыл. Вы ведь сторонник делать все ручками Тогда это не пойдет. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| mr.Anderson |
|
||||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Что-то я не совсем понял. Можете переделать мой код с вашими поправками?
Да, действительно, это я что-то не то...
Именно так. Я хочу научиться делать все своими руками, чтобы больше знать о языке и программировании вообще. А не пользоваться стандартными компонентами, где уже все реализовано и понимать ничего, кроме алгоритма решения задачи, не нужно. |
||||||
|
|||||||
| _hunter |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
есть строка aabbaa как ты собираешся искать вторые aa без удаления первых? -------------------- Tempora mutantur, et nos mutamur in illis... |
||||
|
|||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Смысл понятен. Я имею в виду, что не совсем понял, как это написать. Я еще раз зайду завтра вечером, надеюсь, вы хоть-что нибудь напишете...
|
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Вроде бы намерения хорошие, только вот реализация ... Я бы Вам для начала порекомендовал проштудировать книжку по С++ и по ООП. Дело в том, что судя по вашему коду Вы не учитесь, а усиленно закрепляете Ваши ошибки. А если уж хотите учится и не использовать стандартные компоненты, то почему используете TMemo вместо винконтролов, AnsiString -вместо std::string? И где Ваши собственные классы-адаптеры? Пока имеем в наличии бестолковое использование опять же "стандартных" VCL-компонентов, причем "бестолковость" объясняется желаением сделать самому. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
да какой алгоритм? сразу после Pos() делаем str.Delete(1, pos + searchStr.Length() - 1);
все P.S. если все своими руками делать -- тогда уже не std::string а char* юзать нужно -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
все таки std::string. STL входит в стандарт и не явлется чем то левым -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| mr.Anderson |
|
||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Что-то не получается. Я ввел вот такой код (пока без ваших поправок, hunter):
Програ говорит, что "Указанная строка обнаружена". Однако, найденное не выделяет... Подскажите плиз почему и что надо поправить. Vyacheslav, я в сотый раз повторяю. Какой бы хорошей книга не была, я не могу ее понять! У меня есть книги по C++, по C++ Builder, но я плохо понимаю, когда рядом нет учителя, у которого можно все разъяснить! А учителя-то у меня как раз и нет. Почему я и сижу на этом форуме и надеюсь на помощь через интернет... Поймите правильно мое положение. Я стараюсь, но раз не получается, то что я могу сделать?
Потому что с объектами TMemo и типом AnsiString я познакомился раньше и уже умею хоть немного с ними работать. А другие указанные вами компоненты мне еще незнакомы. Зачем переучиваться? И еще. Раз уж вам так не нравится мое выражение "делать все своими ручками", то замените его на "смешанное программирование". |
||||
|
|||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
ОК . Я его заменю на "смешное программирование" -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
sim7, фокус ему отдай: Memo1->SetFocus();
или HideSelection в false поставь -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| mr.Anderson |
|
||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Знаете, это мне перестает нравиться. То, что вы умеете, это, конечно, плюс вам. Но не нужно смеяться над теми, у кого не получается выучить! hunter, сейчас буду пробовать, спасибо. Добавлено @ 16:54 hunter, я понял, что надо вот так сделать:
Но так не работает. Выделяется только первое найденное. |
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
потому что второе находится на "длина удаленного текста" + Pos() и эту переменную нужно не забывать увеличивать
+ странное удаление: find.Delete(1,Form6->Edit1->Text.Length()-1); в чем его смысл? удалять нужно по Pos() + "длина искомого текста" -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
То ли я слишком тупой, то ли еще что... Напишите плиз мой переделанный код. А то мы так еще долго будем разбираться.
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
AnsiString find=Memo1->Lines->Text; -- эту строку нужно вынести куда-нить в начало процесса поиска
там же добавить int oldSelectionEnd = 0;
примерно так ( писал на коленке ) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Нет, не работает. Все равно ищет и выделяет только первое найденное. Свойство HideSelection у Memo1 выключено. Что еще подскажете? Может, как-нибудь организовать пошаговый поиск, т.е. переделать форму поиска. Поясняю. Нашел он одно совпадение - спрашивает, а искать ли дальше? Если да, ищет дальше. На вот этот спрос-ответ нужен код, я вряд ли с ним справлюсь сам... А форму я беру на себя.
Вот это я написал. Но, (см. выше), это не работает.
|
|||
|
||||
| AntonChik |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 4.10.2005 Где: Красноярск Репутация: 1 Всего: 1 |
2sim7: да не парься ты тогда...пиши посимвольный поиск,тогда и для понимания легче будет и удалять ничего не придется ...только вот не знаю как дела будут обстоять со скоростью...
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
само-собой не работает -- у тебя постоянно процесс поиска начинается.
если ты хочеш делать так, как описал -- форма должна быть не модальной. -- сделай ее fsStayOnTop -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Нет-с, ошибку я нашел, но она не повлияла на результат. Я ее часто стал делать. Посмотрите в коде выше на инструкцию if. Там стоит одно = вместо двух. Но на результат, повторюсь, это не повлияло. Все равно ищет только первое вхождение. hunter, я вернулся к старому коду:
Но это ищет опять-таки только первое вхождение. Дайте плиз проверенный и рабочий код, а то надоело мучаться. Мучаться бессмысленно надоело, то есть. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]()
|
| Правила форума "С++ 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. |