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


 

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

30287. Основные методы (школы) литературоведения. Структурализм, постструктурализм 184 KB
  Буало автора комедии. Художественной формой выражения этой проблемы стало подчеркнутое присутствие автора отношения к изображаемому. Николев а в их стиле лиризм и рупорность основных персонажей прямо высказывающих любимые идеи автора. 3 Реализм это такое направление в искусстве которое в отличие от предшествующих ему классицизма и романтизма где точка зрения автора находилась соответственно внутри и вне текста осуществляет в своих текстах системную множественность точек зрения автора на текст.
30288. Основные методы художественной литературы. Классицизм. Историко-социальные предпосылки возникновения. Трактат "О поэтическом искусстве" Н.Буало. Характер художественного конфликта в классицизме 27.5 KB
  clssicus образцовый художественный стиль и эстетическое направление в европейской литературе и искусстве 17 начала 19 вв. в литературе. стала основой его социологических и этических построений а в литературе К. оставил в наследство русской литературе 19 в.
30289. Основные методы художественной литературы. Классицизм. Жанрово-стилевая система 27 KB
  Представители классицизма в России Эстетика К. Но внешние стороны не должны были заслонять по убеждению теоретиков и практиков классицизма содержательную сторону показывающую столкновение мысли и страсти героев трагедии. В период расцвета классицизма на сцене происходило совпадение внешней формы и содержания. Когда же наступил кризис этой системы то оказалось что в рамках классицизма невозможно показать жизнь человека во всей её сложности.
30290. Основные методы художественной литературы. Романтизм. Философская основа (учения Шеллинга, Шопенгауэра) 30.5 KB
  Романтизм. Характер художественного конфликта в романтизме Классические страны романтизма Германия Англия Франция. Романтизм это одно из крупнейших направлений в европейской и американской литре 1819 вв получившее всемирное значение и распространение. Романтизм это то что впоследствии будет называться французской революцией под лозунгами свобода равенство братство.
30291. Основные методы художественной литературы. Романтизм. Тип героя. Понятия романтической тайны, романтической иронии 23 KB
  Понятия романтической тайны романтической иронии Романтизм последний âбольшой стильâ в истории искусства то есть последнее направление проявившее себя во всех областях духовной деятельности и художественного творчества: в изобразительных искусствах музыке литературе. Романтизм высшая точка в развитии гуманистического искусства начатого в эпоху Возрождения когда человек был провозглашен мерилом всех вещей. Мир для романтиков тайна загадка познать которую может только откровение искусства.
30293. Основные методы художественной литературы. Реализм. Многообразие подходов к проблеме реализма в литературоведении. Просветительский реализм 29 KB
  Реализм. Многообразие подходов к проблеме реализма в литературоведении. Просветительский реализм. 1 Реализм это художественное направление имеющее целью возможно ближе передавать действительность стремящееся к максимальному правдоподобию.
30294. Основные методы художественной литературы. Модернизм - идейные основы и творческая практика. Основные течения. Идейные основы и художественная практика акмеизма 29.5 KB
  Идейные основы и художественная практика акмеизма. Для акмеизма была характерна крайняя аполитичность полное равнодушие к злободневным проблемам современности. Но если в поэзии символизма определяющим фактором являлась мимолетность сиюминутность бытия некая тайна покрытая ореолом мистики то в качестве краеугольного камня в поэзии акмеизма был положен реалистический взгляд на вещи. Главные идеи акмеизма были изложены в программных статьях Н.
30295. Основные методы художественной литературы. Модернизм - идейные основы и творческая практика. Основные течения. Идейные основы и художественная практика футуризма 23.5 KB
  Философскими предпосылками появление модернистического исва считаются: труды философа Нитше а также исследования Шопенгауэра. По мнению Нитше вся система миров культуры находится в состоянии глубочайшего кризиса. Нитше для активации духовн исканий чела создает острую словесную провокацию: он пишет о мифич сверхчеле кот должен прийти на смену обычному челу слабому потребителю. Для Нитше это норма а совершить усилия это сверхнорма.