Автор работы: Пользователь скрыл имя, 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
СОДЕРЖАНИЕ
Полное наименование разработанной программы: «Текстовый редактор – аналог программы WordPad».
Программа предназначена для создания электронной текстовой документации. Область применения программы очень широка и обусловлена её предназначением – созданием текстовых записей, с возможностью форматирования, сохранения и открытием для чтения.
Задача в виде создания аналога, не требует создание полной копии прототипа, поэтому следует выделить главные особенности редактора WordPad, которые будут реализованы в проекте:
Программа обеспечивает следующую выходную информацию:
Входной информацией для программы являются:
Схема функциональной структуры программы:
Рисунок 1. Схема функциональной структуры
Функциональная структура программы представляет собой набор функций, сгруппированных по типу воздействия на текст в отдельности или файл целиком.
Все функции доступны из главного меню программы или панели инструментов.
Функции по работе с файлами:
Функции по работе с буфером обмена:
Функции по работе со шрифтом и начертанием:
Функции форматирования текста:
Модуль MyMainForm является модулем главного окна программы. Он содержит практически все компоненты и процедуры, которые были использованы в программе:
Так как программой подразумевается выполнение основных команд несколькими способами, были созданы два компонента ActionList, которые объединили команды по работе с файлами (они представлены в меню «Файл» главного меню) и по работе над редактированием текста (команды представленные в меню «Правка»).
Процедуры, прописанные в компонентах ActionList были присвоены соответствующим элементам главного меню и панели инструментов.
Панель инструментов имеет ряд элементов для которых не были прописаны действия в компонентах ActionList. Для обработки событий от этих элементов были написаны соответствующие процедуры.
На форме были использованы 4 компонента диалогов:
Для реализации текстового поля использовался компонент RichEdit, который в отличии от других текстовых компонентов, способен работать с форматированным текстом.
Также были использованы компоненты панелей: инструментальная панель (ToolBar) и панель состояния (StatusBar).
Для отображения иконок в подпунктах главного меню и на кнопках панели инструментов был использован элемент ImageList, в который были занесены соответствующие иконки.
На рисунке 2 представлено главное окно программы
Рисунок 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(
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.
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.
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(
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(
begin
RichEdit.Lines.LoadFromFile(
SetFileName(AFileName);
RichEdit.SetFocus;
RichEdit.Modified := False;
SetModified(False);
end;
procedure TMainForm.FileOpen(Sender: TObject);
begin
CheckFileSave;
if OpenDialog.Execute then
begin
PerformFileOpen(OpenDialog.
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(
RichEdit.Modified := False;
SetModified(False);
end;
end;
procedure TMainForm.FileSaveAs(Sender: TObject);
begin
if SaveDialog.Execute then
begin
if FileExists(SaveDialog.
if MessageDlg(Format(sOverWrite, [SaveDialog.FileName]),
mtConfirmation, mbYesNoCancel, 0) <> idYes then Exit;
RichEdit.Lines.SaveToFile(
SetFileName(SaveDialog.
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(
if FontDialog1.Execute then
CurrText.Assign(FontDialog1.
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(
begin
if FUpdating then Exit;
if BoldButton.Down then
CurrText.Style := CurrText.Style + [fsBold]
else
CurrText.Style := CurrText.Style - [fsBold];
end;
procedure TMainForm.ItalicButtonClick(
begin
if FUpdating then Exit;
if ItalicButton.Down then
CurrText.Style := CurrText.Style + [fsItalic]
else
CurrText.Style := CurrText.Style - [fsItalic];
end;
procedure TMainForm.FontSizeChange(
begin
if FUpdating then Exit;
CurrText.Size := StrToInt(FontSize.Text);
end;
procedure TMainForm.AlignButtonClick(
begin
if FUpdating then Exit;
RichEdit.Paragraph.Alignment
:= TAlignment(TControl(Sender).
end;
procedure TMainForm.FontNameChange(
begin
if FUpdating then Exit;
CurrText.Name
:= FontName.Items[FontName.
end;
procedure TMainForm.
begin
if FUpdating then Exit;
if UnderlineButton.Down then
CurrText.Style := CurrText.Style + [fsUnderline]
else
CurrText.Style := CurrText.Style - [fsUnderline];
end;
procedure TMainForm.BulletsButtonClick(
begin
if FUpdating then Exit;
RichEdit.Paragraph.Numbering
:= TNumberingStyle(BulletsButton.
end;
procedure TMainForm.FormCloseQuery(
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(
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(
var Handled: Boolean);
begin
EditCutCmd.Enabled := RichEdit.SelLength > 0;
EditCopyCmd.Enabled := EditCutCmd.Enabled;
Информация о работе Разработка текстового редактора “MyEdit” – ограмманалога пры “WordPad”