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


 

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

62784. Протест против «футлярной жизни» в «маленькой трилогии» А.П.Чехова 15.92 KB
  Оборудование: Портрет Чехова с надписью Его врагом была пошлость. Чехова не всегда легко понять если не помнишь жизненной позиции писателя который был строг прежде всего к себе. Горького горячее желание видеть людей простыми красивыми и гармоничными...
62786. Рвана аплікація: Гроно калини 16.83 KB
  Якого кольору листочки у калини зеленого А ягідки якого кольору червоного Як ви розумієте вислів Похолоднішало риба не ловиться калина у цвіт вбирається. Як ви розумієте вислів Без верби та калини нема України. Сьогодні ми з вами робитимемо рвану аплікацію Гроно калини.