Распределенные приложения: контроллеры автоматизации. Часть 2. Фертиков В.В. - 24 стр.

UptoLike

Составители: 

24
Здесь в иллюстративных целях используется функция
ClassIDToProgID, позволяющая извлечь из реестра программный идентифи-
катор ProgId по заданному идентификатору класса CLSID. Поскольку , с одной
стороны , отображение ProgIdCLSID в реестре сохраняется при инсталляции
сервера, а с другой стороны , значение параметра CLASS_WordApplication
описано в импортированном модуле библиотеки типов, мы гарантированно
подключаемся именно к тому серверу, библиотека типов которого использова-
на в проекте. В случае неудачи соединения сервер запускается при помощи
класса CoWordApplication, образованного в процессе импорта сопряженного
класса библиотеки типов.
Последнее, о чем следует сказать перед тем как привести исходный код
целиком, это о способе вызова методов с необязательными параметрами. Рас -
смотрите следующий прием :
D := W.Documents.Add(EmptyParam,EmptyParam,
EmptyParam,EmptyParam);
Если вернуться к просмотру библиотеки типов, можно заметить, что ме-
тод Add имеет четыре необязательных параметра, для которых сервер , по-
видимому, предусматривает значения по умолчанию . Если нас устраивают эти
значения, можно в качестве параметров передать EmptyParam. А теперь обе-
щанный полный текст генератора отчета, переработанный в соответствии с из-
ложенными принципами:
procedure TForm1.Button1Click(Sender: TObject);
var W:_Application; D:_Document; S: Selection;
PosBeg,PosEnd,v1,v2,v3: OleVariant;
i,j: Integer; ws: WideString;
begin
with Table1 do begin
DatabaseName:='DBDEMOS'; TableName:='country.db'; Open
end;
try // если Word запущен - подключиться к нему
W := GetActiveOleObject(
ClassIDToProgID(CLASS_WordApplication))as _Application;
except // если нет - запустить
W:=CoWordApplication.Create;
end;
W.Visible := True;
D := W.Documents.Add(EmptyParam,EmptyParam,
EmptyParam,EmptyParam);
S:=W.Selection;
S.TypeText('Hello, World!'#13);
PosBeg := S.Start;
j:=0; ws:='';
for i:=0 to Table1.FieldCount-1 do
ws:=ws+#9+Table1.Fields.Fields[i].FieldName;
                                    24
     Здесь    в      иллюстративных     целях     используется    функция
ClassIDToProgID , позволяющая извлечь из реестра программный идентифи-
катор ProgId по заданному идентификатору класса CLSID. Поскольку, с одной
стороны, отображение ProgId–CLSID в реестре сохраняется при инсталляции
сервера, а с другой стороны, значение параметра CLASS_WordApplication
описано в импортированном модуле библиотеки типов, мы гарантированно
подключаемся именно к тому серверу, библиотека типов которого использова-
на в проекте. В случае неудачи соединения сервер запускается при помощи
класса CoWordApplication , образованного в процессе импорта сопряженного
класса библиотеки типов.
     Последнее, о чем следует сказать перед тем как привести исходный код
целиком, это о способе вызова методов с необязательными параметрами. Рас-
смотрите следующий прием:
D := W.Documents.Add(EmptyParam,EmptyParam,
                     EmptyParam,EmptyParam);

     Если вернуться к просмотру библиотеки типов, можно заметить, что ме-
тод Add имеет четыре необязательных параметра, для которых сервер, по-
видимому, предусматривает значения по умолчанию. Если нас устраивают эти
значения, можно в качестве параметров передать EmptyParam. А теперь – обе-
щанный полный текст генератора отчета, переработанный в соответствии с из-
ложенными принципами:
procedure TForm1.Button1Click(Sender: TObject);
var W:_Application; D:_Document; S: Selection;
    PosBeg,PosEnd,v1,v2,v3: OleVariant;
    i,j: Integer; ws: WideString;
begin
  with Table1 do begin
     DatabaseName:='DBDEMOS'; TableName:='country.db'; Open
  end;
  try    // если Word запущен - подключиться к нему
     W := GetActiveOleObject(
       ClassIDToProgID(CLASS_WordApplication))as _Application;
  except // если нет - запустить
     W:=CoWordApplication.Create;
  end;
  W.Visible := True;
  D := W.Documents.Add(EmptyParam,EmptyParam,
                       EmptyParam,EmptyParam);
  S:=W.Selection;
  S.TypeText('Hello, World!'#13);
  PosBeg := S.Start;
  j:=0; ws:='№';
  for i:=0 to Table1.FieldCount-1 do
     ws:=ws+#9+Table1.Fields.Fields[i].FieldName;