7077

Проектирование программ на языках высокого уровня С++

Лабораторная работа

Информатика, кибернетика и программирование

Реализовать процедуру поиска страниц, свойство Caption или компонент типа TMemo которых содержит задаваемое слово.

Русский

2014-10-10

172 KB

3 чел.

1. Цель работы

Знакомство с методами проектирования программ на языках высокого уровня С++.

2. Задание на работу

В программе необходимо реализовать:

Пункт главного меню «Справка», состоящий из двух подпунктов «Информация об авторе» и «Информация о программе»;

Смену пиктограмм на кнопках главной экранной формы при наведении на них курсора манипулятора «мышь».

Реализовать процедуру поиска страниц, свойство Caption или компонент типа TMemo которых содержит задаваемое слово.

3. Листинг программы:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Main_F.h"

#include "Unit2.h"

#include "Unit3.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

TMemo *Memo[1001]; // Массив элементов Memo для каждой карточки

TTabSheet *pPage; // Элемент страницы

int n_Memo = 0;

int Flag1 = 0;//флаг, говорящий о том, что поиск следует начать с начала

int NumberOfPageFinded=0; //номер страницы на которой нашли последний текст

int SELSTART;//начало выделение для повторного поиска

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

       : TForm(Owner){

}

//---------------------------------------------------------------------------

// Добавление карточки

void __fastcall TForm1::Add_Click(TObject *Sender){

 pPage = new TTabSheet(this); // Конструктор страницы

pPage -> PageControl = PageControl_; // "Привязать" страницу к PageControl_

 PageControl_ -> ActivePage = pPage; // Сделать новую страницу активной

 pPage -> Caption = "Page" + AnsiString(n_Memo + 1);

PageControl_ -> Hint = (AnsiString)"Количество карточек: "

                       + AnsiString(PageControl_ -> PageCount);

PageControl_ -> ShowHint = true;

 Memo[n_Memo++] = new TMemo(this);  // Конструктор Memo на странице

 Memo[n_Memo - 1] -> Parent = pPage; // "Привязать" Memo к pPage

Memo[n_Memo - 1] -> Height = 313;

Memo[n_Memo - 1] -> Width = 415;

Memo[n_Memo - 1] -> Left = 2;

Memo[n_Memo - 1] -> WantTabs = true;

Memo[n_Memo - 1] -> Top = 2;

Memo[n_Memo - 1] -> Enabled = true;

Memo[n_Memo - 1] -> Visible = true;

Memo[n_Memo - 1] -> SetFocus(); // Установить фокус на компоненте Memo страницы

for (int r=0;r<1000;r++) {Char R=random(25)+200;Memo [n_Memo - 1]-> Text=Memo [n_Memo - 1]->Text+R;};

//Формирование страницы

}

//---------------------------------------------------------------------------

// Завершить приложение

void __fastcall TForm1::Exit_Click(TObject *Sender){

Close();

}

//---------------------------------------------------------------------------

// Удаление активной карточки

void __fastcall TForm1::Del_Click(TObject *Sender){

int i, j;

pPage = PageControl_ -> ActivePage;

if((PageControl_ -> PageCount > 0) &&

  (MessageDlg((AnsiString)"Удалить карточку " + (AnsiString)"\"" + pPage ->

  Caption + (AnsiString)"\"?", mtConfirmation, TMsgDlgButtons()

  << mbYes << mbNo, 0) == mrYes)){

  delete pPage;

  PageControl_ -> Hint = (AnsiString)"Количество карточек: " +

                         AnsiString(PageControl_ -> PageCount);

  PageControl_ -> ShowHint = true;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FindClick(TObject *Sender)

{

FindDialog1->Execute();   //старт диалога поиска

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FindDialog1Find(TObject *Sender)

{

int i;

/---------------------------------------------------------------------------

if (Flag1==0)

       {for(i=0;i < PageControl_->PageCount;i++)                 {

               int FoundAt=-10+Memo[i]->Text.SubString(0, Memo[i]->Text.Length()).Pos(FindDialog1->FindText);

              if (FoundAt==-10&&(i==PageControl_->PageCount-1))

                       {

                       ShowMessage("Текст '" + FindDialog1->FindText + "' не найден");

                       Flag1=0;                        };

               if (FoundAt!=-10)

                               {

                               PageControl_->ActivePageIndex=i;

                               Memo[i]->SetFocus();

                               Memo[i]->SelStart = FoundAt+10-1;

                               Memo[i]->SelLength = FindDialog1->FindText.Length();

                       SELSTART=FoundAt+10-1+FindDialog1->FindText.Length();

                               Flag1=Flag1+1;

                       NumberOfPageFinded=i;

                               return;

                               }

               };

       }

else

       {

       int j;

               {for(j=NumberOfPageFinded;j<PageControl_->PageCount;j++)

                       {

                       int FoundAt=-10+SELSTART+Memo[j]->Text.SubString(SELSTART, Memo[j]->Text.Length()).Pos(FindDialog1->FindText);

                       if (FoundAt==-10+SELSTART&&(j+1)==(PageControl_->PageCount))

                               {ShowMessage("Поиск окончен, найдено " + IntToStr(Flag1) + " совпадений");

                               Flag1=0;

                               }

                       else

                       {

                       if (FoundAt!=(-10+SELSTART))

                               {PageControl_->ActivePageIndex=j;

                               Memo[j]->SetFocus ();

                               Memo[j]->SelStart = FoundAt+10-2;

                               Memo[j]->SelLength = FindDialog1->FindText.Length();

                               Flag1=Flag1+1 ;

                               NumberOfPageFinded=j;

                               SELSTART=FoundAt+10+FindDialog1->FindText.Length();

                               return;

                               }

                       else {SELSTART=1;};                         }

             }

          }

          }

}

void __fastcall TForm1::Add_MouseMove(TObject *Sender, TShiftState Shift,

     int X, int Y)

{

 Add_->Layout = blGlyphRight;

 Del_->Layout = blGlyphLeft;

 Exit_->Layout = blGlyphLeft;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Panel_ButtMouseMove(TObject *Sender,

     TShiftState Shift, int X, int Y)

{

  Add_->Layout = blGlyphLeft;

  Del_->Layout = blGlyphLeft;

  Exit_->Layout = blGlyphLeft;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Del_MouseMove(TObject *Sender, TShiftState Shift,

     int X, int Y)

{

   Add_->Layout = blGlyphLeft;

 Del_->Layout = blGlyphRight;

 Exit_->Layout = blGlyphLeft;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Exit_MouseMove(TObject *Sender, TShiftState Shift,

     int X, int Y)

{

 Add_->Layout = blGlyphLeft;

 Del_->Layout = blGlyphLeft;

 Exit_->Layout = blGlyphRight;        

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FindMouseMove(TObject *Sender, TShiftState Shift,

     int X, int Y)

{

Find->Font->Size=X*Y/200+10;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)

{

Form2->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N3Click(TObject *Sender)

{

Form3->ShowModal();

}

//---------------------------------------------------------------------------

Отладка прошла успешно.

  1.  Результаты функционирования разработанного ПО.

Рисунок 1. Внешний вид приложения

Рисунок 2. Смену пиктограмм на кнопках главной экранной формы при наведении на них курсора манипулятора «мышь».

Рисунок 3. Внешний вид экранной формы при наличие текста на страницах

Рисунок 4. Внешний вид диалогового окна поиск

Рисунок 5. Выделение в тексте найденного текста

Рисунок 6. Сообщения о результатах поиска.

Вывод

Ознакомились с некоторыми методами проектирования программ на С++.

Ответы на контрольные вопросы:

1. Какие операторы программного кода в интегрированной среде C++ Bulder необходимы, чтобы на экранной форме динамически появилась новая страница (на основе компонета типа TPageControl)?

а) TTabSheet pPage = new TTabSheet(this);

8. С помощью какого программного кода можно реализовать метод перехода к следующей странице (тип компонента PageControl_ TPageControl) в интегрированной среде Delphi?

б) i = PageControl_->ActivePage->PageIndex; PageControl_->ActivePage = PageControl_->Pages[i+1];


 

А также другие работы, которые могут Вас заинтересовать

49860. Расчет привода электродвигателя АИР132М8 1.01 MB
  Расчёт производим в форме проверки коэффициента запаса прочности, значение которого можно принять. При этом должно выполняться условие, что, где – расчётный коэффициент запаса прочности, и – коэффициенты запаса по нормальным и касательным напряжениям, которые определим ниже.
49861. Автоматика и регулирование РДТТ 578 KB
  Значение основных параметров при регулировании с использованием центрального тела: Конструкция центрального тела Задание на курсовое проектирование Вариант №10. Для РДТТ стартующих в диапазоне температур окружающей среды и имеющего номинальные параметры кН МПа: Определить количество сменных вкладышей если их будет более 4 нужно изменить величину разброса и вычислить каждого вкладыша для определенного диапазона окружающей среды при настройке на Р=const; Построить в натуральную величину профиль обечайки по известным...
49862. Автоматика и регулирование РДТТ. Расчёт сменных сопловых вкладышей 745.5 KB
  Определить количество сменных вкладышей (если их будет более 4, нужно изменить величину разброса) и вычислить каждого вкладыша для определенного диапазона окружающей среды при настройке на Р=const;
49863. Расчет схемы управления и защиты трехфазного асинхронного двигателя 392 KB
  Защита трансформатора от токов короткого замыкания и перегрузки осуществляется автоматическим выключателем Q0. Нижестоящий выключатель Q1 защищает от токов к. Для защиты нагрузок 2 – 7 и соединяющих их линий l2 – l7 от токов короткого замыкания перегрузки и токов утечки ниже установлены автоматические выключатели нагрузки FD2 – FD7. Защита двигателя от токов короткого замыкания осуществляется автоматическим выключателем QF1.
49864. Проектирование технологического процесса сборки и средств технологического оснащения 2.62 MB
  Темой данного курсового проекта является разработка технологического процесса сборки прибора точной электромеханики и средств технологического оснащения. Исследуемым прибором является гиромотор (ГМ), который является трёхфазным асинхронным двигателем обращённого типа.
49865. Расчет электродвигателя и его составляющих 779.29 KB
  Кинематическая схема механизма Выбор электродвигателя Мощность на выходе: кВт Мощность электродвигателя: кВт Принимаем: кВт Определение частоты вращения вала: мин1 Определение частоты вращения электродвигателя: Принимаем двигатель: АИР90L4 мин1 ; р=2. Допускаемые напряжения для расчета на контактную выносливость: За расчетное допускаемое напряжение принимаем меньшее из полученных 7. Коэффициент нагрузки Принимаем Схема передачи 5 с учетом варианта а соотношений термических обработок. Коэффициент...
49866. Ленточный транспортер 563.29 KB
  Для передачи крутящего момента от двигателя использован цилиндрический соосный двухпоточный мотор-редуктор, который состоит из прямозубых зубчатых колес с внешним зацеплением(быстроходная ступень) и внутренним (тихоходная ступень). Чугунный корпус имеет разьем в вертикальной плоскости.
49867. Автоматика и регулирование РДТТ. Расчет параметров двигателя 4.43 MB
  Расчет основных параметров двигательной установки Газовая постоянная продуктов сгорания топлива: Физикохимическая константа топлива: Постоянную топлива: Комплекс Ак: Секундный массовый расход при номинальных условиях окружающей среды: Скорость горения при нормальных условиях: Определим потребную площадь горения: Коэффициент сопла: φс = 098 Коэффициент тепловых потерь: χ = 098 Площадь критического сечения при номинальной температуре заряда: Задаем значение давления на срезе сопла: ра = 01 МПа; Определим значение приведенной скорости:...
49868. Цифровая фильтрация и дискретная обработка сигналов 447.14 KB
  Рассчитать и построить спектральные характеристики аналогового сигнала. Рассчитать прохождение сигнала через цепь операторный или временной метод Дискретная обработка аналогового сигнала. Спектральный анализ аналогового сигнала Разложение сигнала на типовые составляющие.