Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.30;
Скачать: CL | DM;

Вниз

Загрузка в "WordApplication1" файл из TMemoryStream   Найти похожие ветки 

 
Chaser ©   (2007-07-17 12:08) [0]

Всем привет.

Возникла необходимость загружать в "WordApplication1" файл из TMemoryStream.
Конечно можно сначала сохранять файл на диск, а потом делать "WordApplication1.Documents.Open(...)", а затем удалять фал, но то как-то некрасиво получается.
Загрузку из потока в WordApplication не нашел.
Подкажите, есть ли решение данного вопроса?


 
umbra ©   (2007-07-17 12:15) [1]


> есть ли решение данного вопроса?
>

скорее всего нет.


 
Сергей М. ©   (2007-07-17 12:16) [2]

Используй TOleContainer + TOleStream


 
Chaser ©   (2007-07-17 13:02) [3]

Через TOleContainer геморно...


 
Сергей М. ©   (2007-07-17 13:13) [4]

Чтой-то вдруг ?


 
Chaser ©   (2007-07-17 13:21) [5]

Да вот нашел всего пару примеров, и то в одном случае загружает, но не печатает, выдает ошибку.
А есть простой пример по TOleContainer + TOleStream?


 
Сергей М. ©   (2007-07-17 13:25) [6]


> А есть простой пример по TOleContainer + TOleStream?


У тебя ж их целых два, зачем тебе еще один ?


 
Chaser ©   (2007-07-17 13:28) [7]

Там не совсем то ))


 
Сергей М. ©   (2007-07-17 13:34) [8]


> Там не совсем то


Как это "не совсем то" ?
LoadFromStream там используется ? Вот от него и пляши, это ключевой метод.


 
Chaser ©   (2007-07-17 15:09) [9]

К примеру есть код:


var
 MSWord: Variant;
 ms: TMemoryStream;
begin
if OpenDialog1.Execute
then
 begin
  try
   MSWord:=CreateOleObject("Word.Application"); // для остальных
  except
   MSWord:=CreateOleObject("Word.Application.10"); // для Office XP
  end;

  // ms:=TmemoryStream.Create;
  //...
  // OleContainer1.LoadFromStream(ms);
  // ms.Free;

  MSWord.Documents.Open(OpenDialog1.FileName);
  MSWord.PrintOut;
  MSWord.Quit;
  MSWord:=Unassigned;
 end
end;


Но как загрузить в MSWord содержимое объекта OleContainer1 не понятно.
Есть какое-то присвоение? Так как у MSWord кроме Insert, Open и Add больше ничего полезного нет.


 
Сергей М. ©   (2007-07-17 15:11) [10]


> К примеру есть код


Выкинь его нафих.

Все тоже самое делает OleContainer, имеющий при этом то что тебе нужно - метод LoadFromStream.


 
Сергей М. ©   (2007-07-17 15:21) [11]


> как загрузить в MSWord содержимое объекта OleContainer1
> не понятно


Положись на OleLoad, к вызову которого в конечном итоге сводится вызов OleContainer.LoadFromStream. Он тебе и сам Word загрузит и скомандует Ворду открыть документ, хранящийся в потоке.

Поток должен быть представлен объектом TOleStream, который, в свою очередь, берет данные из интерфейса IStream, представляемого с пом. объекта класса TStreamAdapter.

Обязательно следует учесть, что стрим, хранящий образ документа и используемый для его загрузки методом TOleContainer.LoadFromStream, должен начинаться с данных в формате TStreamHeader (см. olectrns.pas)


 
Chaser ©   (2007-07-17 15:40) [12]

ОК, спасибо за информацию, буду разбираться.



Страницы: 1 вся ветка

Текущий архив: 2007.09.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
2-1189066158
Fleg
2007-09-06 12:09
2007.09.30
методы


3-1179909872
ed_ch
2007-05-23 12:44
2007.09.30
Как получить вычисляемое поле в базе данных


2-1189059357
Bast
2007-09-06 10:15
2007.09.30
---------------


2-1189080006
maslcs
2007-09-06 16:00
2007.09.30
внешний вид scroll а в компоненте webBrowser


11-1172563692
Fregl
2007-02-27 11:08
2007.09.30
Отлов ("перехват") событий VCL приложением из KOL DLL