Разработка текстового редактора “MyEdit” – ограмманалога пры “WordPad”

Автор работы: Пользователь скрыл имя, 01 Мая 2014 в 15:29, курсовая работа

Краткое описание

Программа предназначена для создания электронной текстовой документации. Область применения программы очень широка и обусловлена её предназначением – созданием текстовых записей, с возможностью форматирования, сохранения и открытием для чтения.

Содержание

1 ОБЩИЕ ПОЛОЖЕНИЯ 2
1.1 Наименование проектируемой АС 2
1.2 Цели и назначение АС 2
2 ОПИСАНИЕ ПОСТАНОВКИ ЗАДАЧИ (КОМПЛЕКСА ЗАДАЧ) 3
3 СХЕМА ФУНКЦИОНАЛЬНОЙ СТРУКТУРЫ И ЕЕ ХАРАКТЕРИСТИКА 4
4 ПРАКТИЧЕСКАЯ ЧАСТЬ 6
4.1 Форма приложения 6
4.2 Текст программы 7
ЗАКЛЮЧЕНИЕ 16
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 17

Вложенные файлы: 1 файл

Курсовой.doc

— 120.00 Кб (Скачать файл)

 

СОДЕРЖАНИЕ

 

 

1 ОБЩИЕ ПОЛОЖЕНИЯ

 

1.1 Наименование проектируемой АС

 

Полное наименование разработанной программы: «Текстовый редактор – аналог программы WordPad».

 

 

 

1.2 Цели и назначение АС

 

Программа предназначена для создания электронной текстовой документации. Область применения программы очень широка и обусловлена её предназначением – созданием текстовых записей, с возможностью форматирования, сохранения и открытием для чтения.

 

 

 

 

2 ОПИСАНИЕ ПОСТАНОВКИ ЗАДАЧИ (КОМПЛЕКСА  ЗАДАЧ)

 

Задача в виде создания аналога, не требует создание полной копии прототипа, поэтому следует выделить главные особенности редактора WordPad, которые будут реализованы в проекте:

    • интерфейс Windows приложения;
    • главное меню, и дублирующее его панель инструментов;
    • возможность работы с файлами *.RTF и *.TXT;
    • возможность форматирования текста, с использованием различных шрифтов, начертаний и выравниванием;
    • возможность применения к тексту команд «вырезать», «копировать», «вставить»;
    • возможность отмены последнего действия;
    • возможность печати текста.

 

Программа обеспечивает следующую выходную информацию:

  1. просмотр открытых текстовых файлов;
  2. печать текстовых файлов;
  3. сохранение текстового файла.

 

Входной информацией для программы являются:

  1. набранный текст пользователем;
  2. открываемые файлы пользователем.

 

3 СХЕМА ФУНКЦИОНАЛЬНОЙ СТРУКТУРЫ И ЕЕ ХАРАКТЕРИСТИКА

 

Схема функциональной структуры программы:

Рисунок 1. Схема функциональной структуры

 

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

Все функции доступны из главного меню программы или панели инструментов.

Функции по работе с файлами:

    • создать;
    • открыть;
    • сохранить;
    • печать.

Функции по работе с буфером обмена:

    • вырезать;
    • копировать;
    • вставить;
    • отмена последнего действия.

Функции по работе со шрифтом и начертанием:

    • тип шрифта;
    • размер шрифта;
    • начертание («Жирный», «Курсив», «Подчеркнутый»).

Функции форматирования текста:

    • выравнивание (по левому краю, по центру, по правому краю);
    • установка маркеров.

 

 

4 ПРАКТИЧЕСКАЯ ЧАСТЬ

 

4.1 Форма приложения

 

Модуль MyMainForm является модулем главного окна программы. Он содержит практически все компоненты и процедуры, которые были использованы в программе:

Так как программой подразумевается выполнение основных команд несколькими способами, были созданы два компонента ActionList, которые объединили команды по работе с файлами (они представлены в меню «Файл» главного меню) и по работе над редактированием текста (команды представленные в меню «Правка»).

Процедуры, прописанные в компонентах ActionList были присвоены соответствующим элементам главного меню и панели инструментов.

Панель инструментов имеет ряд элементов для которых не были прописаны действия в компонентах ActionList. Для обработки событий от этих элементов были написаны соответствующие процедуры.

На форме были использованы 4 компонента диалогов:

      • открытие документа;
      • сохранение документа;
      • настройка принтера (печать);
      • диалог выбора шрифта и начертания текста.

Для реализации текстового поля использовался компонент RichEdit, который в отличии от других текстовых компонентов, способен работать с форматированным текстом.

Также были использованы компоненты панелей: инструментальная панель (ToolBar) и панель состояния (StatusBar).

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

На рисунке 2 представлено главное окно программы

 

 

 

 

Рисунок 2. Главное окно программы

4.2 Текст программы

 

unit MyMainForm;

 

interface

 

uses

  SysUtils, Windows, Messages, Classes, Graphics, Controls,

  Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Menus, ComCtrls, ClipBrd,

  ToolWin, ActnList, ImgList;

 

type

  TMainForm = class(TForm)

    MainMenu: TMainMenu;

    FileNewItem: TMenuItem;

    FileOpenItem: TMenuItem;

    FileSaveItem: TMenuItem;

    FileSaveAsItem: TMenuItem;

    FilePrintItem: TMenuItem;

    FileExitItem: TMenuItem;

    EditUndoItem: TMenuItem;

    EditCutItem: TMenuItem;

    EditCopyItem: TMenuItem;

    EditPasteItem: TMenuItem;

    HelpAboutItem: TMenuItem;

    OpenDialog: TOpenDialog;

    SaveDialog: TSaveDialog;

    PrintDialog: TPrintDialog;

    FontDialog1: TFontDialog;

    N5: TMenuItem;

    miEditFont: TMenuItem;

    RichEdit: TRichEdit;

    StatusBar: TStatusBar;

    StandardToolBar: TToolBar;

    OpenButton: TToolButton;

    SaveButton: TToolButton;

    PrintButton: TToolButton;

    ToolButton5: TToolButton;

    UndoButton: TToolButton;

    CutButton: TToolButton;

    CopyButton: TToolButton;

    PasteButton: TToolButton;

    ToolButton10: TToolButton;

    FontName: TComboBox;

    FontSize: TEdit;

    ToolButton11: TToolButton;

    UpDown1: TUpDown;

    BoldButton: TToolButton;

    ItalicButton: TToolButton;

    UnderlineButton: TToolButton;

    ToolButton16: TToolButton;

    LeftAlign: TToolButton;

    CenterAlign: TToolButton;

    RightAlign: TToolButton;

    ToolButton20: TToolButton;

    BulletsButton: TToolButton;

    ToolbarImages: TImageList;

    ActionList1: TActionList;

    FileNewCmd: TAction;

    FileOpenCmd: TAction;

    FileSaveCmd: TAction;

    FilePrintCmd: TAction;

    FileExitCmd: TAction;

    ToolButton1: TToolButton;

    ToolButton2: TToolButton;

    EditCutCmd: TAction;

    EditCopyCmd: TAction;

    EditPasteCmd: TAction;

    EditUndoCmd: TAction;

    EditFontCmd: TAction;

    FileSaveAsCmd: TAction;

 

    procedure SelectionChange(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure ShowHint(Sender: TObject);

    procedure FileNew(Sender: TObject);

    procedure FileOpen(Sender: TObject);

    procedure FileSave(Sender: TObject);

    procedure FileSaveAs(Sender: TObject);

    procedure FilePrint(Sender: TObject);

    procedure FileExit(Sender: TObject);

    procedure EditUndo(Sender: TObject);

    procedure EditCut(Sender: TObject);

    procedure EditCopy(Sender: TObject);

    procedure EditPaste(Sender: TObject);

    procedure HelpAbout(Sender: TObject);

    procedure SelectFont(Sender: TObject);

    procedure FormResize(Sender: TObject);

    procedure FormPaint(Sender: TObject);

    procedure BoldButtonClick(Sender: TObject);

    procedure ItalicButtonClick(Sender: TObject);

    procedure FontSizeChange(Sender: TObject);

    procedure AlignButtonClick(Sender: TObject);

    procedure FontNameChange(Sender: TObject);

    procedure UnderlineButtonClick(Sender: TObject);

    procedure BulletsButtonClick(Sender: TObject);

    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    procedure FormShow(Sender: TObject);

    procedure RichEditChange(Sender: TObject);

    procedure ActionList2Update(Action: TBasicAction;

      var Handled: Boolean);

  private

    FFileName: string;

    FUpdating: Boolean;

    function CurrText: TTextAttributes;

    procedure GetFontNames;

    procedure SetFileName(const FileName: String);

    procedure CheckFileSave;

    procedure SetEditRect;

    procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;

    procedure PerformFileOpen(const AFileName: string);

    procedure SetModified(Value: Boolean);

  end;

 

var

  MainForm: TMainForm;

 

implementation

 

uses AboutMyEdit, RichEdit, ShellAPI;

 

resourcestring

  sSaveChanges = 'Сохранить изменения в файле "%s"?';

  sOverWrite = 'Заменить файл "%s"';

  sUntitled = 'Документ';

  sModified = 'Изменен';

 

const

  GutterWid = 6;

 

{$R *.dfm}

 

procedure TMainForm.SelectionChange(Sender: TObject);

begin

  with RichEdit.Paragraph do

  try

    FUpdating := True;

    BoldButton.Down := fsBold in RichEdit.SelAttributes.Style;

    ItalicButton.Down := fsItalic in RichEdit.SelAttributes.Style;

    UnderlineButton.Down := fsUnderline in RichEdit.SelAttributes.Style;

    BulletsButton.Down := Boolean(Numbering);

    FontSize.Text := IntToStr(RichEdit.SelAttributes.Size);

    FontName.Text := RichEdit.SelAttributes.Name;

    case Ord(Alignment) of

      0: LeftAlign.Down := True;

      1: RightAlign.Down := True;

      2: CenterAlign.Down := True;

    end;

  finally

    FUpdating := False;

  end;

end;

 

function TMainForm.CurrText: TTextAttributes;

begin

  if RichEdit.SelLength > 0 then Result := RichEdit.SelAttributes

  else Result := RichEdit.DefAttributes;

end;

 

function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric;

  FontType: Integer; Data: Pointer): Integer; stdcall;

begin

  TStrings(Data).Add(LogFont.lfFaceName);

  Result := 1;

end;

 

procedure TMainForm.GetFontNames;

var

  DC: HDC;

begin

  DC := GetDC(0);

  EnumFonts(DC, nil, @EnumFontsProc, Pointer(FontName.Items));

  ReleaseDC(0, DC);

  FontName.Sorted := True;

end;

 

procedure TMainForm.SetFileName(const FileName: String);

begin

  FFileName := FileName;

  Caption := Format('%s - %s', [ExtractFileName(FileName), Application.Title]);

end;

 

procedure TMainForm.CheckFileSave;

var

  SaveResp: Integer;

begin

  if not RichEdit.Modified then Exit;

  SaveResp := MessageDlg(Format(sSaveChanges, [FFileName]),

    mtConfirmation, mbYesNoCancel, 0);

  case SaveResp of

    idYes: FileSave(Self);

    idNo: ;

    idCancel: Abort;

  end;

end;

 

 

procedure TMainForm.SetEditRect;

var

  R: TRect;

begin

  with RichEdit do

  begin

    R := Rect(GutterWid, 0, ClientWidth-GutterWid, ClientHeight);

    SendMessage(Handle, EM_SETRECT, 0, Longint(@R));

  end;

end;

 

 

procedure TMainForm.FormCreate(Sender: TObject);

begin

  Application.OnHint := ShowHint;

  OpenDialog.InitialDir := ExtractFilePath(ParamStr(0));

  SaveDialog.InitialDir := OpenDialog.InitialDir;

  SetFileName(sUntitled);

  GetFontNames;

  SelectionChange(Self);

 

  CurrText.Name := DefFontData.Name;

  CurrText.Size := -MulDiv(DefFontData.Height, 72, Screen.PixelsPerInch);

end;

 

procedure TMainForm.ShowHint(Sender: TObject);

begin

  if Length(Application.Hint) > 0 then

  begin

    StatusBar.SimplePanel := True;

    StatusBar.SimpleText := Application.Hint;

  end

  else StatusBar.SimplePanel := False;

end;

 

procedure TMainForm.FileNew(Sender: TObject);

begin

  SetFileName(sUntitled);

  RichEdit.Lines.Clear;

  RichEdit.Modified := False;

  SetModified(False);

end;

 

procedure TMainForm.PerformFileOpen(const AFileName: string);

begin

  RichEdit.Lines.LoadFromFile(AFileName);

  SetFileName(AFileName);

  RichEdit.SetFocus;

  RichEdit.Modified := False;

  SetModified(False);

end;

 

procedure TMainForm.FileOpen(Sender: TObject);

begin

  CheckFileSave;

  if OpenDialog.Execute then

  begin

    PerformFileOpen(OpenDialog.FileName);

    RichEdit.ReadOnly := ofReadOnly in OpenDialog.Options;

  end;

end;

 

procedure TMainForm.FileSave(Sender: TObject);

begin

  if FFileName = sUntitled then

    FileSaveAs(Sender)

  else

  begin

    RichEdit.Lines.SaveToFile(FFileName);

    RichEdit.Modified := False;

    SetModified(False);

  end;

end;

 

procedure TMainForm.FileSaveAs(Sender: TObject);

begin

  if SaveDialog.Execute then

  begin

    if FileExists(SaveDialog.FileName) then

      if MessageDlg(Format(sOverWrite, [SaveDialog.FileName]),

        mtConfirmation, mbYesNoCancel, 0) <> idYes then Exit;

    RichEdit.Lines.SaveToFile(SaveDialog.FileName);

    SetFileName(SaveDialog.FileName);

    RichEdit.Modified := False;

    SetModified(False);

  end;

end;

 

procedure TMainForm.FilePrint(Sender: TObject);

begin

  if PrintDialog.Execute then

    RichEdit.Print(FFileName);

end;

 

procedure TMainForm.FileExit(Sender: TObject);

begin

  Close;

end;

 

procedure TMainForm.EditUndo(Sender: TObject);

begin

  with RichEdit do

    if HandleAllocated then SendMessage(Handle, EM_UNDO, 0, 0);

end;

 

procedure TMainForm.EditCut(Sender: TObject);

begin

  RichEdit.CutToClipboard;

end;

 

procedure TMainForm.EditCopy(Sender: TObject);

begin

  RichEdit.CopyToClipboard;

end;

 

procedure TMainForm.EditPaste(Sender: TObject);

begin

  RichEdit.PasteFromClipboard;

end;

 

procedure TMainForm.HelpAbout(Sender: TObject);

begin

  with TAbout.Create(Self) do

  try

    ShowModal;

  finally

    Free;

  end;

end;

 

procedure TMainForm.SelectFont(Sender: TObject);

begin

  FontDialog1.Font.Assign(RichEdit.SelAttributes);

  if FontDialog1.Execute then

    CurrText.Assign(FontDialog1.Font);

  SelectionChange(Self);

  RichEdit.SetFocus;

end;

 

procedure TMainForm.FormResize(Sender: TObject);

begin

  SetEditRect;

  SelectionChange(Sender);

end;

 

procedure TMainForm.FormPaint(Sender: TObject);

begin

  SetEditRect;

end;

 

procedure TMainForm.BoldButtonClick(Sender: TObject);

begin

  if FUpdating then Exit;

  if BoldButton.Down then

    CurrText.Style := CurrText.Style + [fsBold]

  else

    CurrText.Style := CurrText.Style - [fsBold];

end;

 

procedure TMainForm.ItalicButtonClick(Sender: TObject);

begin

  if FUpdating then Exit;

  if ItalicButton.Down then

    CurrText.Style := CurrText.Style + [fsItalic]

  else

    CurrText.Style := CurrText.Style - [fsItalic];

end;

 

procedure TMainForm.FontSizeChange(Sender: TObject);

begin

  if FUpdating then Exit;

  CurrText.Size := StrToInt(FontSize.Text);

end;

 

procedure TMainForm.AlignButtonClick(Sender: TObject);

begin

  if FUpdating then Exit;

  RichEdit.Paragraph.Alignment := TAlignment(TControl(Sender).Tag);

end;

 

procedure TMainForm.FontNameChange(Sender: TObject);

begin

  if FUpdating then Exit;

  CurrText.Name := FontName.Items[FontName.ItemIndex];

end;

 

procedure TMainForm.UnderlineButtonClick(Sender: TObject);

begin

  if FUpdating then Exit;

  if UnderlineButton.Down then

    CurrText.Style := CurrText.Style + [fsUnderline]

  else

    CurrText.Style := CurrText.Style - [fsUnderline];

end;

 

procedure TMainForm.BulletsButtonClick(Sender: TObject);

begin

  if FUpdating then Exit;

  RichEdit.Paragraph.Numbering := TNumberingStyle(BulletsButton.Down);

end;

 

procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

  try

    CheckFileSave;

  except

    CanClose := False;

  end;

end;

 

 

procedure TMainForm.FormShow(Sender: TObject);

begin

  DragAcceptFiles(Handle, True);

  RichEditChange(nil);

  RichEdit.SetFocus;

  if (ParamCount > 0) and FileExists(ParamStr(1)) then

    PerformFileOpen(ParamStr(1));

end;

 

procedure TMainForm.WMDropFiles(var Msg: TWMDropFiles);

var

  CFileName: array[0..MAX_PATH] of Char;

begin

  try

    if DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH) > 0 then

    begin

      CheckFileSave;

      PerformFileOpen(CFileName);

      Msg.Result := 0;

    end;

  finally

    DragFinish(Msg.Drop);

  end;

end;

 

procedure TMainForm.RichEditChange(Sender: TObject);

begin

  SetModified(RichEdit.Modified);

end;

 

procedure TMainForm.SetModified(Value: Boolean);

begin

  if Value then StatusBar.Panels[0].Text := sModified

  else StatusBar.Panels[0].Text := '';

end;

 

procedure TMainForm.ActionList2Update(Action: TBasicAction;

  var Handled: Boolean);

begin

  EditCutCmd.Enabled := RichEdit.SelLength > 0;

  EditCopyCmd.Enabled := EditCutCmd.Enabled;

Информация о работе Разработка текстового редактора “MyEdit” – ограмманалога пры “WordPad”