Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Word+Delphi (http://forum.oszone.net/showthread.php?t=30364)

Prisoner 08-08-2003 22:34 208356

Вот скажем нашел я в одном документе все что мне нать, необходимо все это добро вставить в другой документ и сохранить, не закрывая первый (не все добро повыбирали, жадные мы :)). А получается все время вывод в первый док, причем с затиранием всего его содержимого...
Даже такой код творит что-то странное имхо:
Код:

WordConnect(dmData.WordApplication);
      FileName:=dmData.odInFile.FileName;
      dmData.WordApplication.Documents.Open(FileName,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam);
       frMain.Caption:=IntToStr(dmData.WordApplication.Documents.Count);
       frMain.Caption:=frMain.Caption+'->'+dmData.WordApplication.Documents.Item(DocIndex).Name;
       dmData.WordApplication.Documents.Add(EmptyParam,NewTemplate,EmptyParam,EmptyParam);
       DocIndex:=DocIndex+1;
       dmData.WordDocument.ConnectTo(dmData.WordApplication.Documents.Item(DocIndex));
       frMain.Caption:=frMain.Caption+'*'+IntToStr(dmData.WordApplication.Documents.Count);
       frMain.Caption:=frMain.Caption+'->'+dmData.WordApplication.Documents.Item(DocIndex).Name;

В результате в кэпшене: 1->Test3.doc*2->Test3.doc хотя существуют два окна ворда с заголовками Test3.doc и Документ2.doc. Что за грабли?

Prisoner 09-08-2003 20:16 208357

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

Скажем откроем доку:

Код:

dmData.WordApplication.Documents.Open(FileName,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam);
      dmData.WordDocument.ConnectTo(dmData.WordApplication.ActiveDocument);

Теперь WordDocument будет давать возможность работать с этим открытым доком.

Добавим доку:

Код:

procedure NewWordDoc(WordApplication: TWordApplication;WordDocument: TWordDocument);
  Var
    NewTemplate:OleVariant;
  Begin
    NewTemplate:=False;
    WordApplication.Documents.Add(EmptyParam,NewTemplate,EmptyParam,EmptyParam);
    WordDocument.ConnectTo(WordApplication.ActiveDocument);
  End;

Теперь передаем в процедурку любой имеющийся экземпляр TWordDocument и работаем с ним без проблем... воть.


Время: 15:17.

Время: 15:17.
© OSzone.net 2001-