Разработка текстового редактора 2

Содержание



	1 Постановка задачи	3

	2 Этапы реализации	4

	Список использованных источников	5

	Приложение А. Руководство пользователя	6

	Приложение Б. Руководство программиста	7

	Приложение В. Листинг программы	8












Постановка задачи

	Разработать простейший текстовый редактор. Редактор должен иметь системное меню, состоящее из следующих пунктов: Файл, Настройки, Информация.

	Пункт «Файл» содержит подпункты: Новый, Открыть, Сохранить, Сохранить как, Выход.

	Пункт «Настройки» содержит подпункты: Шрифт, Цвет: текста, фона; Панель горячих клавиш.

	Пункт «Информация» содержит подпункты: О программе.

	Редактор должен обладать горячими клавишами, осуществляющими дублирование основных функций редактора. При их реализации использовать ранее написанный программный код. При сохранении информации также сохраняются пользовательские настройки. При открытии ранее сохраненного файла пользовательские настройки восстанавливаются. Редактор должен иметь функцию ввода структурированного текста, которые вводятся в отдельное поле. Также имеется возможность выбрать необходимую информацию из предлагаемого списка. Если информация пользователя введена и выбрано что-то из списка, то данная информация переносится в конец текста при нажатии на кнопку «перенос». Если указан один из параметров, то перенос осуществляется в то место где стоит курсор. Редактор должен обладать системой логического контроля за действиями пользователя. При необходимости выдавать необходимую информацию на экран. Предусмотреть все логические ветви.

	

	

	

	

	

	

	

	

	

2. Этапы реализации	



		Создали новый проект.

		Поместили на форму компоненты Memo, MainMenu, Panel.

		Создали главное меню и пункты в нем. В каждом пункте меню описали событие OnClick.

		В панели горячих клавиш Panel создали кнопки Speedbutton.






Приложение А

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

Редактор имеет главное меню, в котором пользователь может выбрать нужное действие. Также ряды кнопок расположены на панели горячих клавиш. Это кнопки меню «Файл», «Правка», «Настройки». Эти панели можно убрать, нажав правой кнопкой мыши по панели и выбрав ненужную панель. Также можно убрать всю панель во вкладке «Настройки», выбрав пункт «Панель горячих клавиш». В настройках пользователь может изменить шрифт текста, цвет текста, цвет фона, выравнивание текста. Выбрав пункт «Структурированный текст» пользователь может вводить разного рода текст и вставлять этот текст в нужном месте в нужное время.





                                       Рисунок 1 – Текстовый редактор









Приложение Б

Руководство программиста



Использованные компоненты в unit1 form1:

- Memo. Главным компонентом в данной программе является компонент Memo типа TMemo. Он используется для ввода и отображения многострочных текстов. Компонент визуальный. 

- MainMenu. Позволяет конструировать и создавать полосу главного меню формы и выпадающие меню. Компонент невизуальный.

		- Panel. Используется для размещения компонентов на панели. Компонент визуальный.

		- Speedbutton. Инструментальная панель для быстрого доступа к часто используемым функциям приложения. Компонент визуальный. Speedbutton используются для реализации на панели горячих клавиш.

		- OpenDialog, SaveDialog, FontDialog, ColorDialog из вкладки Dialogs предназначены для окна диалога открытия, сохранения, шрифта и цвета. 

		Использованные компоненты в unit2 form2:

		     - MaskEdit - Этот специальный редактор, из вкладки Additional допускает лишь            

		     ввод текста, соответствующего заданному программистом шаблону.

		Button – Кнопка.




Приложение В

Листинг программы

	

	

	unit Unit1;

	

	interface

	

	uses

	  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

	  Dialogs, StdCtrls, Menus, Buttons, ComCtrls,IniFiles, ToolWin, ActnMan,

	  ActnCtrls, ExtCtrls, ImgList, Mask;

	

	type

	  TForm1 = class(TForm)

	    MainMenu1: TMainMenu;

	    N1: TMenuItem;

	    N2: TMenuItem;

	    N3: TMenuItem;

	    N4: TMenuItem;

	    N5: TMenuItem;

	    N6: TMenuItem;

	    N7: TMenuItem;

	    N8: TMenuItem;

	    N9: TMenuItem;

	    N10: TMenuItem;

	    N11: TMenuItem;

	    N12: TMenuItem;

	    Memo1: TMemo;

	    OpenDialog1: TOpenDialog;

	    SaveDialog1: TSaveDialog;

	    FontDialog1: TFontDialog;

	    ColorDialog1: TColorDialog;

	    N13: TMenuItem;

	    ImageList1: TImageList;

	    N25: TMenuItem;

	    N26: TMenuItem;

	    Panel1: TPanel;

	    SpeedButton1: TSpeedButton;

	    SpeedButton2: TSpeedButton;

	    SpeedButton3: TSpeedButton;

	    SpeedButton4: TSpeedButton;

	    N14: TMenuItem;

	    SpeedButton5: TSpeedButton;

	    procedure N3Click(Sender: TObject);

	    procedure N5Click(Sender: TObject);

	    procedure N4Click(Sender: TObject);

	    procedure N2Click(Sender: TObject);

	    procedure N6Click(Sender: TObject);

	    procedure N8Click(Sender: TObject);

	    procedure N11Click(Sender: TObject);

	    procedure N10Click(Sender: TObject);

	    procedure FormResize(Sender: TObject);

	    procedure ToolButton1Click(Sender: TObject);

	    procedure ToolButton2Click(Sender: TObject);

	    procedure ToolButton3Click(Sender: TObject);

	    procedure ToolButton4Click(Sender: TObject);

	    procedure ToolButton5Click(Sender: TObject);

	    procedure N21Click(Sender: TObject);

	    procedure N22Click(Sender: TObject);

	    procedure N23Click(Sender: TObject);

	    procedure N24Click(Sender: TObject);

	    procedure ToolButton6Click(Sender: TObject);

	    procedure ToolButton7Click(Sender: TObject);

	    procedure ToolButton8Click(Sender: TObject);

	    procedure ToolButton9Click(Sender: TObject);

	    procedure ToolButton10Click(Sender: TObject);

	    procedure N20Click(Sender: TObject);

	    procedure ToolButton12Click(Sender: TObject);

	    procedure ToolButton13Click(Sender: TObject);

	    procedure ToolButton14Click(Sender: TObject);

	    procedure ToolButton16Click(Sender: TObject);

	    procedure ToolButton17Click(Sender: TObject);

	    procedure ToolButton11Click(Sender: TObject);

	    procedure N13Click(Sender: TObject);

	    procedure N26Click(Sender: TObject);

	    procedure N27Click(Sender: TObject);

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

	    procedure N14Click(Sender: TObject);

	    procedure SpeedButton1Click(Sender: TObject);

	    procedure SpeedButton2Click(Sender: TObject);

	    procedure SpeedButton3Click(Sender: TObject);

	    procedure SpeedButton4Click(Sender: TObject);

	    procedure SpeedButton5Click(Sender: TObject);

	

	  private

	    { Private declarations }

	  public

	    { Public declarations }

	  end;

	

	var

	  Form1: TForm1;

	  IniFile:TIniFile;

	implementation

	

	uses Unit2, Unit3;

	

	

	{$R *.dfm}

	

	procedure TForm1.N3Click(Sender: TObject);

	var a,i:integer;

	    s,s2:string;

	begin

	 if OpenDialog1.FilterIndex=1 then begin

	    OpenDialog1.DefaultExt:='txt';

	  end

	  else if OpenDialog1.FilterIndex=2 then begin

	    OpenDialog1.DefaultExt:='doc';

	    end;

	if form1.Memo1.Modified=true then

	begin

	a:=Application.MessageBox('Сохранить изменения в документе','',3);

	if a=6 then

	N4Click(Sender) else

	if a=7 then

	If OpenDialog1.Execute then

	begin

	form1.Memo1.Lines.Clear;

	Form1.Memo1.Lines.LoadFromFile(Form1.OpenDialog1.FileName);

	Form1.Caption:= ExtractFileName(Form1.OpenDialog1.FileName);

	form1.Memo1.Modified:=false;

	IniFile:=TInifile.Create(ExtractFilePath(OpenDialog1.FileName)+ExtractFileName(Form1.OpenDialog1.FileName));

	if Inifile.SectionExists('Main') then

	begin

	Form1.Memo1.Font.Color:=Inifile.ReadInteger('Main','TxtColor',0);

	Form1.Memo1.Font.Height:=Inifile.ReadInteger('Main','Height',Height);

	Form1.Memo1.Font.Name:=Inifile.ReadString('Main','Name',Name);

	Form1.Memo1.Font.Size:=Inifile.ReadInteger('Main','Size',1);

	Form1.Memo1.color:=IniFile.ReadInteger('Main','FonColor',0);

	for i:=0 to 5 do

	Memo1.Lines.Delete(Memo1.Lines.Count-1);

	end

	end

	end

	else

	If OpenDialog1.Execute then

	begin

	form1.Memo1.Lines.Clear;

	Form1.Memo1.Lines.LoadFromFile(Form1.OpenDialog1.FileName);

	Form1.Caption:= ExtractFileName(Form1.OpenDialog1.FileName);

	form1.Memo1.Modified:=false;

	IniFile:=TInifile.Create(ExtractFilePath(OpenDialog1.FileName)+ExtractFileName(Form1.OpenDialog1.FileName));

	if Inifile.SectionExists('Main') then

	begin

	

	Form1.Memo1.Font.Color:=Inifile.ReadInteger('Main','Txtcolor',0);

	Form1.Memo1.Font.Height:=Inifile.ReadInteger('Main','Height',Height);

	Form1.Memo1.Font.Name:=Inifile.ReadString('Main','Name',Name);

	Form1.Memo1.Font.Size:=Inifile.ReadInteger('Main','Size',1);

	Form1.Memo1.color:=Inifile.ReadInteger('Main','FonColor',0);

	for i:=0 to 5 do

	Memo1.Lines.Delete(Memo1.Lines.Count-1);

	end;

	Memo1.Modified := false;

	end;

	

	

	

	

	end;

	

	procedure TForm1.N5Click(Sender: TObject);

	begin

	if SaveDialog1.FilterIndex=1 then begin

	    SaveDialog1.DefaultExt:='txt';

	  end

	  else if SaveDialog1.FilterIndex=2 then begin

	    SaveDialog1.DefaultExt:='doc';

	    end;

	

	If SaveDialog1.Execute  then

	begin

	form1.Memo1.Modified:=false;

	form1.Memo1.Lines.SaveToFile(Form1.SaveDialog1.Filename );

	Form1.Caption:=ExtractFileName(Form1.SaveDialog1.FileName);

	

	IniFile:=TInifile.Create(ExtractFilePath(SaveDialog1.FileName)+ExtractFileName(Form1.SaveDialog1.FileName));

	with IniFile do begin

	WriteInteger('Main','TxtColor',Form1.Memo1.Font.Color);

	WriteInteger('Main','Height',Form1.Memo1.Font.Height);

	WriteString('Main','Name',Form1.Memo1.Font.Name);

	WriteInteger('Main','Size',Form1.Memo1.Font.Size);

	end;

	with IniFile  do

	WriteInteger('Main','FonColor',Form1.Memo1.Color);

	end;

	end;

	

	procedure TForm1.N4Click(Sender: TObject);

	begin

	If form1.SaveDialog1.FileName <> '' then

	begin

	form1.Memo1.Lines.SaveToFile(Form1.SaveDialog1.FileName);

	Form1.Caption:=ExtractFileName(Form1.SaveDialog1.FileName);

	form1.Memo1.Modified:=false;

	if Form1.SaveDialog1.FileName<>'' then

	IniFile:=TInifile.Create(ExtractFilePath(SaveDialog1.FileName)+ExtractFileName(Form1.SaveDialog1.FileName))

	else IniFile:=TInifile.Create(ExtractFilePath(OpenDialog1.FileName)+ExtractFileName(Form1.OpenDialog1.FileName));

	with IniFile, Form1.Memo1.Font do begin

	WriteInteger('Main','TxtColor',Form1.Memo1.Font.Color);

	WriteInteger('Main','Height',Height);

	WriteString('Main','Name',Name);

	WriteInteger('Main','Size',Size);

	end;

	with IniFile  do

	WriteInteger('Main','FonColor',Form1.Memo1.Color);

	end

	else

	if form1.OpenDialog1.FileName<>'' then

	begin

	form1.Memo1.Lines.SaveToFile(Form1.OpenDialog1.FileName);

	Form1.Caption:=ExtractFileName(Form1.OpenDialog1.FileName);

	form1.Memo1.Modified:=false;

	IniFile:=TInifile.Create(ExtractFilePath(OpenDialog1.FileName)+ExtractFileName(Form1.OpenDialog1.FileName));

	with IniFile, Form1.Memo1.Font do begin

	WriteInteger('Main','TxtColor',Form1.Memo1.Font.Color);

	WriteInteger('Main','Height',Height);

	WriteString('Main','Name',Name);

	WriteInteger('Main','Size',Size);

	end;

	 with IniFile  do

	WriteInteger('Main','FonColor',Form1.Memo1.Color);

	end

	else

	N5Click(Sender);

	end;

	

	procedure TForm1.N2Click(Sender: TObject);

	var a:integer;

	begin

	if form1.Memo1.Modified=true then

	begin

	a:=Application.MessageBox('Сохранить изменения в документе','',3);

	if a=6 then

	begin

	N4Click(Sender);

	Form1.Memo1.Lines.Clear;

	Form1.SaveDialog1.FileName:='';

	Form1.OpenDialog1.FileName:='';

	Form1.Caption:='Безымянный';

	end

	else

	if a=7 then

	begin

	Form1.Memo1.Lines.Clear;

	Form1.SaveDialog1.FileName:='';

	Form1.OpenDialog1.FileName:='';

	Form1.Caption:='Безымянный';

	end

	end

	else

	begin

	Form1.Memo1.Lines.Clear;

	Form1.SaveDialog1.FileName:='';

	Form1.OpenDialog1.FileName:='';

	Form1.Caption:='Безымянный';

	end

	end;

	

	procedure TForm1.N6Click(Sender: TObject);

	var a:integer;

	begin

	if Form1.Memo1.Modified=true then

	begin

	a:=Application.MessageBox('Сохранить изменения в документе','',3);

	if a=6 then

	N4Click(Sender)

	else if a=7 then

	Form1.Close;

	end

	else Form1.Close;

	end;

	

	procedure TForm1.N8Click(Sender: TObject);

	begin

	if Form1.FontDialog1.Execute then

	Form1.Memo1.Font:=Form1.FontDialog1.Font;

	end;

	

	procedure TForm1.SpeedButton1Click(Sender: TObject);

	begin

	N2Click(sender);

	end;

	

	procedure TForm1.SpeedButton2Click(Sender: TObject);

	begin

	N3Click(Sender);

	end;

	

	procedure TForm1.SpeedButton3Click(Sender: TObject);

	begin

	N4Click(Sender);

	end;

	

	procedure TForm1.SpeedButton4Click(Sender: TObject);

	begin

	N5Click(Sender);

	end;

	

	procedure TForm1.SpeedButton5Click(Sender: TObject);

	begin

	N6Click(Sender);

	end;

	

	procedure TForm1.N11Click(Sender: TObject);

	begin

	If Form1.ColorDialog1.Execute then

	Form1.Memo1.Color:=Form1.ColorDialog1.Color;

	end;

	

	

	

	procedure TForm1.N10Click(Sender: TObject);

	begin

	If Form1.ColorDialog1.Execute then

	Form1.Memo1.Font.Color:=Form1.ColorDialog1.Color;

	end;

	

	

	procedure TForm1.FormResize(Sender: TObject);

	begin

	Memo1.Height:=Form1.Height-110;

	Memo1.Width:=Form1.Width;

	end;

	

	

	procedure TForm1.ToolButton1Click(Sender: TObject);

	begin

	N2Click(Sender);

	end;

	

	procedure TForm1.ToolButton2Click(Sender: TObject);

	begin

	N3Click(Sender);

	end;

	

	procedure TForm1.ToolButton3Click(Sender: TObject);

	begin

	N4Click(Sender);

	end;

	

	procedure TForm1.ToolButton4Click(Sender: TObject);

	begin

	N5Click(Sender);

	end;

	

	procedure TForm1.ToolButton5Click(Sender: TObject);

	begin

	N6Click(Sender);

	end;

	

	procedure TForm1.N21Click(Sender: TObject);

	begin

	Memo1.CutToClipboard;

	end;

	

	procedure TForm1.N22Click(Sender: TObject);

	begin

	Memo1.CopyToClipboard;

	end;

	procedure TForm1.N23Click(Sender: TObject);

	begin

	Memo1.PasteFromClipboard;

	end;

	procedure TForm1.N24Click(Sender: TObject);

	begin

	Memo1.ClearSelection;

	end;

	

	procedure TForm1.ToolButton6Click(Sender: TObject);

	begin

	N20Click(Sender);

	end;

	

	procedure TForm1.ToolButton7Click(Sender: TObject);

	begin

	N21Click(Sender);

	end;

	

	procedure TForm1.ToolButton8Click(Sender: TObject);

	begin

	N22Click(Sender);

	end;

	

	procedure TForm1.ToolButton9Click(Sender: TObject);

	begin

	N23Click(Sender);

	end;

	

	procedure TForm1.ToolButton10Click(Sender: TObject);

	begin

	N24Click(Sender);

	end;

	

	procedure TForm1.N20Click(Sender: TObject);

	begin

	Memo1.SelectAll

	end;

	

	

	

	procedure TForm1.ToolButton12Click(Sender: TObject);

	begin

	Form1.Memo1.Alignment:=taleftJustify

	end;

	

	procedure TForm1.ToolButton13Click(Sender: TObject);

	begin

	Form1.Memo1.Alignment:=taCenter;

	end;

	

	procedure TForm1.ToolButton14Click(Sender: TObject);

	begin

	Form1.Memo1.Alignment:=taRightJustify;

	end;

	

	procedure TForm1.ToolButton16Click(Sender: TObject);

	begin

	N10Click(Sender);

	end;

	

	procedure TForm1.ToolButton17Click(Sender: TObject);

	begin

	N11Click(Sender);

	end;

	

	procedure TForm1.ToolButton11Click(Sender: TObject);

	begin

	with Memo1 do

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

	end;

	

	

	procedure TForm1.N13Click(Sender: TObject);

	begin

	Form1.N13.Tag:=Form1.N13.Tag+1;

	if (Form1.N13.Tag mod 2)<>0 then

	panel1.Visible:=false

	else panel1.Visible:=true;

	end;

	

	procedure TForm1.N14Click(Sender: TObject);

	begin

	form3.Show;

	end;

	

	procedure TForm1.N26Click(Sender: TObject);

	begin

	Form2.show;

	end;

	

	procedure TForm1.N27Click(Sender: TObject);

	begin

	Form3.show;

	end;

	

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

	var a:integer;

	begin

	if Form1.Memo1.Modified=true then

	begin

	a:=Application.MessageBox('Сохранить изменения в документе','',3);

	if a=6 then

	N4Click(Sender)

	else if a=7 then

	halt

	else canclose:=false;

	end

	end;

	

	end.

	

	unit Unit2;

	

	interface

	

	uses

	  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

	  Dialogs, StdCtrls, Mask;

	

	type

	  TForm2 = class(TForm)

	    MaskEdit1: TMaskEdit;

	    Label1: TLabel;

	    Button1: TButton;

	    Button2: TButton;

	    MaskEdit2: TMaskEdit;

	    Label2: TLabel;

	    Button3: TButton;

	    Button4: TButton;

	    MaskEdit3: TMaskEdit;

	    Label3: TLabel;

	    Button5: TButton;

	    Button6: TButton;

	    procedure Button1Click(Sender: TObject);

	    procedure Button2Click(Sender: TObject);

	    procedure Button3Click(Sender: TObject);

	    procedure Button5Click(Sender: TObject);

	    procedure Button4Click(Sender: TObject);

	    procedure Button6Click(Sender: TObject);

	  private

	    { Private declarations }

	  public

	    { Public declarations }

	  end;

	

	var

	  Form2: TForm2;

	

	implementation

	

	uses Unit1;

	

	{$R *.dfm}

	

	procedure TForm2.Button1Click(Sender: TObject);

	begin

	Form1.Memo1.Seltext:=MaskEdit1.text;

	end;

	

	procedure TForm2.Button2Click(Sender: TObject);

	begin

	Form1.Memo1.Lines.Add(Maskedit1.Text);

	end;

	

	procedure TForm2.Button3Click(Sender: TObject);

	begin

	Form1.Memo1.Seltext:=MaskEdit2.text;

	end;

	

	procedure TForm2.Button5Click(Sender: TObject);

	begin

	Form1.Memo1.Seltext:=MaskEdit3.text;

	end;

	

	

	procedure TForm2.Button4Click(Sender: TObject);

	begin

	Form1.Memo1.Lines.Add(Maskedit2.Text);

	end;

	

	procedure TForm2.Button6Click(Sender: TObject);

	begin

	Form1.Memo1.Lines.Add(Maskedit3.Text);

	end;

	

	

	end.

	

	unit Unit3;

	

	interface

	

	uses

	  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

	  Dialogs, StdCtrls, ComCtrls, ExtCtrls;

	

	type

	  TForm3 = class(TForm)

	    Label1: TLabel;

	    Label2: TLabel;

	

	  private

	    { Private declarations }

	  public

	    { Public declarations }

	  end;

	

	var

	  Form3: TForm3;

	

	implementation

	

	uses Unit1, Unit2;

	

	{$R *.dfm}

	

	

	

	

	end.

Лист

2