Главная страница
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.025 c
2-1188886212
Bast
2007-09-04 10:10
2007.09.30
Проблема


15-1188078391
Германн
2007-08-26 01:46
2007.09.30
Ещё раз про перевод из Си на Паскаль


11-1172321991
thaddy
2007-02-24 15:59
2007.09.30
www.delphifusion.com


3-1180202064
Valkyre
2007-05-26 21:54
2007.09.30
Не регистрируется подключение


3-1180354657
Вадим71
2007-05-28 16:17
2007.09.30
Как записать дату и время в smallDateTime