Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Поиск в Меmо 
:(
    Опции темы
_hunter
Дата 5.10.2005, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 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...
PM ICQ   Вверх
mr.Anderson
Дата 5.10.2005, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



То ли я слишком тупой, то ли еще что... Напишите плиз мой переделанный код. А то мы так еще долго будем разбираться.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
_hunter
Дата 5.10.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



AnsiString find=Memo1->Lines->Text; -- эту строку нужно вынести куда-нить в начало процесса поиска
там же добавить int oldSelectionEnd = 0;
Код

 Form6=new TForm6(this);    
 if(Form6->ShowModal()==mrCancel) return;    
    int pos = 0;
AnsiString textToFind = Form6->Edit1->Text;
 if( ( pos= find.Pos(textToFind) ) )    
 {    
  find.Delete(1, pos + textToFind.Length()-1);    
  MessageBox(NULL,"Найдено!","Инфо",MB_ICONINFORMATION);    
  Memo1->SelStart= oldSelectionEnd + pos-1;    
  Memo1->SelLength = textToFind.Length();
    oldSelectionEnd += pos + textToFind.Length() -1;    
  return;    
 }    
 MessageBox(NULL,"Не найдено.","Инфо",MB_ICONINFORMATION);

примерно так ( писал на коленке )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
mr.Anderson
Дата 5.10.2005, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Нет, не работает. Все равно ищет и выделяет только первое найденное. Свойство HideSelection у Memo1 выключено. Что еще подскажете? Может, как-нибудь организовать пошаговый поиск, т.е. переделать форму поиска. Поясняю. Нашел он одно совпадение - спрашивает, а искать ли дальше? Если да, ищет дальше. На вот этот спрос-ответ нужен код, я вряд ли с ним справлюсь сам... А форму я беру на себя. smile
Вот это я написал. Но, (см. выше), это не работает.
Код

 Form6=new TForm6(this);
 if(Form6->ShowModal()==mrCancel) return;
 AnsiString text=Memo1->Lines->Text;
 AnsiString text_to_find=Form6->Edit1->Text;
 int select_len=0,position=0;
 if((position=text.Pos(Form6->Edit1->Text)))
 {
  text.Delete(1,position+text_to_find.Length());
  MessageBox(NULL,"Найдено!","Инфо",MB_ICONINFORMATION);
  int x=Form6->Edit1->Text.Length();
  Memo1->SelStart=select_len+position-1;
  Memo1->SelLength=x;
  return;
 }
 MessageBox(NULL,"Не найдено.","Инфо",MB_ICONINFORMATION);



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
AntonChik
Дата 6.10.2005, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 4.10.2005
Где: Красноярск

Репутация: 1
Всего: 1



2sim7: да не парься ты тогда...пиши посимвольный поиск,тогда и для понимания легче будет и удалять ничего не придется ...только вот не знаю как дела будут обстоять со скоростью...
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
_hunter
Дата 6.10.2005, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



само-собой не работает -- у тебя постоянно процесс поиска начинается.
если ты хочеш делать так, как описал -- форма должна быть не модальной. -- сделай ее fsStayOnTop


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
mr.Anderson
Дата 6.10.2005, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Нет-с, ошибку я нашел, но она не повлияла на результат. Я ее часто стал делать. Посмотрите в коде выше на инструкцию if. Там стоит одно = вместо двух. Но на результат, повторюсь, это не повлияло. Все равно ищет только первое вхождение. hunter, я вернулся к старому коду:
Код

 Form6=new TForm6(this);
 if(Form6->ShowModal()==mrCancel) return;
 AnsiString text=Memo1->Lines->Text;
 AnsiString text_to_find=Form6->Edit1->Text;
 if(text.Pos(text_to_find))
 {
  MessageBox(NULL,"Указанная строка обнаружена!","Информация",MB_ICONINFORMATION);
  Memo1->SelStart=text.Pos(text_to_find)-1;
  Memo1->SelLength=text_to_find.Length();
  text.Delete(1,text_to_find.Length());
  return;
 }
 MessageBox(NULL,"Указанная строка не найдена.","Информация",MB_ICONINFORMATION);

Но это ищет опять-таки только первое вхождение. Дайте плиз проверенный и рабочий код, а то надоело мучаться. Мучаться бессмысленно надоело, то есть.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Vyacheslav
Дата 7.10.2005, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



М
 
Я закрываю эту тему. Вам дали по этому вопросу полную консультацию. Если вопрос в том, что Вам нужно написать рабочий код за Вас, обращайтесь в Центр помощи
Если желаете, я перенесу эту ветку туда



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.