Шаг 10.
Пример, имитирующий написание простейшего письма в MS Word

    На этом шаге мы рассмотрим пример, имитирующий написание простейшего письма в 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.




Предыдущий шаг Содержание Следующий шаг