Программирование свойств MS Word. Пример программирования панели

   
На этом шаге мы рассмотрим пример использования изученного материала.

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

procedure TForm1.Button3Click(Sender: TObject);
//Создать платежное поручение
const
  wdAllowOnlyFormFields=2;
  msoBarTop=1; //Панель с кнопками,
               //расположенная вдоль верхней стороны главного окна
  msoControlButton=1; //Кнопка
  msoBarNoMove=4;
var
  i: integer;
  CB: variant;
  BTN: variant;
begin
  // Отключаем панели
  for i:=1 to W.CommandBars.Count do
     W.CommandBars.Item[i].Enabled:=false;
  // Создаем новый документ по шаблону
  W.Documents.Add(ExtractFileDir(Application.ExeName)+
            '\Шаблон платежного поручения.dot');
  // Подставляем текст.
  FindAndInsert ('###№ П.П.&','1');
  FindAndInsert('###Дата&',datetostr(date));
  FindAndInsert('###Вид платежа&','почтой');
  FindAndInsert('###Сумма прописью&','Двести пятьдесят рублей сорок копеек');
  FindAndInsert ('###Сумма&', '250,40');
  FindAndInsert('###ИНН плательщика&', '0000000000');
  FindAndInsert('###КПП плательщика&','000000000011');
  FindAndInsert('###Плательщик&','ЗАО Селена');
  FindAndInsert('###Р/С плательщика&','00000000000000000000');
  FindAndInsert('###БИК плательщика&','000000');
  FindAndInsert('###К/С плательщика&','00000000000000000000');
  FindAndInsert('###ИНН получателя&','1111111111');
  FindAndInsert ('###КПП получателя&', '111111111100');
  FindAndInsert('###БИК получателя&','111111');
  FindAndInsert ('###К/С получателя&', '11111111111111111111');
  FindAndInsert ('###Р/С получателя&', '11111111111111111111');
  FindAndInsert('###Получатель&','ЗАО Комета');
  FindAndInsert ('###В.О.&', ' ') ;
  FindAndInsert('###H.П.&',' ');
  FindAndInsert('###Код&',' ');
  FindAndInsert('###C.П.&',' ');
  FindAndInsert('###0.П.&',' ');
  FindAndInsert('###Р.П.&',' ');
  FindAndInsert('#H1&', ' ');
  FindAndInsert('#H2&', ' ');
  FindAndInsert('#H3&', ' ');
  FindAndInsert('#H4&', ' ');
  FindAndInsert('#H5&', ' ');
  FindAndInsert('#H6&',' ');
  FindAndInsert('#H7&', ' ');
  FindAndInsert('###Назначение платежа&', 'Оплата за поставку товара');
  // Блокируем возможность изменения документа пользователем
  W.ActiveDocument.Protect(Password:='',NoReset:=False,
    Type:=wdAllowOnlyFormFields);
  // Создаем временную неперемещаемую панель
  CB:=W.CommandBars.Add ('Печать документа' , msoBarTop,
       False, True);
  CB.Enabled:=true;
  CB.Visible:=true;
  CB.Protection:=msoBarNoMove;
  // Создаем кнопки на панели
  for i:=3 to 7 do
  begin
    try
     BTN:=CB.Controls.Add(Type:=msoControlButton,
         ID:=IntToStr(i));
     BTN.Caption := 'ID='+IntToStr(i);
    except
    end;
  end;
end;

   
Результат выполнения процедуры представлен на рисунке 1.


Рис.1. Результат работы приложения

   
После печати и закрытия документа необходимо восстановить прежний вид панелей. Это нетрудно сделать, используя
методы программирования панелей и макросов.

   
Приведем полный текст приложения. Обратите внимание, что текст функции FindAndInsert() изменился по
сравнению с аналогичной функцией из 99 шага.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj, ExtDlgs;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  W: Variant;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//Создание объекта Word.Application
begin
  W:=CreateOleObject('Word.Application');
end;

procedure TForm1.Button2Click(Sender: TObject);
//Показать окно Word
begin
  W.Visible:=True;
end;

function FindAndInsert(FindText,ReplacementText:string):boolean;
// Данная функция позволяет находить строку FindText
// и подставлять на ее место строку ReplacementText.
const
  wdReplaceAll=2;
begin
  W.Selection.Find.Text:=FindText;
  W.Selection.Find.Replacement.Text:=ReplacementText;
  FindAndInsert:=W.Selection.Find.Execute(Replace:=wdReplaceAll);
end;

procedure TForm1.Button3Click(Sender: TObject);
//Создать платежное поручение
const
  wdAllowOnlyFormFields=2;
  msoBarTop=1; //Панель с кнопками,
               //расположенная вдоль верхней стороны главного окна
  msoControlButton=1; //Кнопка
  msoBarNoMove=4;
var
  i: integer;
  CB: variant;
  BTN: variant;
begin
  // Отключаем панели
  for i:=1 to W.CommandBars.Count do
     W.CommandBars.Item[i].Enabled:=false;
  // Создаем новый документ по шаблону
  W.Documents.Add(ExtractFileDir(Application.ExeName)+
            '\Шаблон платежного поручения.dot');
  // Подставляем текст.
  FindAndInsert ('###№ П.П.&','1');
  FindAndInsert('###Дата&',datetostr(date));
  FindAndInsert('###Вид платежа&','почтой');
  FindAndInsert('###Сумма прописью&','Двести пятьдесят рублей сорок копеек');
  FindAndInsert ('###Сумма&', '250,40');
  FindAndInsert('###ИНН плательщика&', '0000000000');
  FindAndInsert('###КПП плательщика&','000000000011');
  FindAndInsert('###Плательщик&','ЗАО Селена');
  FindAndInsert('###Р/С плательщика&','00000000000000000000');
  FindAndInsert('###БИК плательщика&','000000');
  FindAndInsert('###К/С плательщика&','00000000000000000000');
  FindAndInsert('###ИНН получателя&','1111111111');
  FindAndInsert ('###КПП получателя&', '111111111100');
  FindAndInsert('###БИК получателя&','111111');
  FindAndInsert ('###К/С получателя&', '11111111111111111111');
  FindAndInsert ('###Р/С получателя&', '11111111111111111111');
  FindAndInsert('###Получатель&','ЗАО Комета');
  FindAndInsert ('###В.О.&', ' ') ;
  FindAndInsert('###H.П.&',' ');
  FindAndInsert('###Код&',' ');
  FindAndInsert('###C.П.&',' ');
  FindAndInsert('###0.П.&',' ');
  FindAndInsert('###Р.П.&',' ');
  FindAndInsert('#H1&', ' ');
  FindAndInsert('#H2&', ' ');
  FindAndInsert('#H3&', ' ');
  FindAndInsert('#H4&', ' ');
  FindAndInsert('#H5&', ' ');
  FindAndInsert('#H6&',' ');
  FindAndInsert('#H7&', ' ');
  FindAndInsert('###Назначение платежа&', 'Оплата за поставку товара');
  // Блокируем возможность изменения документа пользователем
  W.ActiveDocument.Protect(Password:='',NoReset:=False,
    Type:=wdAllowOnlyFormFields);
  // Создаем временную неперемещаемую панель
  CB:=W.CommandBars.Add ('Печать документа' , msoBarTop,
       False, True);
  CB.Enabled:=true;
  CB.Visible:=true;
  CB.Protection:=msoBarNoMove;
  // Создаем кнопки на панели
  for i:=3 to 7 do
  begin
    try
     BTN:=CB.Controls.Add(Type:=msoControlButton,
         ID:=IntToStr(i));
     BTN.Caption := 'ID='+IntToStr(i);
    except
    end;
  end;
end;

end.

Текст этого приложения вместе с шаблоном можно взять здесь (12,6 Кб).

   
Возможные значения параметра Type метода Protect перечислены в таблице 1.

Таблица 1. Возможные значения параметра Type

КонстантаЗначение
wdAllowOnlyComments1
wdAllowOnlyFormFields2
wdAllowOnlyRevisions0
wdNoProtection-1

   
В заключение приведем возможные значения параметра Protection.

Таблица 2. Возможные значения параметра Protection

КонстантаЗначение
msoBarNoChangeDock16
msoBarNoChangeVisible8
msoBarNoCustomize1
msoBarNoHorizontalDock64
msoBarNoMove4
msoBarNoProtection0
msoBarNoResize2
msoBarNoVerticalDock32

   
Мы рассмотрели возможности объекта Word.Application, обеспечивающие формирование документов
Word. Конечно, это далеко не все его возможности, но даже они позволяют создавать документ Word посредством
приложений, разработанных в среде Delphi.

   
Со следующего шага мы начнем рассматривать аналогичные возможности использования
объекта Excel.Application в приложениях Delphi.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий