Главная страница
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.028 c
15-1188140037
leonidus
2007-08-26 18:53
2007.09.30
Разыскивается Янис Прасоль


2-1188558769
Dib@zol
2007-08-31 15:12
2007.09.30
SetWindowRgn


1-1184513356
KiriX
2007-07-15 19:29
2007.09.30
Как создать графическую форму?


2-1188802512
Dmitriy_
2007-09-03 10:55
2007.09.30
Как нажать на кнопку в окне браузера


1-1184835519
IntruderLab
2007-07-19 12:58
2007.09.30
Вопрос по компоненту TTreeView