На этом шаге мы рассмотрим пример, имитирующий написание простейшего письма в MS Word.
Создадим приложение, аналогичное написанию простейшего письма в MS Word. В данном примере также проиллюстрируем некоторые методы работы с компонентом TWordApplication (просмотр, открытие, печать и сохранение документа).
Код модуля приложения располагается ниже:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls,Clipbrd,OleCtrls, Word2000, OleServer,ComObj, Buttons; type TForm1 = class(TForm) RGFont: TRadioGroup; RGAlighn: TRadioGroup; BNew: TButton; BOpen: TButton; BPreview: TButton; BPrint: TButton; BWord: TButton; BSave: TButton; BlnDoc: TButton; WordApplication1: TWordApplication; WordDocument1: TWordDocument; WordFont1: TWordFont; WordParagraphFormat1: TWordParagraphFormat; Edit1: TEdit; Memo1: TMemo; Label1: TLabel; Label2: TLabel; procedure FormCreate(Sender: TObject); procedure BNewClick(Sender: TObject); procedure BOpenClick(Sender: TObject); procedure BPreviewClick(Sender: TObject); procedure BPrintClick(Sender: TObject); procedure BSaveClick(Sender: TObject); procedure BWordClick(Sender: TObject); procedure BlnDocClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Form1: TForm1; W:variant; implementation {$R *.dfm} procedure Connect; //Проверка наличия открытого документа. begin if Form1.WordApplication1.Documents.Count=0 then begin Application.MessageBox('В Word нет открытого документа', 'Команда не выполнена', MB_OK+MB_ICONEXCLAMATION); Abort; end else begin //Соединение WordDocument1 с активным документом. Form1.WordDocument1.ConnectTo(Form1.WordApplication1.ActiveDocument); //Делаются доступными кнопки работы с документом. Form1.BlnDoc.Enabled:=true; Form1.BPreview.Enabled:=true; Form1.BPrint.Enabled:=true; Form1.BSave.Enabled:=true; end; end; procedure TForm1.FormCreate(Sender: TObject); begin //Если при начале работы в Word нет ни одного открытого документа, //то кнопки работы с документом делаются недоступными. if Form1.WordApplication1.Documents.Count=0 then begin BlnDoc.Enabled:=false; BPreview.Enabled:=false; BPrint.Enabled:=false; BSave.Enabled:=false; BNew.Enabled:=false; BOpen.Enabled:=false; end; end; procedure TForm1.BWordClick(Sender: TObject); begin WordApplication1.Visible:=true; //Word делается видимым. BOpen.Enabled:=true; end; procedure TForm1.BNewClick(Sender: TObject); //Создание в Word нового документа. Var Vis: OleVariant; begin WordApplication1.Visible:=true; Vis:=0; //Первоначально Word невидим. WordApplication1.Documents.Add(EmptyParam,EmptyParam,EmptyParam,Vis); Connect; end; //Открытие файла. procedure TForm1.BOpenClick(Sender: TObject); Var Dial: OleVariant; begin WordApplication1.Visible:=true; Dial:=wdDialogFileOpen; if WordApplication1.Dialogs.Item(Dial).Show(EmptyParam) = -1 then Connect; Bnew.Enabled:=true; end; //Предварительный просмотр. procedure TForm1.BPreviewClick(Sender: TObject); begin Connect; WordDocument1.PrintPreview; WordApplication1.Visible:=true; end; //Печать. procedure TForm1.BPrintClick(Sender: TObject); Var Dial: OleVariant; begin Connect; WordApplication1.Visible:=true; Dial:=wdDialogFilePrint; WordApplication1.Dialogs.Item(Dial).Show(EmptyParam); end; //Диалог сохранения файла. procedure TForm1.BSaveClick(Sender: TObject); Var Dial: OleVariant; begin Connect; Dial:=wdDialogFileSaveAs; WordApplication1.Dialogs.Item(Dial).Show(EmptyParam); end; //Занесение в документ информации. procedure TForm1.BlnDocClick(Sender: TObject); Var Direction: OleVariant; begin Connect; WordParagraphFormat1.ConnectTo(WordApplication1.Selection.ParagraphFormat); WordApplication1.Selection.InsertAfter('' +#13); //Снятие выделения. Direction:=wdCollapseEnd; WordApplication1.Selection.Collapse(Direction); //Пересылка в документ текста. WordApplication1.Selection.InsertAfter('Уважаемый '+Edit1.Text+ '!'+#13); WordApplication1.Selection.InsertAfter(Memo1.Text); //Установка шрифта и выравнивание текста. WordFont1.ConnectTo(WordApplication1.Selection.Font); WordParagraphFormat1.ConnectTo(WordApplication1.Selection.ParagraphFormat); if RGFont.ItemIndex > 1 then WordFont1.Bold:=1 else WordFont1.Bold:= 0; if RGFont.ItemIndex mod 2=1 then WordFont1.Italic:=1 else WordFont1.Italic:=0; case RGAlighn.ItemIndex of 0: WordParagraphFormat1.Alignment:=wdAlignParagraphLeft; 1: WordParagraphFormat1.Alignment:=wdAlignParagraphRight; 2: WordParagraphFormat1.Alignment:=wdAlignParagraphCenter; 3: WordParagraphFormat1.Alignment:=wdAlignParagraphJustify; end; WordApplication1.Selection.Collapse(Direction); //Снятие выделения. end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin WordApplication1.Quit; end; end.
Рис.1. Простейшее письмо в MS Word
На следующем шаге мы рассмотрим компонент TExcelApplication.