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


 

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

32307. РЕАЛИЗАЦИЯ ПРАВА: ПОНЯТИЕ И ФОРМЫ 63.5 KB
  Применительно к праву этот процесс означает его перевод в качество правомерного поведения использование свойств права для достижения социально полезного результата. Субъектами реализации права являются те лица на которых право распространяет свое действие то есть субъекты права. Явич справедливо заметил что осуществление права не всегда представляло практическую и теоретическую проблему ее не было когда защищенные силой фактические отношения на заре цивилизации являлись правом ее не бывает или почти не оказывается когда...
32308. Учение о составе правонарушения понятие состава правонарушения как основания юридической ответственности. Элементы состава и их характеристика 46.5 KB
  Учение о составе правонарушения понятие состава правонарушения как основания юридической ответственности. Установление состава правонарушения является юридической квалификацией содеянного весьма важной с правовой точки зрения логической операцией непосредственно затрагивающей судьбу личности. Наличие состава правонарушения является основанием для привлечения виновного лица к юридической ответственности. В состав правонарушения входят следующие четыре элемента которые в свою очередь раскрываются через ряд собственных специфических черт и...
32309. Предмет Теории государства и права 44 KB
  Для теории государства и права в качестве объекта выступают государство и право которые в то же время исследуются и другими науками как юридическими так и не юридическими философией политологией экономикой социологией и т. В качестве предмета теории государства и права выступают два следующих блока объективной действительности. 1 Наиболее общие закономерности возникновения развития и функционирования государства и права. Отсюда предметом теории государства и права будут выступать основные государственноправовые закономерности а...
32310. Место и роль ТГП в системе юридических наук 40.5 KB
  Они дают знания о развитии и чертах государства и права вообще безотносительно к конкретным государствам или праву действующему на отдельной территории. К фундаментальным наукам относятся: o теория государства и права; o история государства и права России и зарубежных стран; o история политических и правовых учений. Эти науки изучают отдельные отрасли права. Они призваны выявить специфику той или иной отрасли ее особенности характерные черты отличия от других отраслей права.
32311. Методология юридической науки 39.5 KB
  Методология юридической науки. Особенности науки теории государства и права выражаются не только в ее предмете но и в методе. Под методом науки понимается совокупность приемов средств принципов и правил с помощью которых обучающийся постигает предмет получает новые знания. Метод это подход к изучаемым явлениям предметам и процессам планомерный путь научного познания и установления истины.
32312. Общая характеристика власти догосударственного периода 37 KB
  Любое общество представляет собой своего рода целостный социальный организм систему который отличается той или иной степенью организованности урегулированности упорядоченности общественных отношений. Для первобытнообщинного строя были характерны следующие черты: наличие лишь примитивных орудий и неспособность человека без помощи всего рода выжить и обеспечить себя пищей одеждой жилищем. Все взрослое население рода и мужчины и женщины имели право участвовать в обсуждении и решении любого вопроса связанного с деятельностью рода....
32313. Азиатский способ производства и возникновение государств на Др.Востоке (восточно-деспотических государств) 34.5 KB
  Постепенно по мере роста масштабов кооперации коллективной трудовой деятельности зародившиеся еще в родоплеменных коллективах зачатки государственной власти превращаются в органы управления и господства над суммами общин которые в зависимости от широты экономических целей складываются в микро и макрогосударства объединяемые силой централизованной власти. Общинники считаются свободными однако фактически все стало государственной собственностью включая личность и жизнь всех подданных которые оказались в безраздельной власти...
32314. Возникновение государственности в Европе (Афины, Рим, германцы, славяне). Общие закономерности и особенности 50 KB
  В отличие от азиатского государства ведущим государствообразующим фактором на территории Европы было классовое разделение общества. Следовательно для генезиса Афинского государства характерно то что оно возникает непосредственно и прежде всего из классовых антагонизмов развивающихся в недрах родоплеменного общества. В длившейся 200 лет борьбе между двумя группами свободных членов римского родоплеменного общества плебеи вырывали у патрициев одну уступку за другой. Если само положение Греции и Рима способствовало...
32315. Теории возникновения государства и права 43 KB
  Одни государства подчас могут распадаться СССР Югославия Чехословакия; другие объединяются в более крупные такой процесс возможно начался в рамках Европейского Союза. Могут зародиться новые причины и формы такого возникновения что бесспорно только обогатит теорию государства. Основные теории происхождения государства теологическая патриархальная договорная насилия органическая материалистическая психологическая патримониальная и ирригационная ставят во главу угла какойлибо один конкретный доминирующий способ...