Рефераты. Алгоритм, написание и отладка программы "Текстовый редактор"

Это существенно сократит размеры выполняемых файлов и сбережет вам немало дискового пространства.

3. МЕТОДИКА РЕШЕНИЯ ЗАДАЧИ

Разобьем поставленную перед нами задачу на отдельные подзадачи:

1. Создание меню программы.

2. Вывод на экран справки, содержащей руководство по управлению и информацию об авторе.

4. Описание работы программы

Программа содержит в своем составе все необходимые пакеты для работы независимо от C++Buildera. Запуск производится по открытию файла TeRAn.exe Сразу после этого без промедления открывается главное окно программы (см. рисунок 1)

Рисунок 1 - Главное окно приложения

В этом окне расположены основные средства управления программой.

Непосредственно в работе с текстом участвует форма «Справка», представленная на рисунке 2. Текст справки считывается из файла hlp, который всегда должен находится в одной папке вместе с исполняемым файлом TeRAn.exe

Рисунок 2 - Вспомогательная форма «Справка»

Рисунок 3 - Вспомогательная форма «О программе»

Из рисунка 1 видно, что на нашей главной форме приложения можно непосредственно редактировать текст документа, оформляя его по своему желанию необходимым образом. В верхней части программы находятся две панели: панель инструментов Panel1 и панель редактирования Panel2, на которых располагаются кнопки типа SpeedButton, с функциями, соответствующими техническому заданию.

5. Руководство пользователя

Аппаратно-системные требования

Минимальные системные требования:

+ IBM PC: MS Windows 98 и выше;

+ процессор Pentium 2 - 400МГц;

+ 64 Мб ОЗУ;

+ SVGA - карта (800х600, 65536 цветов);

+ Клавиатура;

+ Мышь

Состав пакета

В состав пользовательского пакета входит всего 2 файла:

TeRAn.exe - исполняемый файл.

hlp - файл справки, который при необходимости, можно сделать встроенным.

Все файлы должны лежать в одной папке и запускаться оттуда.

Руководство пользователя

Данная программа представляет собой текстовый редактор, предназначенный для набора, редактирования и форматирования текста. Сначала необходимо скопировать все файлы, входящие в программный пакет на жесткий диск (все файлы должны находиться в одной папке). Для начала работы с программой следует запустить файл TeRAn.exe, после чего появится сразу главная форма с полем для редактирования. Затем выбирайте нужные для вас действия, следуя всплывающим подсказкам, и подсказкам появляющимся в строке состояния.

Текст можно вводить как с клавиатуры, так и из файла.

Для того, чтобы прочитать руководство пользователя выберите пункт меню «? | Справка».

Для выхода из программы выберите пункт меню «Файл | Выход.

Для сохранности и успешной работы программы не рекомендуется вносить какие-либо изменения в файлы программного пакета, а также следует хранить эти файлы и запускать программу из одной папки.

6. Недостатки и достоинства программы

У программы можно найти следующие достоинства: низкие системные и аппаратные требования, имеет простой алгоритм, по размеру значительно мала, приличная скорость работы. Программа не представляет сложности для пользователя и имеет практически все возможности редактирования текста.

Недостатком программы является отсутствие настроек параметров страницы. Нет предварительного просмотра для отправки на печать.

Также недостатком можно считать отсутствие выбора кодировки и отсутствие синтаксической подсветки.

Таким образом, у разработанной программы есть несколько способов дальнейшего усовершенствования, после которого программа бы избавилась от вышеописанных недостатков.

Заключение

В результате выполнения курсового проекта была разработана программа, демонстрирующая пример текстового редактора. В программе были использованы основные типы данных, структуры данных, а также программа строилась по модульному принципу.

В результате проделанной работы был повторен и использован при разработке программы пройденный материал по программированию в среде разработки C++Builder 6.

Также была проделана немаловажная работа по написанию пояснительной записки, опыт которой, безусловно, пригодиться в будущем при написании всевозможной документации.

Достаточно интересно было работать над самой поставленной задачей. Во время работы был прочитан материал, связанный непосредственно с языком программирования С++.

Библиографический список

1. Фаронов В.В., Программирование в Builder C++: Учебный курс. - СГб.: Питер, 2004.

2. Архангельский А.Я., Тагин М.А. Приемы программирования в C++Builder 6 и 2006: Вычислительные задачи, работа с документами. - М:ЗАО «Издательство БИНОМ», 2007

3. Архангельский А.Я. Справочное пособие по C++Builder 6 и 2006. Компоненты. - М:ЗАО «Издательство БИНОМ», 2006

Приложение

TeRAn.cpp

#include <vcl.h>

#pragma hdrstop

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

USEFORM("TeR.cpp", Form1);

USEFORM("Unit1.cpp", AboutBox);

USEFORM("Unit2.cpp", Form2);

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

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm(__classid(TForm1), &Form1);

Application->CreateForm(__classid(TForm2), &Form2);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

catch (...)

{

try

{

throw Exception("");

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

}

return 0;

}

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

TeR.cpp

#include <vcl.h>

#pragma hdrstop

#include "TeR.h"

#include "Unit1.h"

#include "Unit2.h"

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

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::SpeedButton4Click(TObject *Sender)

{

if (OpenDialog1->Execute())

RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);

StatusBar1->Panels->Items[0]->Text=(OpenDialog1->FileName);

SpeedButton4->Down=false;

}

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

void __fastcall TForm1::SpeedButton14Click(TObject *Sender)

{

if (ColorDialog1->Execute())

RichEdit1->SelAttributes->Color = ColorDialog1->Color;

}

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

void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)

{

if ( CSpinEdit1->Text != "" )

{

RichEdit1->SelAttributes->Size = CSpinEdit1->Value;

}

}

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

void __fastcall TForm1::ComboBox1Change(TObject *Sender)

{

//Выбор шрифта

RichEdit1->SelAttributes->Name=ComboBox1->Items->Strings[ComboBox1 ->ItemIndex];

}

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

void __fastcall TForm1::SpeedButton13Click(TObject *Sender)

{

//Полужирный

if (SpeedButton13->Down==true)

{

RichEdit1->SelAttributes->Style=TFontStyles()<< fsBold;

}

if (SpeedButton13->Down==false)

{

RichEdit1->SelAttributes->Style=TFontStyles();

}

if ((SpeedButton13->Down==true)&&(SpeedButton12->Down==true))

{

RichEdit1->SelAttributes->Style=TFontStyles()<<fsBold<<fsItalic;

}

if ((SpeedButton13->Down==false)&&(SpeedButton12->Down==true))

{

RichEdit1->SelAttributes->Style =TFontStyles()<<fsItalic;

}

if ((SpeedButton13->Down)&&(SpeedButton11->Down))

{

RichEdit1->SelAttributes->Style=TFontStyles()<<fsBold<<fsUnderline;

}

if ((SpeedButton13->Down==false)&&(SpeedButton11->Down==true))

{

RichEdit1->SelAttributes->Style =TFontStyles()<<fsUnderline;

}

if ((SpeedButton13->Down==true)&&(SpeedButton12->Down==true)&&(SpeedButton11->Down==true))

{

RichEdit1->SelAttributes->Style=TFontStyles()<<fsBold<<fsItalic<<fsUnderline;

}

if ((SpeedButton13->Down==false)&&(SpeedButton12->Down==true)&&(SpeedButton11->Down==true))

{

RichEdit1->SelAttributes->Style =TFontStyles()<<fsItalic<<fsUnderline;

}

}

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

void __fastcall TForm1::SpeedButton12Click(TObject *Sender)

{

//курсив

if (SpeedButton12->Down==true)

{

RichEdit1->SelAttributes->Style=TFontStyles()<< fsItalic;

}

if (SpeedButton12->Down==false)

{

RichEdit1->SelAttributes->Style=TFontStyles();

}

if ((SpeedButton12->Down==true)&&(SpeedButton13->Down==true))

{

RichEdit1->SelAttributes->Style=TFontStyles()<<fsBold<<fsItalic;

}

if ((SpeedButton12->Down==false)&&(SpeedButton13->Down==true))

{

RichEdit1->SelAttributes->Style =TFontStyles()<<fsBold;

}

if ((SpeedButton12->Down)&&(SpeedButton11->Down))

{

RichEdit1->SelAttributes->Style=TFontStyles()<<fsItalic<<fsUnderline;

}

if ((SpeedButton12->Down==false)&&(SpeedButton11->Down==true))

{

RichEdit1->SelAttributes->Style =TFontStyles()<<fsUnderline;

}

if ((SpeedButton13->Down==true)&&(SpeedButton12->Down==true)&&(SpeedButton11->Down==true))

{

RichEdit1->SelAttributes->Style=TFontStyles()<<fsBold<<fsItalic<<fsUnderline;

}

if ((SpeedButton13->Down==true)&&(SpeedButton12->Down==false)&&(SpeedButton11->Down==true))

{

RichEdit1->SelAttributes->Style =TFontStyles()<<fsBold<<fsUnderline;

}

}

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

void __fastcall TForm1::SpeedButton11Click(TObject *Sender)

{

if (SpeedButton11->Down==true)

{

RichEdit1->SelAttributes->Style=TFontStyles()<< fsUnderline;

}

if (SpeedButton11->Down==false)

{

RichEdit1->SelAttributes->Style=TFontStyles();

}

if ((SpeedButton11->Down==true)&&(SpeedButton13->Down==true))

{

RichEdit1->SelAttributes->Style=TFontStyles()<<fsBold<<fsUnderline;

}

if ((SpeedButton11->Down==false)&&(SpeedButton13->Down==true))

{

RichEdit1->SelAttributes->Style =TFontStyles()<<fsBold;

}

if((SpeedButton11->Down==true)&&(SpeedButton12->Down==true))

{

RichEdit1->SelAttributes->Style=TFontStyles()<<fsItalic<<fsUnderline;

}

if ((SpeedButton11->Down==false)&&(SpeedButton12->Down==true))

{

RichEdit1->SelAttributes->Style =TFontStyles()<<fsItalic;

}

if ((SpeedButton13->Down==true)&&(SpeedButton12->Down==true)&&(SpeedButton11->Down==true))

{

RichEdit1->SelAttributes->Style=TFontStyles()<<fsBold<<fsItalic<<fsUnderline;

}

if ((SpeedButton11->Down==false)&&(SpeedButton12->Down==true)&&(SpeedButton13->Down==true))

{

RichEdit1->SelAttributes->Style =TFontStyles()<<fsBold<<fsItalic;

}

}

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

void __fastcall TForm1::SpeedButton3Click(TObject *Sender)

{

if (SaveDialog1->Execute()) RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);

StatusBar1->Panels->Items[0]->Text=SaveDialog1->FileName;

}

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

void __fastcall TForm1::N5Click(TObject *Sender)

{

if (SaveDialog1->Execute()) RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);

StatusBar1->Panels->Items[0]->Text=SaveDialog1->FileName;

}

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

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)

{

RichEdit1->CopyToClipboard();

}

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

void __fastcall TForm1::SpeedButton6Click(TObject *Sender)

{

if (PrintDialog1->Execute()) RichEdit1->Print(" ");

}

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

void __fastcall TForm1::N3Click(TObject *Sender)

{

if (OpenDialog1->Execute())

RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);

StatusBar1->Panels->Items[0]->Text=(OpenDialog1->FileName);

}

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

void __fastcall TForm1::SpeedButton7Click(TObject *Sender)

{

FindDialog1->Position = Point(RichEdit1->Left + RichEdit1->Width, RichEdit1->Top);

//FindDialog1->FindText=RichEdit1->SelText;

FindDialog1->Execute();

}

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

void __fastcall TForm1::FindDialog1Find(TObject *Sender)

{

int FoundAt, StartPos, ToEnd;

if (RichEdit1->SelLength)

StartPos = RichEdit1->SelStart + RichEdit1->SelLength;

else

StartPos = 0;

ToEnd = RichEdit1->Text.Length() - StartPos;

FoundAt = RichEdit1->FindText(FindDialog1->FindText, StartPos, ToEnd, TSearchTypes()<< stMatchCase);

if (FoundAt != -1)

{

RichEdit1->SetFocus();

RichEdit1->SelStart = FoundAt;

RichEdit1->SelLength = FindDialog1->FindText.Length();

}

}

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

void __fastcall TForm1::N9Click(TObject *Sender)

{

if (MessageBox(0,"Сохранить содержимое окна редактирования? ","Подтвердите сохранение",MB_YESNO)==IDYES)

if (SaveDialog1->Execute()) RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);

Application->Terminate();

}

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

void __fastcall TForm1::N16Click(TObject *Sender)

{

if (RichEdit1->Lines->Count>0)

{

if (MessageBox(0,"Сохранить содержимое окна редактирования? ","Подтвердите сохранение",MB_YESNO)==IDYES)

{

//N9Click(Sender);

}

}

RichEdit1->Clear();

StatusBar1->Panels->Items[0]->Text="Документ";

}

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

void __fastcall TForm1::SpeedButton2Click(TObject *Sender)

{

RichEdit1->CutToClipboard();

}

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

void __fastcall TForm1::SpeedButton5Click(TObject *Sender)

{

RichEdit1->CopyToClipboard();

}

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

void __fastcall TForm1::SpeedButton9Click(TObject *Sender)

{

RichEdit1->PasteFromClipboard();

}

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

void __fastcall TForm1::N20Click(TObject *Sender)

{

ReplaceDialog1->Execute();

}

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

void __fastcall TForm1::ReplaceDialog1Replace(TObject *Sender)

{

TReplaceDialog *dlg = (TReplaceDialog *)Sender;

int SelPos = RichEdit1->Lines->Text.Pos(dlg->FindText);

if (SelPos > 0)

{

RichEdit1->SelStart = SelPos - 1;

RichEdit1->SelLength = dlg->FindText.Length();

RichEdit1->SelText = dlg->ReplaceText;

}

else

MessageBeep(0);

}

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

void __fastcall TForm1::N19Click(TObject *Sender)

{

FindDialog1->Position = Point(RichEdit1->Left + RichEdit1->Width, RichEdit1->Top);

FindDialog1->Execute();

}

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

void __fastcall TForm1::N30Click(TObject *Sender)

{

if(FontDialog1->Execute())

{

RichEdit1->SelAttributes->Assign(FontDialog1->Font);

}

}

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

void __fastcall TForm1::N28Click(TObject *Sender)

{

Application->CreateForm(__classid(TAboutBox), &AboutBox);

AboutBox->ShowModal();

AboutBox->Free();

}

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

void __fastcall TForm1::N7Click(TObject *Sender)

{

if (PrintDialog1->Execute()) RichEdit1->Print(" ");

}

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

void __fastcall TForm1::N24Click(TObject *Sender)

{

StatusBar1->Visible=! StatusBar1->Visible;

N24->Checked=! N24->Checked;

}

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

void __fastcall TForm1::N22Click(TObject *Sender)

{

Panel1->Visible=! Panel1->Visible;

N22->Checked=! N22->Checked;

}

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

void __fastcall TForm1::N23Click(TObject *Sender)

{

Panel2->Visible=! Panel2->Visible;

N23->Checked=! N23->Checked;

}

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

void __fastcall TForm1::SpeedButton16Click(TObject *Sender)

{

if(ColorDialog1->Execute())

{RichEdit1->Color=ColorDialog1->Color;}

}

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

void __fastcall TForm1::SpeedButton17Click(TObject *Sender)

{

RichEdit1->Paragraph->Alignment=taLeftJustify;

}

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

void __fastcall TForm1::SpeedButton18Click(TObject *Sender)

{

RichEdit1->Paragraph->Alignment=taCenter;

}

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

void __fastcall TForm1::SpeedButton19Click(TObject *Sender)

{

if(SpeedButton11->Down==true)

{

RichEdit1->Paragraph->Numbering=nsBullet;

}

else

{

RichEdit1->Paragraph->Numbering=nsNone;

}

}

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

void __fastcall TForm1::SpeedButton15Click(TObject *Sender)

{

RichEdit1->Paragraph->Alignment=taRightJustify;

}

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

void __fastcall TForm1::CSpinEdit1KeyPress(TObject *Sender, char &Key)

{

if((Key!=VK_BACK)&&(Key!='9')&&(Key!='8')&&(Key!='7')&&(Key!='6'))

{

Set <char, '0','9'> Dig;

Dig << '0'<< '1'<< '2' << '3'<< '4' << '5'<< ' 6 '<< ' 7 '<< ' 8 '<< ' 9 ' ;

if ( ! Dig.Contains(Key)) { Key = 0; Beep () ;}

}

}

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

void __fastcall TForm1::FormShow(TObject *Sender)

{

int i;

for (i=0; i<Screen->Fonts->Count; i++)

{

ComboBox1->Items->Add (Screen->Fonts->Strings[i] ) ;

}

CSpinEdit1->Value=RichEdit1->SelAttributes->Size;

}

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

void __fastcall TForm1::RichEdit1MouseUp(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

if(RichEdit1->Paragraph->Numbering==nsNone)

{SpeedButton19->Down=false;}

if(RichEdit1->Paragraph->Numbering==nsBullet)

{SpeedButton19->Down=true;}

switch (RichEdit1->Paragraph->Alignment)

{case taLeftJustify: SpeedButton17->Down=true; break;

case taCenter: SpeedButton18->Down=true; break;

case taRightJustify: SpeedButton15->Down=true; break;}

if(RichEdit1->SelAttributes->Style==RichEdit1->SelAttributes->Style<<fsBold)

{SpeedButton13->Down=true;}

else{SpeedButton13->Down=false;}

if(RichEdit1->SelAttributes->Style==RichEdit1->SelAttributes->Style<<fsUnderline)

{SpeedButton11->Down=true;}

else{SpeedButton11->Down=false;}

if(RichEdit1->SelAttributes->Style==RichEdit1->SelAttributes->Style<<fsItalic)

{SpeedButton12->Down=true;}

else{SpeedButton12->Down=false;}

CSpinEdit1->Value=RichEdit1->SelAttributes->Size;

ComboBox1->ItemIndex = ComboBox1->Items->IndexOf(RichEdit1->SelAttributes->Name) ;

}

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

void __fastcall TForm1::RichEdit1KeyUp(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if(RichEdit1->Paragraph->Numbering==nsNone)

{SpeedButton19->Down=false;}

if(RichEdit1->Paragraph->Numbering==nsBullet)

{SpeedButton19->Down=true;}

switch (RichEdit1->Paragraph->Alignment)

{case taLeftJustify: SpeedButton17->Down=true; break;

case taCenter: SpeedButton18->Down=true; break;

case taRightJustify: SpeedButton15->Down=true; break;}

if(RichEdit1->SelAttributes->Style==RichEdit1->SelAttributes->Style<<fsBold)

{SpeedButton13->Down=true;}

else{SpeedButton13->Down=false;}

if(RichEdit1->SelAttributes->Style==RichEdit1->SelAttributes->Style<<fsUnderline)

{SpeedButton11->Down=true;}

else{SpeedButton11->Down=false;}

if(RichEdit1->SelAttributes->Style==RichEdit1->SelAttributes->Style<<fsItalic)

{SpeedButton12->Down=true;}

else{SpeedButton12->Down=false;}

CSpinEdit1->Value=RichEdit1->SelAttributes->Size;

ComboBox1->ItemIndex = ComboBox1->Items->IndexOf(RichEdit1->SelAttributes->Name) ;

}

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{

RichEdit1->Clear();

}

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

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

Action=caFree;

}

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

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)

{

if(RichEdit1->Modified)

{

int res=Application->MessageBox("Текст документа не сохранен. \n\n" "Сохранить документ в файле\n\n" "(Отмена - продолжение работы)", "Подтвердите завершение работы", MB_YESNOCANCEL+MB_ICONQUESTION);

switch(res)

{

case IDYES: N5Click(Sender); break;

case IDCANCEL: CanClose=false;

}

}

}

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

void __fastcall TForm1::N26Click(TObject *Sender)

{

Application->CreateForm(__classid(TForm2), &Form2);

Form2->Memo1->Lines->LoadFromFile("hlp");

Form2->ShowModal();

Form2->Free();

}

Страницы: 1, 2



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.