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];


 

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

36783. Работа с текстом. Форматирование абзацев 950.5 KB
  Выделять можно с помощью мыши и с помощью клавиатуры. Выделение с помощью мыши Фирма Microsoft разрабатывая Word поставила себе целью сделать выделение различных фрагментов текста максимально удобным. Объем фрагмента который вы выделяете зависит от количества щелчков левой кнопки мыши как показано в таблице. Простой щелчок Перемещает в указанное место курсор вставки Двойной щелчок Выделяет слово Тройной щелчок в любом месте текста Выделяет весь абзац Щелчок в любом месте предложения при нажатой клавише [Ctrl] Выделяет все предложение С...
36785. Исследование магнитных полей с помощью измерительной катушки 167 KB
  Приборы и принадлежности: два коротких соленоида планшеты из оргстекла с отверстиями для фиксации измерительной катушки датчик магнитного поля измерительная катушка длинный соленоид блок питания переменного тока амперметр блок сопряжения компьютер. Теоретическая часть В лабораторной работе измерение и исследование переменных магнитных полей осуществляются с помощью датчика измерительной катушки. При помещении датчика в переменное магнитное поле в нем возникает ЭДС индукции величина которой определяется по формуле:...
36786. Измерение логарифмического декремента и добротности 177 KB
  Краткое теоретическое введение Колебательным контуром называется электрическая цепь состоящая из последовательно составленных конденсаторов с емкостью катушки индуктивности и активного сопротивления . Измерение логарифмического декремента затухания и добротности контура производят при различных условиях: а сопротивление катушка индуктивности не имеет сердечника. Колебания в этом случае будут тоже затухающими так как имеет место внутреннее сопротивление катушки индуктивности и соединительных проводов; б сопротивление катушка...
36787. Определение скорости звука, модуля Юнга и внутреннего трения резонансным методом 187.5 KB
  Деформацией твердого тела называется изменение формы или объема тела под действием внешних сил. Деформации, которые полностью исчезают после прекращения внешних воздействий, называются упругими. Деформации, которые не исчезают после прекращения действия внешних сил, называются пластическими. Деформации реальных тел после прекращения действия внешних сил никогда полностью не исчезают. Однако если остаточные деформации малы, то ими можно пренебречь и рассматривать деформации как упругие.
36788. Тоновая и цветовая коррекция 12.22 MB
  В реальном изображении могут встретиться случайные светлые и темные пятна, царапины. Для правильной настройки следует отсечь уровни с низким процентом пикселей, чтобы ориентироваться по тонам документа, а не по случайным пятнам.
36789. ЧАСТНЫЕ РЕАКЦИИ КАТИОНОВ I АНАЛИТИЧЕСКОЙ ГРУППЫ 61 KB
  Тема: ЧАСТНЫЕ РЕАКЦИИ КАТИОНОВ I АНАЛИТИЧЕСКОЙ ГРУППЫ. Перечень заданий: Частные реакции катиона N. Частные реакции катиона К. Частные реакции катиона NH4.
36790. Определение концентрации и подвижности основных носителей заряда в полупроводниках 174.5 KB
  Эффект Холла обусловлен взаимодействием носителей заряда электронов проводимости и дырок с магнитным полем. В магнитном поле на электрон действует магнитная сила F= e[B v] на положительные заряды F= q[B v] v = j ne – средняя скорость направленного движения носителей в электрическом поле; nконцентрация носителей; e qзаряды под действием которой частицы отклоняются в направлении перпендикулярном j и B. При одном и том же направлении тока на передней грани накапливаются разные по знаку заряды в зависимости от типа...
36791. Изучение распределения термоэлектронов по скоростям. Распределение Максвелла 211 KB
  Краткое теоретическое введение Известно что свободные электроны внутри металла описываются квантовой статистикой ФермиДирака согласно которой распределение электронов по скоростям имеет вид 1 где число свободных электронов в единице объема металла с компонентами скоростей в интервалах от до от до от до ; масса электрона; постоянная Планка; энергия электрона; постоянная Больцмана; температура; энергия Ферми такое значение энергии электрона ниже которой все состояния...