Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Загрузка в "WordApplication1" файл из TMemoryStream


Chaser ©   (2007-07-17 12:08:00) 

Всем привет.

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


Chaser   (2007-07-17 15:40:00) [1]

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


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


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


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

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

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


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


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


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

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


Chaser   (2007-07-17 15:09:00) [4]

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


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 13:34:00) [5]


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


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


Chaser   (2007-07-17 13:28:00) [6]

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


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


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


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


Chaser   (2007-07-17 13:21:00) [8]

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


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

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


Chaser   (2007-07-17 13:02:00) [10]

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


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

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


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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо