![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка в "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]
> есть ли решение данного вопроса?
>
скорее всего нет.