Міністерство освіти і науки України
Хмельницький національний університет
Кафедра системного програмування
Лабораторна робота №5
з програмування
на тему:
«Робота з діалоговими компонентами»
Лабораторна робота №5
Тема: Робота з діалоговими компонентами.
Мета:ознайомитись з діалоговими компонентами середовища Delphi та навчитись їх застосовувати за призначенням.
Завдання
Розробити текстовий редактор, який містить головне меню з пунктами “Файл”, “Редагування”, “Друк”, “Про програму”. Пункт меню “Файл” містить підпункти “Відкрити”, “Зберегти”, “Зберегти як”. Пункт меню “Редагування” містить підпункти “Копіювати”, “Вирізати”, “Вставити”, “Замінити”. Пункт меню “Друк” містить підпункти “Друкувати”, “Настроїти принтер”.
Project1.lpr
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, Unit1, LResources, Printer4Lazarus
{ you can add units after this };
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}
begin
{$I project1.lrs}
Application.Title:='Текстовий редактор';
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Unit1.pas
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, Menus, StdCtrls, PrintersDlgs;
type
{ TForm1 }
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Memo1: TMemo;
MenuItem1: TMenuItem; MenuItem2: TMenuItem; MenuItem3: TMenuItem;
MenuItem4: TMenuItem; MenuItem5: TMenuItem; MenuItem6: TMenuItem;
MenuItem7: TMenuItem; MenuItem8: TMenuItem; MenuItem9: TMenuItem;
MenuItem10: TMenuItem; MenuItem11: TMenuItem;
MenuItem12: TMenuItem; MenuItem13: TMenuItem;
OpenDialog1: TOpenDialog;
PrintDialog1: TPrintDialog;
PrinterSetupDialog1: TPrinterSetupDialog;
ReplaceDialog1: TReplaceDialog;
SaveDialog1: TSaveDialog;
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
procedure ReplaceDialog1Find(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure MenuItem3Click(Sender: TObject);
procedure MenuItem5Click(Sender: TObject);
procedure MenuItem6Click(Sender: TObject);
procedure MenuItem7Click(Sender: TObject);
procedure MenuItem8Click(Sender: TObject);
procedure MenuItem9Click(Sender: TObject);
procedure MenuItem10Click(Sender: TObject);
procedure MenuItem11Click(Sender: TObject);
procedure MenuItem12Click(Sender: TObject);
procedure MenuItem13Click(Sender: TObject);
procedure ReplaceDialog1Replace(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1; FName:string;
implementation
{ TForm1 }
procedure TForm1.MenuItem5Click(Sender: TObject); //відкрити файл
begin
if (Memo1.Modified) and (Memo1.Text<>'') then if (MessageDlg('Текстовий редактор','Зберегти перед виходом ?',mtConfirmation,[mbYes,mbNo],0)=mrYes) then MenuItem6Click(Sender);
OpenDialog1.Filter:='Text Files(*.txt)|*TXT|Office Files(*.doc)|*DOC';
if OpenDialog1.Execute then
begin Memo1.Lines.Clear;
FName:=UTF8ToSys(OpenDialog1.FileName);
Memo1.Lines.LoadFromFile(FName);
Form1.Caption:=SysToUTF8(FName);
Memo1.Modified:=False;
end;
end;
procedure TForm1.MenuItem6Click(Sender: TObject); //зберегти файл
var a:string;
begin
if (Memo1.Modified) and (Memo1.Text<>'') then begin
if FName='' then
begin SaveDialog1.Filter:='Text Files(*.txt)|*TXT|Office Files(*.doc)|*DOC';
if SaveDialog1.Execute then
begin
a:=SaveDialog1.FileName;
Memo1.Lines.SaveToFile(UTF8ToSys(a)+'.txt');
end;
end else
Memo1.Lines.SaveToFile(FName);
Memo1.Modified:=False;
end;
end;
procedure TForm1.MenuItem7Click(Sender: TObject); //зберегти як
var a:string;
begin
if Memo1.Text<>'' then begin SaveDialog1.Filter:='Text Files(*.txt)|*TXT|Office Files(*.doc)|*DOC';
if SaveDialog1.Execute then begin a:=SaveDialog1.FileName; Memo1.Lines.SaveToFile(UTF8ToSys(a)); end;
Memo1.Modified:=False;
end;
end;
procedure TForm1.MenuItem12Click(Sender: TObject); //друкувати
begin
ShowMessage('Файл буде надруковано!');
end;
procedure TForm1.MenuItem13Click(Sender: TObject); //настроїти принтер
begin
PrinterSetupDialog1.Execute;
end;
procedure TForm1.MenuItem3Click(Sender: TObject); //про програму
begin
ShowMessage('Даний редактор дозволяє створювати нові текстові файли або відкривати вже існуючі,'+#10#13+'редагувати, копіювати, вставляти, замінювати.'+#10#13+'Також редактор дозволяє отримувати інформацію про принтери та виводити текст на друк.'+#10#13+'Виконав студент гр. КІ-10-1 Ноль Микола, 2011');
end;
procedure TForm1.MenuItem8Click(Sender: TObject); //копіювати
begin
Memo1.CopyToClipboard;
end;
procedure TForm1.MenuItem9Click(Sender: TObject); //вирізати
begin
Memo1.CutToClipboard;
end;
procedure TForm1.MenuItem10Click(Sender: TObject); //вставити
begin
Memo1.PasteFromClipboard;
end;
procedure TForm1.MenuItem11Click(Sender: TObject); //замінити
begin
with ReplaceDialog1 do
begin if Memo1.SelLength<>0 then FindText:=Memo1.SelText;
Position:=Point(Form1.Left,Form1.Top+Memo1.Top+Memo1.Height);
Options:=Options+[frHideUpDown,frHideWholeWord];
Execute;
end;
end;
procedure TForm1.ReplaceDialog1Find(Sender: TObject);
var
FTPos:Integer; IText,FText:String;
begin
Memo1.SetFocus;
if not (frMatchCase in ReplaceDialog1.Options) then
FText:=AnsiLowerCase(ReplaceDialog1.FindText) else FText:=ReplaceDialog1.FindText;
IText:=copy(Memo1.Text,Memo1.SelStart+Memo1.SelLength+1,Length(Memo1.Text));
if not (frMatchCase in ReplaceDialog1.Options) then IText:=AnsiLowerCase(IText);
FTPos:=pos(FText,IText);
if FTPos<>0 then begin
FTPos:=FTPos+Memo1.SelStart+Memo1.SelLength;
Memo1.SelStart:=FTPos-1;Memo1.SelLength:=Length(FText); end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
CanClose:=MessageDlg('Текстовий редактор','Дійсно закрити?',mtConfirmation,[mbYes,mbNo],0)=mrYes;
if CanClose and Memo1.Modified and (Memo1.Text<>'') then if (MessageDlg('Текстовий редактор','Зберегти перед виходом ?',mtConfirmation,[mbYes,mbNo],0)=mrYes) then MenuItem6Click(Sender);
end;
procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
begin
with ReplaceDialog1 do
while True do
begin
if Memo1.SelText <> FindText then ReplaceDialog1Find(Sender);
if Memo1.SelLength = 0 then begin ShowMessage('Досягнуто кінець файла. Пошук закінчено.'); Break; end;
Memo1.SelText:=ReplaceText;
if not (frReplaceAll in Options) then Break;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FName:='';
end;
initialization
{$I unit1.lrs}
end.
Висновок. Виконавши лабораторну роботу, я освоїв роботу програм з такими діалоговими компонентами як OpenDialog та SaveDialog для зв’язку з файлами (їх створення, збереження або відкриття вже існуючих), PrinterSetupDialog для налагодження підключених принтерів для друку, FindDialog та ReplaceDialog для пошуку та заміни тексту. Також закріпив навички роботи з компонентами середовища Delphi TMemo та TMainMenu, зрозумів основні принципи створення текстового редактора.
//