Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28

Подсвечивание слов в тексте

06.10.2012, 15:42. Показов 1685. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте, при поиске словосочетания/слова выделяется только первое встречающееся заданное слово а нужно чтобы все встречающиеся в тексте...пробовал добавить цикл,но не помогло, помогите разобраться)

так же при вводе в поиск словосочетания и устанавливая в поле CheckBox галочку, должен осуществляться поиск и в неправильном порядке: допустим вводим "чистая вода" и соответственно на ряду с "чистая вода" код должен подсветить и "вода чистая"...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
TForm1 *Form1;
AnsiString poisk;
int k,dlina;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Memo1->Clear();
Edit1->Clear();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
poisk=Trim(Edit1->Text);
dlina=poisk.Length();
k=AnsiPos(poisk,Memo1->Text);
 
if (k>0){
Memo1->HideSelection=false;
Memo1->SelStart=k-1;
 
Memo1->SelLength=dlina;
MessageDlgPos( "<<"+poisk+">> íàéäåíî",
mtInformation, TMsgDlgButtons()<<mbOK,0,95,175);
        }
else
                {
MessageDlgPos("<<"+poisk+">> íå íàéäåíî",mtInformation,
TMsgDlgButtons()<<mbOK,0,95,175);
Memo1->HideSelection=true;
                }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
OpenDialog1->Execute();
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
}
//---------------------------------------------------------------------------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.10.2012, 15:42
Ответы с готовыми решениями:

Количество слов в тексте
Переделываю курсовик.язык Turbo C++ )) Раньше программа считала количество слов в тексте. ...

количество слов в тексте
Пишу курсовик.Программа следующего плана.Нужно вводить текст из внешнего файла в Memo и далее нажав на кнопку посчитать количество слов в...

Подсчет слов в тексте
int cou = 0; for(int i = 0; i &lt; strx.Length(); i++) { if(strx == ' ') cou++; } Не работает. Где...

11
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.10.2012, 17:39
Сделать подсветку в Memo невозможно , используйте RichEdit. Тема довольно подробно раскрыта на форуме.
0
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
06.10.2012, 17:43  [ТС]
вы имеете ввиду что невозможно подсветить несколько словосочетаний? просто этот код подсвечивает в memo
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.10.2012, 17:52
boost2110, простите, я подумал о выделении слов другим цветом.
0
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
06.10.2012, 18:11  [ТС]
да ничего страшного) подскажите как подсветить сразу все варианты и сделать обратный порядок?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
07.10.2012, 09:49
Цитата Сообщение от boost2110 Посмотреть сообщение
как подсветить сразу все варианты
Что возвращает нас обратно к richedit... Множественное одновременное выделение не сделать ни там, ни в memo, но зато в richedit можно использовать выделение цветом найденного.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.10.2012, 17:02
BRcr, в ричэдит3 можно подсвечивать фоном, имитируя системную подсветку, и искать не одно слово, а массив слов, введенных, например, в тот же эдит, я так понимаю.
0
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
07.10.2012, 17:04  [ТС]
BRcr, перешел к richedit, но не знаю как реализовать обратный порядок поиска. не подскажите?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int k=0;
AnsiString text=RichEdit1->Text;
int int_pos;
AnsiString word = Edit1->Text;
 
 if(text.Pos(word))  {
    int_pos = text.Pos(word);
    RichEdit1->SelStart=int_pos-1;
    RichEdit1->SelLength=word.Length();
    RichEdit1->SelAttributes->Color=clBlue;
    text[int_pos]='0';
                     }
 else   {
 RichEdit1->SelAttributes->Color=clWindowText;
 
        }
Добавлено через 1 минуту
LK, а как реализовать фоновую подсветку?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
07.10.2012, 17:12
LK, это multiselect или иммитация? И что будет в SelectedText?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.10.2012, 17:21
C++
1
2
3
4
5
6
7
8
9
Richedit::CHARFORMAT2 format;
 
    memset( &format, 0x00, sizeof(format) );
    format.cbSize = sizeof(Richedit::CHARFORMAT2);
    format.dwMask = CFM_BACKCOLOR;
    format.crBackColor = RGB(128, 128, 128);
 
    SendMessage(RichEdit1->Handle, EM_SETCHARFORMAT, (WPARAM)SCF_SELECTION,
                (LPARAM)&format);
BRcr, ну откуда мне знать, как ТС реализует, так и будет
C++
1
2
SendMessage(RichEdit1->Handle,EM_SETBKGNDCOLOR,TRUE,0);   // использовать системный цвет(фон окна)
SendMessage(RichEdit1->Handle,EM_SETBKGNDCOLOR,FALSE,clRed); // использовать красный цвет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Чтобы ыыделить и подсветить текст:
 
void backgr_text_color(TColor color, int pos, int len, TRichEdit *REdit)
{
   Richedit::CHARFORMAT2 format;
 
   REdit->SelStart=pos;
   REdit->SelLength=len;
 
   format.cbSize=sizeof(format);
   format.dwMask=CFM_BACKCOLOR;
   format.crBackColor=color;
 
   SendMessage(REdit->Handle,EM_SETCHARFORMAT,(WPARAM)SCF_SELECTION,(LPARAM)&format);
}
 
Чтобы снять выделение и подстветку - овторно послать то же сообщение контролу.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
07.10.2012, 17:53
Я просто не понял сразу, что речь ведем об одном и том же, но разными словами(выделение цветом = подсвечивать фоном) А мультиселекта в richedit нет, только ручками дописывать. Впрочем, ТС это и не требуется.

boost2110, поиск в обратном направлении довольно просто руками сделать. Ищем как обычно, запоминаем индексы мест, где найдены совпадения, а потом показываем их задом наперед. Из поисковых функций только одна вспоминается - SearchBuf(), в ней можно задать направление поиска, только вот юникодной версии ее что-то не видать...
0
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
07.10.2012, 17:54  [ТС]
я вот никак не додумаю как поменять порядок на основании этого кода. у меня с поиском проблемы в связи с неполным изучением с++, так прошу все таки помощи)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.10.2012, 17:54
Помогаю со студенческими работами здесь

Переворот слов в тексте
Всем привет. Такая задача имеется: Каждое слово текста преобразовать таким обpазом,чтобы оно читалось слева направо. Всю задачу не требую )...

Замена полных слов в тексте
Подскажите алгоритм замены слова в тексте. Есть класс class myText { private: AnsiString asText; } Вводится текст в мемо, и...

Определить количество слов в тексте
Задание 1: Определить количество слов в тексте Задание 2: Вывести N первых прописных латинских букв. Всё в C++ Build

подсчет количества слов в тексте
как можно подсчитать сколько раз в тексте встречаетса какоето слово ?

Как ускорить подсчёт слов в тексте
Всем привет! Нужно посчитать слова в тексте и отсортировать их по частоте встречаемости. Код работает, но на больших объемах...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru