Реализация функций контроля и управления на базе Win32 API: Методические указания по выполнению лабораторного практикума, страница 19

4 этап – подсчет количества найденных слов и вывод результата в окне приложения.

10. Для преобразования в RTF-формат необходимо разработать процедуру вставки заданной последовательности в указанное место в буфере. Пример данной процедуры приведен ниже:

//------------------------------------------------------void __fastcall TForm1::RtfIns(int n, char *txtbuf, char *str)

// вставка RTF строки

// n – место куда нужно вставить строку (смещение от начала буфера)

// txtbuf – указатель на исходный буфер

// str – указатель на строку которую нужно вставить

{

char buff[0xffff];  // буфер cохранения

memset(buff,0,strlen(txtbuf));

strcpy(buff,txtbuf); // сохраним

txtbuf[n]=0; // ограничим начало

strcat(txtbuf,str); //вставка строки RTF

strcat(txtbuf,&buff[n]); // добавим оставшийся текст

}

11. Для преобразования в RTF-формат необходимо разработать процедуру удаления в буфере строки из n символов (удаления последовательности «\r\n»). Пример данной процедуры приведен ниже:

//------------------------------------------------------void __fastcall TForm1::RtfDel(int n, char *txtbuf, int size)

// удаление RTF строки

// n – место с которого нужно удалять (смещение от начала буфера)

// txtbuf – указатель на исходный буфер

// size – длина удаляемой строки

{

char buff[0xffff];  // буфер cохранения

strcpy(buff,txtbuf);

txtbuf[n]=0;

strcat(txtbuf,&buff[n+size-1]);

}

12. Выполнить 1 этап разработки процедуры поиска и визуализации. Данная процедура должна вызываться при нажатии кнопки «Поиск». Последовательность выполняемых действий в процедуре:

чтение текста во внутренний буфер при помощи команды  strcpy(buf,RichEdit1->Lines->Text.c_str());

вставка в буфер констант начала и конца RTF-файла с использованием следующей последовательности

RtfIns(0,buf,TXTSTART); // вставка заголовка RTF

RtfIns(sizeof(TXTSTART)-1,buf,TXTNOCOLOR); // установка исходного цвета

strcat(buf,TXTEND); // добавить концовку  RTF

strcat(buf,"\0\0\0"); // добавить концовку запись содержимого буфера во временный файл

char FileName[16]="123.rtf";

int handle = open(FileName, O_CREAT|O_TEXT|O_RDWR);

write(handle, buf, strlen(buf));

close(handle);

чтение файла в поле RichEdit при помощи команды

RichEdit1->Lines->LoadFromFile(FileName).

13. Отладить и проверить правильность выполнения задания RTF-формата. В тексте (поле RichEdit) не должно быть видно введенных констант, а сам текст должен быть не форматирован (отсутствие абзацев).

14. Выполнить 2 этап разработки процедуры поиска и визуализации. Для этого в тексте процедуры перед командами установки констант начала и конца RTF-формата требуется установить цикл замены в тексте последовательности «\r\n» на последовательность «\par». Пример данного цикла приведен ниже

// замена ВК и ПС

ptr=strstr(buf,TXTCR);

while(ptr != NULL)

{// замена ВК и ПС на конец абзаца

RtfDel((int)(ptr-buf),buf,sizeof(TXTCR));

RtfIns((int)(ptr-buf),buf,TXTPAR);

ptr=strstr(buf,TXTCR);

}

15. Отладить и проверить правильность выполнения замены. После выполнения процедуры текст (поле RichEdit) должен принять первоначальный вид.

16. Выполнить 3 этап разработки процедуры поиска и визуализации. Для этого в тексте процедуры перед выше приведенном циклом требуется установить цикл поиска ключевых слов. Пример фрагмента данного цикла приведен ниже

strcpy(str,Edit1->Text.c_str()); // ключевое слово

ptr=strstr(buf,str); // поиск слова

// цикл поиска

while(ptr != NULL)               {

RtfIns((int)(ptr-buf),…,…..); // начало подсветки

RtfIns((int)(ptr-buf)+…+…-1,…,…); // конец подсветки

ptr=ptr+…+…+…; // смещение указателя

ptr=strstr(ptr,str); // поиск слова

}

17. Отладить и проверить правильность выполнения поиска ключевых слов. После выполнения процедуры найденные слова в тексте (поле RichEdit) должны быть выделены красным цветом.